1#include "floatscan.h" 2#include "libc.h" 3#include "shgetc.h" 4#include "stdio_impl.h" 5#include <stdlib.h> 6 7static long double strtox(const char* s, char** p, int prec) { 8 FILE f = {.buf = (void*)s, .rpos = (void*)s, .rend = (void*)-1, .lock = -1}; 9 shlim(&f, 0); 10 long double y = __floatscan(&f, prec, 1); 11 off_t cnt = shcnt(&f); 12 if (p) 13 *p = cnt ? (char*)s + cnt : (char*)s; 14 return y; 15} 16 17float strtof(const char* restrict s, char** restrict p) { 18 return strtox(s, p, 0); 19} 20 21double strtod(const char* restrict s, char** restrict p) { 22 return strtox(s, p, 1); 23} 24 25long double strtold(const char* restrict s, char** restrict p) { 26 return strtox(s, p, 2); 27} 28