fxlibc/src/stdlib/strtold.c

21 lines
449 B
C

#include "stdlib_p.h"
#include <errno.h>
long double strtold(char const * restrict ptr, char ** restrict endptr)
{
long double ld = 0;
if(endptr)
*endptr = (char *)ptr;
struct __scanf_input in = { .str = ptr, .fp = NULL };
__scanf_start(&in);
int err = __strto_fp(&in, NULL, NULL, &ld, INT_MAX);
__scanf_end(&in);
if(err != 0)
errno = (err == EOF) ? EINVAL : err;
if(err != EINVAL && endptr)
*endptr = (char *)in.str;
return ld;
}