xref: /aosp_15_r20/external/musl/src/stdlib/strtod.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #include <stdlib.h>
2*c9945492SAndroid Build Coastguard Worker #include "shgetc.h"
3*c9945492SAndroid Build Coastguard Worker #include "floatscan.h"
4*c9945492SAndroid Build Coastguard Worker #include "stdio_impl.h"
5*c9945492SAndroid Build Coastguard Worker 
strtox(const char * s,char ** p,int prec)6*c9945492SAndroid Build Coastguard Worker static long double strtox(const char *s, char **p, int prec)
7*c9945492SAndroid Build Coastguard Worker {
8*c9945492SAndroid Build Coastguard Worker 	FILE f;
9*c9945492SAndroid Build Coastguard Worker 	sh_fromstring(&f, s);
10*c9945492SAndroid Build Coastguard Worker 	shlim(&f, 0);
11*c9945492SAndroid Build Coastguard Worker 	long double y = __floatscan(&f, prec, 1);
12*c9945492SAndroid Build Coastguard Worker 	off_t cnt = shcnt(&f);
13*c9945492SAndroid Build Coastguard Worker 	if (p) *p = cnt ? (char *)s + cnt : (char *)s;
14*c9945492SAndroid Build Coastguard Worker 	return y;
15*c9945492SAndroid Build Coastguard Worker }
16*c9945492SAndroid Build Coastguard Worker 
strtof(const char * restrict s,char ** restrict p)17*c9945492SAndroid Build Coastguard Worker float strtof(const char *restrict s, char **restrict p)
18*c9945492SAndroid Build Coastguard Worker {
19*c9945492SAndroid Build Coastguard Worker 	return strtox(s, p, 0);
20*c9945492SAndroid Build Coastguard Worker }
21*c9945492SAndroid Build Coastguard Worker 
strtod(const char * restrict s,char ** restrict p)22*c9945492SAndroid Build Coastguard Worker double strtod(const char *restrict s, char **restrict p)
23*c9945492SAndroid Build Coastguard Worker {
24*c9945492SAndroid Build Coastguard Worker 	return strtox(s, p, 1);
25*c9945492SAndroid Build Coastguard Worker }
26*c9945492SAndroid Build Coastguard Worker 
strtold(const char * restrict s,char ** restrict p)27*c9945492SAndroid Build Coastguard Worker long double strtold(const char *restrict s, char **restrict p)
28*c9945492SAndroid Build Coastguard Worker {
29*c9945492SAndroid Build Coastguard Worker 	return strtox(s, p, 2);
30*c9945492SAndroid Build Coastguard Worker }
31