mirror of
https://github.com/ziglang/zig.git
synced 2026-02-10 19:41:16 +00:00
This was a bit trickier than it should be due to symbol conflicts with zig's compiler-rt implementation. We attempt to use weak linkage in our compiler-rt, but this does not seem to be working in all cases. I manually disabled export of the problematic compiler-rt math functions in order to cross compile musl's libc.so for all targets as input to `tools/gen_stubs.zig`. Other than that, this update went fairly smoothly. Quite a few additional symbols were added to the blacklist in `tools/gen_stubs.zig` due to recent reorganization of zig's compiler-rt.
31 lines
592 B
C
Vendored
31 lines
592 B
C
Vendored
#include <stdlib.h>
|
|
#include "shgetc.h"
|
|
#include "floatscan.h"
|
|
#include "stdio_impl.h"
|
|
|
|
static long double strtox(const char *s, char **p, int prec)
|
|
{
|
|
FILE f;
|
|
sh_fromstring(&f, s);
|
|
shlim(&f, 0);
|
|
long double y = __floatscan(&f, prec, 1);
|
|
off_t cnt = shcnt(&f);
|
|
if (p) *p = cnt ? (char *)s + cnt : (char *)s;
|
|
return y;
|
|
}
|
|
|
|
float strtof(const char *restrict s, char **restrict p)
|
|
{
|
|
return strtox(s, p, 0);
|
|
}
|
|
|
|
double strtod(const char *restrict s, char **restrict p)
|
|
{
|
|
return strtox(s, p, 1);
|
|
}
|
|
|
|
long double strtold(const char *restrict s, char **restrict p)
|
|
{
|
|
return strtox(s, p, 2);
|
|
}
|