1570af302Sopenharmony_ci#include <stdlib.h> 2570af302Sopenharmony_ci#include "shgetc.h" 3570af302Sopenharmony_ci#include "floatscan.h" 4570af302Sopenharmony_ci#include "stdio_impl.h" 5570af302Sopenharmony_ci 6570af302Sopenharmony_cistatic long double strtox(const char *s, char **p, int prec) 7570af302Sopenharmony_ci{ 8570af302Sopenharmony_ci FILE f; 9570af302Sopenharmony_ci sh_fromstring(&f, s); 10570af302Sopenharmony_ci shlim(&f, 0); 11570af302Sopenharmony_ci long double y = __floatscan(&f, prec, 1); 12570af302Sopenharmony_ci off_t cnt = shcnt(&f); 13570af302Sopenharmony_ci if (p) *p = cnt ? (char *)s + cnt : (char *)s; 14570af302Sopenharmony_ci return y; 15570af302Sopenharmony_ci} 16570af302Sopenharmony_ci 17570af302Sopenharmony_ci#if defined(__LITEOS__) || (!defined(MUSL_AARCH64_ARCH)) && (!defined(MUSL_ARM_ARCH)) 18570af302Sopenharmony_cifloat strtof(const char *restrict s, char **restrict p) 19570af302Sopenharmony_ci{ 20570af302Sopenharmony_ci return strtox(s, p, 0); 21570af302Sopenharmony_ci} 22570af302Sopenharmony_ci 23570af302Sopenharmony_cidouble strtod(const char *restrict s, char **restrict p) 24570af302Sopenharmony_ci{ 25570af302Sopenharmony_ci return strtox(s, p, 1); 26570af302Sopenharmony_ci} 27570af302Sopenharmony_ci#endif 28570af302Sopenharmony_ci 29570af302Sopenharmony_cilong double strtold(const char *restrict s, char **restrict p) 30570af302Sopenharmony_ci{ 31570af302Sopenharmony_ci return strtox(s, p, 2); 32570af302Sopenharmony_ci} 33