1 #include "shgetc.h"
2 #include "floatscan.h"
3 #include <wchar.h>
4 #include <wctype.h>
5
wcstox(const wchar_t * restrict s,wchar_t ** restrict p,int prec)6 static long double wcstox(const wchar_t * restrict s,
7 wchar_t ** restrict p,
8 int prec)
9 {
10 wchar_t *t = (wchar_t *)s;
11 struct fake_file_t f;
12 while (iswspace(*t)) t++;
13 shinit_wcstring(&f, t);
14 long double y = __floatscan(&f, prec, 1);
15 if (p) {
16 size_t cnt = shcnt(&f);
17 *p = cnt ? t + cnt : (wchar_t *)s;
18 }
19 return y;
20 }
21
wcstof(const wchar_t * restrict s,wchar_t ** restrict p)22 float wcstof(const wchar_t *restrict s, wchar_t **restrict p)
23 {
24 return wcstox(s, p, 0);
25 }
26
wcstod(const wchar_t * restrict s,wchar_t ** restrict p)27 double wcstod(const wchar_t *restrict s, wchar_t **restrict p)
28 {
29 return wcstox(s, p, 1);
30 }
31
wcstold(const wchar_t * restrict s,wchar_t ** restrict p)32 long double wcstold(const wchar_t *restrict s, wchar_t **restrict p)
33 {
34 return wcstox(s, p, 2);
35 }
36