github.com/afumu/libc@v0.0.6/musl/src/stdlib/strtod.c (about) 1 #include <stdlib.h> 2 #include "shgetc.h" 3 #include "floatscan.h" 4 #include "stdio_impl.h" 5 6 static long double strtox(const char *s, char **p, int prec) 7 { 8 FILE f; 9 sh_fromstring(&f, s); 10 shlim(&f, 0); 11 long double y = __floatscan(&f, prec, 1); 12 off_t cnt = shcnt(&f); 13 if (p) *p = cnt ? (char *)s + cnt : (char *)s; 14 return y; 15 } 16 17 float strtof(const char *restrict s, char **restrict p) 18 { 19 return strtox(s, p, 0); 20 } 21 22 double strtod(const char *restrict s, char **restrict p) 23 { 24 return strtox(s, p, 1); 25 } 26 27 long double strtold(const char *restrict s, char **restrict p) 28 { 29 return strtox(s, p, 2); 30 } 31 32 weak_alias(strtof, strtof_l); 33 weak_alias(strtod, strtod_l); 34 weak_alias(strtold, strtold_l); 35 weak_alias(strtof, __strtof_l); 36 weak_alias(strtod, __strtod_l); 37 weak_alias(strtold, __strtold_l);