2024-01-14 13:44:27 +01:00
|
|
|
#include "stdlib_p.h"
|
2021-05-21 23:52:54 +02:00
|
|
|
#include <errno.h>
|
|
|
|
|
|
|
|
double strtod(char const * restrict ptr, char ** restrict endptr)
|
|
|
|
{
|
|
|
|
double d = 0;
|
2022-08-22 19:00:13 +02:00
|
|
|
if(endptr)
|
|
|
|
*endptr = (char *)ptr;
|
|
|
|
|
2024-01-14 19:28:36 +01:00
|
|
|
struct __scanf_input in = { .str = ptr, .fp = NULL };
|
2022-08-22 19:00:13 +02:00
|
|
|
__scanf_start(&in);
|
2024-01-14 19:28:36 +01:00
|
|
|
int err = __strto_fp(&in, &d, NULL, NULL, INT_MAX);
|
2022-08-22 19:00:13 +02:00
|
|
|
__scanf_end(&in);
|
|
|
|
|
|
|
|
if(err != 0)
|
2024-01-14 17:30:30 +01:00
|
|
|
errno = (err == EOF) ? EINVAL : err;
|
2022-08-22 19:00:13 +02:00
|
|
|
if(err != EINVAL && endptr)
|
|
|
|
*endptr = (char *)in.str;
|
2021-05-21 23:52:54 +02:00
|
|
|
return d;
|
|
|
|
}
|