Commit 6dffa67b by Iain Buclaw

libphobos: Backport extern(C) bindings from druntime 2.091

Merge upstream druntime 47688279.

Reviewed-on: https://github.com/dlang/druntime/pull/3073

Fixes: PR d/90718
Fixes: PR d/90719

libphobos/ChangeLog:

	* libdruntime/Makefile.am (DRUNTIME_DSOURCES_LINUX): Remove
	core/sys/linux/sys/netinet/tcp.d.
	* libdruntime/Makefile.in: Regenerate.
parent 9b8e9006
2020-04-27 Iain Buclaw <ibuclaw@gdcproject.org> 2020-04-27 Iain Buclaw <ibuclaw@gdcproject.org>
* libdruntime/Makefile.am (DRUNTIME_DSOURCES_LINUX): Remove
core/sys/linux/sys/netinet/tcp.d.
* libdruntime/Makefile.in: Regenerate.
2020-04-27 Iain Buclaw <ibuclaw@gdcproject.org>
* configure.tgt: Add hppa-*-linux* as a supported target. * configure.tgt: Add hppa-*-linux* as a supported target.
2020-04-26 Iain Buclaw <ibuclaw@gdcproject.org> 2020-04-26 Iain Buclaw <ibuclaw@gdcproject.org>
......
2b5c0b2766949e788e4929c5fb0e2ba698ff79a3 476882795473a884f837bea6da850ac5181868d1
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the dlang/druntime repository. merge done from the dlang/druntime repository.
...@@ -255,12 +255,12 @@ DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \ ...@@ -255,12 +255,12 @@ DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \
core/sys/linux/sched.d core/sys/linux/stdio.d core/sys/linux/string.d \ core/sys/linux/sched.d core/sys/linux/stdio.d core/sys/linux/string.d \
core/sys/linux/sys/auxv.d core/sys/linux/sys/eventfd.d \ core/sys/linux/sys/auxv.d core/sys/linux/sys/eventfd.d \
core/sys/linux/sys/file.d core/sys/linux/sys/inotify.d \ core/sys/linux/sys/file.d core/sys/linux/sys/inotify.d \
core/sys/linux/sys/mman.d core/sys/linux/sys/netinet/tcp.d \ core/sys/linux/sys/mman.d core/sys/linux/sys/prctl.d \
core/sys/linux/sys/prctl.d core/sys/linux/sys/signalfd.d \ core/sys/linux/sys/signalfd.d core/sys/linux/sys/socket.d \
core/sys/linux/sys/socket.d core/sys/linux/sys/sysinfo.d \ core/sys/linux/sys/sysinfo.d core/sys/linux/sys/time.d \
core/sys/linux/sys/time.d core/sys/linux/sys/xattr.d \ core/sys/linux/sys/xattr.d core/sys/linux/termios.d \
core/sys/linux/termios.d core/sys/linux/time.d \ core/sys/linux/time.d core/sys/linux/timerfd.d core/sys/linux/tipc.d \
core/sys/linux/timerfd.d core/sys/linux/tipc.d core/sys/linux/unistd.d core/sys/linux/unistd.d
DRUNTIME_DSOURCES_NETBSD = core/sys/netbsd/dlfcn.d \ DRUNTIME_DSOURCES_NETBSD = core/sys/netbsd/dlfcn.d \
core/sys/netbsd/execinfo.d core/sys/netbsd/string.d \ core/sys/netbsd/execinfo.d core/sys/netbsd/string.d \
......
...@@ -334,13 +334,12 @@ am__objects_17 = core/sys/linux/config.lo core/sys/linux/dlfcn.lo \ ...@@ -334,13 +334,12 @@ am__objects_17 = core/sys/linux/config.lo core/sys/linux/dlfcn.lo \
core/sys/linux/stdio.lo core/sys/linux/string.lo \ core/sys/linux/stdio.lo core/sys/linux/string.lo \
core/sys/linux/sys/auxv.lo core/sys/linux/sys/eventfd.lo \ core/sys/linux/sys/auxv.lo core/sys/linux/sys/eventfd.lo \
core/sys/linux/sys/file.lo core/sys/linux/sys/inotify.lo \ core/sys/linux/sys/file.lo core/sys/linux/sys/inotify.lo \
core/sys/linux/sys/mman.lo core/sys/linux/sys/netinet/tcp.lo \ core/sys/linux/sys/mman.lo core/sys/linux/sys/prctl.lo \
core/sys/linux/sys/prctl.lo core/sys/linux/sys/signalfd.lo \ core/sys/linux/sys/signalfd.lo core/sys/linux/sys/socket.lo \
core/sys/linux/sys/socket.lo core/sys/linux/sys/sysinfo.lo \ core/sys/linux/sys/sysinfo.lo core/sys/linux/sys/time.lo \
core/sys/linux/sys/time.lo core/sys/linux/sys/xattr.lo \ core/sys/linux/sys/xattr.lo core/sys/linux/termios.lo \
core/sys/linux/termios.lo core/sys/linux/time.lo \ core/sys/linux/time.lo core/sys/linux/timerfd.lo \
core/sys/linux/timerfd.lo core/sys/linux/tipc.lo \ core/sys/linux/tipc.lo core/sys/linux/unistd.lo
core/sys/linux/unistd.lo
@DRUNTIME_OS_LINUX_TRUE@am__objects_18 = $(am__objects_17) @DRUNTIME_OS_LINUX_TRUE@am__objects_18 = $(am__objects_17)
am__objects_19 = core/sys/windows/accctrl.lo \ am__objects_19 = core/sys/windows/accctrl.lo \
core/sys/windows/aclapi.lo core/sys/windows/aclui.lo \ core/sys/windows/aclapi.lo core/sys/windows/aclui.lo \
...@@ -878,12 +877,12 @@ DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \ ...@@ -878,12 +877,12 @@ DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \
core/sys/linux/sched.d core/sys/linux/stdio.d core/sys/linux/string.d \ core/sys/linux/sched.d core/sys/linux/stdio.d core/sys/linux/string.d \
core/sys/linux/sys/auxv.d core/sys/linux/sys/eventfd.d \ core/sys/linux/sys/auxv.d core/sys/linux/sys/eventfd.d \
core/sys/linux/sys/file.d core/sys/linux/sys/inotify.d \ core/sys/linux/sys/file.d core/sys/linux/sys/inotify.d \
core/sys/linux/sys/mman.d core/sys/linux/sys/netinet/tcp.d \ core/sys/linux/sys/mman.d core/sys/linux/sys/prctl.d \
core/sys/linux/sys/prctl.d core/sys/linux/sys/signalfd.d \ core/sys/linux/sys/signalfd.d core/sys/linux/sys/socket.d \
core/sys/linux/sys/socket.d core/sys/linux/sys/sysinfo.d \ core/sys/linux/sys/sysinfo.d core/sys/linux/sys/time.d \
core/sys/linux/sys/time.d core/sys/linux/sys/xattr.d \ core/sys/linux/sys/xattr.d core/sys/linux/termios.d \
core/sys/linux/termios.d core/sys/linux/time.d \ core/sys/linux/time.d core/sys/linux/timerfd.d core/sys/linux/tipc.d \
core/sys/linux/timerfd.d core/sys/linux/tipc.d core/sys/linux/unistd.d core/sys/linux/unistd.d
DRUNTIME_DSOURCES_NETBSD = core/sys/netbsd/dlfcn.d \ DRUNTIME_DSOURCES_NETBSD = core/sys/netbsd/dlfcn.d \
core/sys/netbsd/execinfo.d core/sys/netbsd/string.d \ core/sys/netbsd/execinfo.d core/sys/netbsd/string.d \
...@@ -1526,11 +1525,6 @@ core/sys/linux/sys/eventfd.lo: core/sys/linux/sys/$(am__dirstamp) ...@@ -1526,11 +1525,6 @@ core/sys/linux/sys/eventfd.lo: core/sys/linux/sys/$(am__dirstamp)
core/sys/linux/sys/file.lo: core/sys/linux/sys/$(am__dirstamp) core/sys/linux/sys/file.lo: core/sys/linux/sys/$(am__dirstamp)
core/sys/linux/sys/inotify.lo: core/sys/linux/sys/$(am__dirstamp) core/sys/linux/sys/inotify.lo: core/sys/linux/sys/$(am__dirstamp)
core/sys/linux/sys/mman.lo: core/sys/linux/sys/$(am__dirstamp) core/sys/linux/sys/mman.lo: core/sys/linux/sys/$(am__dirstamp)
core/sys/linux/sys/netinet/$(am__dirstamp):
@$(MKDIR_P) core/sys/linux/sys/netinet
@: > core/sys/linux/sys/netinet/$(am__dirstamp)
core/sys/linux/sys/netinet/tcp.lo: \
core/sys/linux/sys/netinet/$(am__dirstamp)
core/sys/linux/sys/prctl.lo: core/sys/linux/sys/$(am__dirstamp) core/sys/linux/sys/prctl.lo: core/sys/linux/sys/$(am__dirstamp)
core/sys/linux/sys/signalfd.lo: core/sys/linux/sys/$(am__dirstamp) core/sys/linux/sys/signalfd.lo: core/sys/linux/sys/$(am__dirstamp)
core/sys/linux/sys/socket.lo: core/sys/linux/sys/$(am__dirstamp) core/sys/linux/sys/socket.lo: core/sys/linux/sys/$(am__dirstamp)
...@@ -1867,8 +1861,6 @@ mostlyclean-compile: ...@@ -1867,8 +1861,6 @@ mostlyclean-compile:
-rm -f core/sys/linux/netinet/*.lo -rm -f core/sys/linux/netinet/*.lo
-rm -f core/sys/linux/sys/*.$(OBJEXT) -rm -f core/sys/linux/sys/*.$(OBJEXT)
-rm -f core/sys/linux/sys/*.lo -rm -f core/sys/linux/sys/*.lo
-rm -f core/sys/linux/sys/netinet/*.$(OBJEXT)
-rm -f core/sys/linux/sys/netinet/*.lo
-rm -f core/sys/netbsd/*.$(OBJEXT) -rm -f core/sys/netbsd/*.$(OBJEXT)
-rm -f core/sys/netbsd/*.lo -rm -f core/sys/netbsd/*.lo
-rm -f core/sys/netbsd/sys/*.$(OBJEXT) -rm -f core/sys/netbsd/sys/*.$(OBJEXT)
...@@ -2027,7 +2019,6 @@ clean-libtool: ...@@ -2027,7 +2019,6 @@ clean-libtool:
-rm -rf core/sys/linux/.libs core/sys/linux/_libs -rm -rf core/sys/linux/.libs core/sys/linux/_libs
-rm -rf core/sys/linux/netinet/.libs core/sys/linux/netinet/_libs -rm -rf core/sys/linux/netinet/.libs core/sys/linux/netinet/_libs
-rm -rf core/sys/linux/sys/.libs core/sys/linux/sys/_libs -rm -rf core/sys/linux/sys/.libs core/sys/linux/sys/_libs
-rm -rf core/sys/linux/sys/netinet/.libs core/sys/linux/sys/netinet/_libs
-rm -rf core/sys/netbsd/.libs core/sys/netbsd/_libs -rm -rf core/sys/netbsd/.libs core/sys/netbsd/_libs
-rm -rf core/sys/netbsd/sys/.libs core/sys/netbsd/sys/_libs -rm -rf core/sys/netbsd/sys/.libs core/sys/netbsd/sys/_libs
-rm -rf core/sys/openbsd/.libs core/sys/openbsd/_libs -rm -rf core/sys/openbsd/.libs core/sys/openbsd/_libs
...@@ -2183,7 +2174,6 @@ distclean-generic: ...@@ -2183,7 +2174,6 @@ distclean-generic:
-rm -f core/sys/linux/$(am__dirstamp) -rm -f core/sys/linux/$(am__dirstamp)
-rm -f core/sys/linux/netinet/$(am__dirstamp) -rm -f core/sys/linux/netinet/$(am__dirstamp)
-rm -f core/sys/linux/sys/$(am__dirstamp) -rm -f core/sys/linux/sys/$(am__dirstamp)
-rm -f core/sys/linux/sys/netinet/$(am__dirstamp)
-rm -f core/sys/netbsd/$(am__dirstamp) -rm -f core/sys/netbsd/$(am__dirstamp)
-rm -f core/sys/netbsd/sys/$(am__dirstamp) -rm -f core/sys/netbsd/sys/$(am__dirstamp)
-rm -f core/sys/openbsd/$(am__dirstamp) -rm -f core/sys/openbsd/$(am__dirstamp)
......
...@@ -167,9 +167,11 @@ unittest ...@@ -167,9 +167,11 @@ unittest
/************************************* /*************************************
* Round argument to a specific precision. * Round argument to a specific precision.
* *
* D language types specify a minimum precision, not a maximum. The * D language types specify only a minimum precision, not a maximum. The
* `toPrec()` function forces rounding of the argument `f` to the * `toPrec()` function forces rounding of the argument `f` to the precision
* precision of the specified floating point type `T`. * of the specified floating point type `T`.
* The rounding mode used is inevitably target-dependent, but will be done in
* a way to maximize accuracy. In most cases, the default is round-to-nearest.
* *
* Params: * Params:
* T = precision type to round to * T = precision type to round to
...@@ -206,9 +208,10 @@ T toPrec(T:real)(real f) { pragma(inline, false); return f; } ...@@ -206,9 +208,10 @@ T toPrec(T:real)(real f) { pragma(inline, false); return f; }
@safe unittest @safe unittest
{ {
static float f = 1.1f; // Test all instantiations work with all combinations of float.
static double d = 1.1; float f = 1.1f;
static real r = 1.1L; double d = 1.1;
real r = 1.1L;
f = toPrec!float(f + f); f = toPrec!float(f + f);
f = toPrec!float(d + d); f = toPrec!float(d + d);
f = toPrec!float(r + r); f = toPrec!float(r + r);
...@@ -219,19 +222,32 @@ T toPrec(T:real)(real f) { pragma(inline, false); return f; } ...@@ -219,19 +222,32 @@ T toPrec(T:real)(real f) { pragma(inline, false); return f; }
r = toPrec!real(d + d); r = toPrec!real(d + d);
r = toPrec!real(r + r); r = toPrec!real(r + r);
/+ Uncomment these once compiler support has been added. // Comparison tests.
bool approxEqual(T)(T lhs, T rhs)
{
return fabs((lhs - rhs) / rhs) <= 1e-2 || fabs(lhs - rhs) <= 1e-5;
}
enum real PIR = 0xc.90fdaa22168c235p-2; enum real PIR = 0xc.90fdaa22168c235p-2;
enum double PID = 0x1.921fb54442d18p+1; enum double PID = 0x1.921fb54442d18p+1;
enum float PIF = 0x1.921fb6p+1; enum float PIF = 0x1.921fb6p+1;
static assert(approxEqual(toPrec!float(PIR), PIF));
assert(toPrec!float(PIR) == PIF); static assert(approxEqual(toPrec!double(PIR), PID));
assert(toPrec!double(PIR) == PID); static assert(approxEqual(toPrec!real(PIR), PIR));
assert(toPrec!real(PIR) == PIR); static assert(approxEqual(toPrec!float(PID), PIF));
assert(toPrec!float(PID) == PIF); static assert(approxEqual(toPrec!double(PID), PID));
assert(toPrec!double(PID) == PID); static assert(approxEqual(toPrec!real(PID), PID));
assert(toPrec!real(PID) == PID); static assert(approxEqual(toPrec!float(PIF), PIF));
assert(toPrec!float(PIF) == PIF); static assert(approxEqual(toPrec!double(PIF), PIF));
assert(toPrec!double(PIF) == PIF); static assert(approxEqual(toPrec!real(PIF), PIF));
assert(toPrec!real(PIF) == PIF);
+/ assert(approxEqual(toPrec!float(PIR), PIF));
assert(approxEqual(toPrec!double(PIR), PID));
assert(approxEqual(toPrec!real(PIR), PIR));
assert(approxEqual(toPrec!float(PID), PIF));
assert(approxEqual(toPrec!double(PID), PID));
assert(approxEqual(toPrec!real(PID), PID));
assert(approxEqual(toPrec!float(PIF), PIF));
assert(approxEqual(toPrec!double(PIF), PIF));
assert(approxEqual(toPrec!real(PIF), PIF));
} }
...@@ -17,6 +17,15 @@ ...@@ -17,6 +17,15 @@
module core.stdc.assert_; module core.stdc.assert_;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
extern (C): extern (C):
@trusted: @trusted:
nothrow: nothrow:
...@@ -39,10 +48,10 @@ else version (CRuntime_Microsoft) ...@@ -39,10 +48,10 @@ else version (CRuntime_Microsoft)
/// ///
void _assert(const(char)* exp, const(char)* file, uint line); void _assert(const(char)* exp, const(char)* file, uint line);
} }
else version (OSX) else version (Darwin)
{ {
/*** /***
* Assert failure function in the OSX C library. * Assert failure function in the Darwin C library.
*/ */
void __assert_rtn(const(char)* func, const(char)* file, uint line, const(char)* exp); void __assert_rtn(const(char)* func, const(char)* file, uint line, const(char)* exp);
} }
......
...@@ -211,6 +211,50 @@ version (Windows) ...@@ -211,6 +211,50 @@ version (Windows)
enum ENOTEMPTY = 41; /// Directory not empty enum ENOTEMPTY = 41; /// Directory not empty
enum EILSEQ = 42; /// Illegal byte sequence enum EILSEQ = 42; /// Illegal byte sequence
enum EDEADLOCK = EDEADLK; /// Resource deadlock would occur enum EDEADLOCK = EDEADLK; /// Resource deadlock would occur
// POSIX compatibility
// See_Also: https://docs.microsoft.com/en-us/cpp/c-runtime-library/errno-constants
enum EADDRINUSE = 100;
enum EADDRNOTAVAIL = 101;
enum EAFNOSUPPORT = 102;
enum EALREADY = 103;
enum EBADMSG = 104;
enum ECANCELED = 105;
enum ECONNABORTED = 106;
enum ECONNREFUSED = 107;
enum ECONNRESET = 108;
enum EDESTADDRREQ = 109;
enum EHOSTUNREACH = 110;
enum EIDRM = 111;
enum EINPROGRESS = 112;
enum EISCONN = 113;
enum ELOOP = 114;
enum EMSGSIZE = 115;
enum ENETDOWN = 116;
enum ENETRESET = 117;
enum ENETUNREACH = 118;
enum ENOBUFS = 119;
enum ENODATA = 120;
enum ENOLINK = 121;
enum ENOMSG = 122;
enum ENOPROTOOPT = 123;
enum ENOSR = 124;
enum ENOSTR = 125;
enum ENOTCONN = 126;
enum ENOTRECOVERABLE = 127;
enum ENOTSOCK = 128;
enum ENOTSUP = 129;
enum EOPNOTSUPP = 130;
enum EOTHER = 131;
enum EOVERFLOW = 132;
enum EOWNERDEAD = 133;
enum EPROTO = 134;
enum EPROTONOSUPPORT = 135;
enum EPROTOTYPE = 136;
enum ETIME = 137;
enum ETIMEDOUT = 138;
enum ETXTBSY = 139;
enum EWOULDBLOCK = 140;
} }
else version (linux) else version (linux)
{ {
......
...@@ -19,6 +19,14 @@ private import core.stdc.stddef; // for wchar_t ...@@ -19,6 +19,14 @@ private import core.stdc.stddef; // for wchar_t
private import core.stdc.signal; // for sig_atomic_t private import core.stdc.signal; // for sig_atomic_t
private import core.stdc.wchar_; // for wint_t private import core.stdc.wchar_; // for wint_t
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
// Can't be `private` because of @@@BUG11173@@@. // Can't be `private` because of @@@BUG11173@@@.
T _typify(T)(T val) @safe pure nothrow { return val; } T _typify(T)(T val) @safe pure nothrow { return val; }
...@@ -77,7 +85,7 @@ version (Windows) ...@@ -77,7 +85,7 @@ version (Windows)
alias intmax_t = long; /// alias intmax_t = long; ///
alias uintmax_t = ulong; /// alias uintmax_t = ulong; ///
} }
else version (OSX) else version (Darwin)
{ {
alias int8_t = byte; /// alias int8_t = byte; ///
alias int16_t = short; /// alias int16_t = short; ///
...@@ -140,6 +148,15 @@ else version (Posix) ...@@ -140,6 +148,15 @@ else version (Posix)
alias int_fast32_t = int; /// alias int_fast32_t = int; ///
alias uint_fast32_t = uint; /// alias uint_fast32_t = uint; ///
} }
else version (CRuntime_Musl)
{
alias int_fast8_t = byte; ///
alias uint_fast8_t = ubyte; ///
alias int_fast16_t = int; ///
alias uint_fast16_t = uint; ///
alias int_fast32_t = int; ///
alias uint_fast32_t = uint; ///
}
else else
{ {
alias int_fast8_t = byte; /// alias int_fast8_t = byte; ///
......
...@@ -23,6 +23,12 @@ else version (TVOS) ...@@ -23,6 +23,12 @@ else version (TVOS)
else version (WatchOS) else version (WatchOS)
version = Darwin; version = Darwin;
// Those libs don't expose the mandated C interface
version (CRuntime_Glibc)
version = ReturnStrerrorR;
else version (CRuntime_UClibc)
version = ReturnStrerrorR;
extern (C): extern (C):
@system: @system:
nothrow: nothrow:
...@@ -76,50 +82,17 @@ pure inout(char)* strstr(return inout(char)* s1, scope const char* s2); ...@@ -76,50 +82,17 @@ pure inout(char)* strstr(return inout(char)* s1, scope const char* s2);
char* strtok(return char* s1, scope const char* s2); char* strtok(return char* s1, scope const char* s2);
/// ///
char* strerror(int errnum); char* strerror(int errnum);
version (CRuntime_Glibc) // This `strerror_r` definition is not following the POSIX standard
version (ReturnStrerrorR)
{ {
/// ///
const(char)* strerror_r(int errnum, return char* buf, size_t buflen); const(char)* strerror_r(int errnum, return char* buf, size_t buflen);
} }
else version (Darwin) // This one is
{ else
int strerror_r(int errnum, scope char* buf, size_t buflen);
}
else version (FreeBSD)
{
int strerror_r(int errnum, scope char* buf, size_t buflen);
}
else version (NetBSD)
{
int strerror_r(int errnum, char* buf, size_t buflen);
}
else version (OpenBSD)
{
int strerror_r(int errnum, scope char* buf, size_t buflen);
}
else version (DragonFlyBSD)
{ {
int strerror_r(int errnum, scope char* buf, size_t buflen); int strerror_r(int errnum, scope char* buf, size_t buflen);
} }
else version (Solaris)
{
int strerror_r(int errnum, scope char* buf, size_t buflen);
}
else version (CRuntime_Bionic)
{
///
int strerror_r(int errnum, scope char* buf, size_t buflen);
}
else version (CRuntime_Musl)
{
///
int strerror_r(int errnum, scope char *buf, size_t buflen);
}
else version (CRuntime_UClibc)
{
///
const(char)* strerror_r(int errnum, return char* buf, size_t buflen);
}
/// ///
pure size_t strlen(scope const char* s); pure size_t strlen(scope const char* s);
/// ///
......
...@@ -25,12 +25,5 @@ else version (WatchOS) ...@@ -25,12 +25,5 @@ else version (WatchOS)
version (Darwin): version (Darwin):
extern (C): extern (C):
version (X86) alias natural_t = uint;
version = i386; alias mach_port_t = natural_t;
version (X86_64)
version = i386;
version (i386)
{
alias uint natural_t;
alias natural_t mach_port_t;
}
...@@ -34,6 +34,11 @@ version (X86) ...@@ -34,6 +34,11 @@ version (X86)
version = i386; version = i386;
version (X86_64) version (X86_64)
version = i386; version = i386;
version (AArch64)
version = AnyARM;
version (ARM)
version = AnyARM;
version (i386) version (i386)
{ {
alias mach_port_t thread_act_t; alias mach_port_t thread_act_t;
...@@ -135,3 +140,98 @@ version (i386) ...@@ -135,3 +140,98 @@ version (i386)
kern_return_t thread_resume(thread_act_t); kern_return_t thread_resume(thread_act_t);
kern_return_t thread_get_state(thread_act_t, thread_state_flavor_t, thread_state_t*, mach_msg_type_number_t*); kern_return_t thread_get_state(thread_act_t, thread_state_flavor_t, thread_state_t*, mach_msg_type_number_t*);
} }
// https://github.com/apple/darwin-xnu/blob/master/osfmk/mach/arm/_structs.h
// https://github.com/apple/darwin-xnu/blob/master/osfmk/mach/arm/thread_status.h
else version (AnyARM)
{
alias thread_act_t = mach_port_t;
alias thread_state_t = void;
alias thread_state_flavor_t = int;
alias mach_msg_type_number_t = natural_t;
enum
{
ARM_THREAD_STATE = 1,
ARM_UNIFIED_THREAD_STATE = ARM_THREAD_STATE,
ARM_VFP_STATE = 2,
ARM_EXCEPTION_STATE = 3,
ARM_DEBUG_STATE = 4, /* pre-armv8 */
THREAD_STATE_NONE = 5,
ARM_THREAD_STATE64 = 6,
ARM_EXCEPTION_STATE64 = 7,
// ARM_THREAD_STATE_LAST = 8, /* legacy */
ARM_THREAD_STATE32 = 9
}
enum
{
ARM_DEBUG_STATE32 = 14,
ARM_DEBUG_STATE64 = 15,
ARM_NEON_STATE = 16,
ARM_NEON_STATE64 = 17,
ARM_CPMU_STATE64 = 18
}
enum
{
ARM_AMX_STATE = 24,
ARM_AMX_STATE_V1 = 25
}
struct arm_thread_state_t
{
uint[13] r; /// General purpose register r0-r12
uint sp; /// Stack pointer r13
uint lr; /// Link register r14
uint pc; /// Program counter r15
uint cpsr; /// Current program status register
}
alias arm_thread_state32_t = arm_thread_state_t;
struct arm_thread_state64_t
{
ulong[29] x; /// General purpose registers x0-x28
ulong fp; /// Frame pointer x29
ulong lr; /// Link register x30
ulong sp; /// Stack pointer x31
ulong pc; /// Program counter
ulong cpsr; /// Current program status register
ulong pad; /// Same size for 32-bit or 64-bit clients
}
struct arm_state_hdr_t
{
uint flavor;
uint count;
}
struct arm_unified_thread_state_t
{
arm_state_hdr_t ash;
union _uts
{
arm_thread_state32_t ts_32;
arm_thread_state64_t ts_64;
}
_uts uts;
}
enum : mach_msg_type_number_t
{
ARM_THREAD_STATE_COUNT = cast(mach_msg_type_number_t) (arm_thread_state_t.sizeof / uint.sizeof),
ARM_THREAD_STATE32_COUNT = cast(mach_msg_type_number_t) (arm_thread_state32_t.sizeof / uint.sizeof),
ARM_THREAD_STATE64_COUNT = cast(mach_msg_type_number_t) (arm_thread_state64_t.sizeof / uint.sizeof),
ARM_UNIFIED_THREAD_STATE_COUNT = cast(mach_msg_type_number_t) (arm_unified_thread_state_t.sizeof / uint.sizeof)
}
alias MACHINE_THREAD_STATE = ARM_THREAD_STATE;
alias MACHINE_THREAD_STATE_COUNT = ARM_UNIFIED_THREAD_STATE_COUNT;
mach_port_t mach_thread_self();
kern_return_t thread_suspend(thread_act_t);
kern_return_t thread_resume(thread_act_t);
kern_return_t thread_get_state(thread_act_t, thread_state_flavor_t, thread_state_t*, mach_msg_type_number_t*);
}
...@@ -86,16 +86,13 @@ static if (__BSD_VISIBLE) ...@@ -86,16 +86,13 @@ static if (__BSD_VISIBLE)
}; };
} }
private template __externC(RT, P...)
{
alias __externC = extern(C) RT function(P) nothrow @nogc;
}
/* XSI functions first. */ /* XSI functions first. */
static assert(is(typeof(&dlclose) == __externC!(int, void*))); extern(C) {
static assert(is(typeof(&dlerror) == __externC!(char*))); static assert(is(typeof(&dlclose) == int function(void*)));
static assert(is(typeof(&dlopen) == __externC!(void*, const char*, int))); static assert(is(typeof(&dlerror) == char* function()));
static assert(is(typeof(&dlsym) == __externC!(void*, void*, const char*))); static assert(is(typeof(&dlopen) == void* function(in char*, int)));
static assert(is(typeof(&dlsym) == void* function(void*, in char*)));
}
static if (__BSD_VISIBLE) static if (__BSD_VISIBLE)
{ {
......
...@@ -38,6 +38,8 @@ else ...@@ -38,6 +38,8 @@ else
asm nothrow @trusted { mov p[EBP], EBP; } asm nothrow @trusted { mov p[EBP], EBP; }
else version (D_InlineAsm_X86_64) else version (D_InlineAsm_X86_64)
asm nothrow @trusted { mov p[RBP], RBP; } asm nothrow @trusted { mov p[RBP], RBP; }
else version (AArch64)
asm nothrow @trusted { "str x29, %0" : "=m" (p); }
else else
static assert(false, "Architecture not supported."); static assert(false, "Architecture not supported.");
......
...@@ -27,6 +27,3 @@ deprecated("use _DEFAULT_SOURCE") ...@@ -27,6 +27,3 @@ deprecated("use _DEFAULT_SOURCE")
enum __USE_MISC = _DEFAULT_SOURCE; enum __USE_MISC = _DEFAULT_SOURCE;
enum __USE_ATFILE = _ATFILE_SOURCE; enum __USE_ATFILE = _ATFILE_SOURCE;
enum __USE_GNU = _GNU_SOURCE; enum __USE_GNU = _GNU_SOURCE;
// Available in bionic from API 21
version (CRuntime_Bionic) enum __WORDSIZE = 32;
...@@ -31,7 +31,15 @@ import core.sys.linux.dlfcn : Lmid_t; ...@@ -31,7 +31,15 @@ import core.sys.linux.dlfcn : Lmid_t;
import core.sys.linux.elf; import core.sys.linux.elf;
// <bits/elfclass.h> // <bits/elfclass.h>
version (X86_Any) version (Android)
{
alias __WORDSIZE __ELF_NATIVE_CLASS;
version (D_LP64)
alias uint64_t Elf_Symndx;
else
alias uint32_t Elf_Symndx;
}
else version (X86_Any)
{ {
// http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h // http://sourceware.org/git/?p=glibc.git;a=blob;f=bits/elfclass.h
alias __WORDSIZE __ELF_NATIVE_CLASS; alias __WORDSIZE __ELF_NATIVE_CLASS;
......
/**
* D header file for GNU/Linux
*
* Authors: Martin Nowak
*/
deprecated("Import core.sys.linux.netinet.tcp instead")
module core.sys.linux.sys.netinet.tcp;
public import core.sys.linux.netinet.tcp;
...@@ -156,3 +156,21 @@ enum ...@@ -156,3 +156,21 @@ enum
SO_PEERGROUPS = 59, SO_PEERGROUPS = 59,
SO_ZEROCOPY = 60, SO_ZEROCOPY = 60,
} }
enum : uint
{
MSG_TRYHARD = 0x04,
MSG_PROXY = 0x10,
MSG_DONTWAIT = 0x40,
MSG_FIN = 0x200,
MSG_SYN = 0x400,
MSG_CONFIRM = 0x800,
MSG_RST = 0x1000,
MSG_ERRQUEUE = 0x2000,
MSG_MORE = 0x8000,
MSG_WAITFORONE = 0x10000,
MSG_BATCH = 0x40000,
MSG_ZEROCOPY = 0x4000000,
MSG_FASTOPEN = 0x20000000,
MSG_CMSG_CLOEXEC = 0x40000000
}
...@@ -20,5 +20,6 @@ int timerfd_settime(int fd, int flags, const itimerspec* new_value, itimerspec* ...@@ -20,5 +20,6 @@ int timerfd_settime(int fd, int flags, const itimerspec* new_value, itimerspec*
int timerfd_gettime(int fd, itimerspec* curr_value); int timerfd_gettime(int fd, itimerspec* curr_value);
enum TFD_TIMER_ABSTIME = 1 << 0; enum TFD_TIMER_ABSTIME = 1 << 0;
enum TFD_TIMER_CANCEL_ON_SET = 1 << 1;
enum TFD_CLOEXEC = 0x80000; enum TFD_CLOEXEC = 0x80000;
enum TFD_NONBLOCK = 0x800; enum TFD_NONBLOCK = 0x800;
...@@ -61,9 +61,9 @@ version (CRuntime_Glibc) ...@@ -61,9 +61,9 @@ version (CRuntime_Glibc)
enum __USE_REENTRANT = _REENTRANT; enum __USE_REENTRANT = _REENTRANT;
version (D_LP64) version (D_LP64)
enum __WORDSIZE=64; enum __WORDSIZE = 64;
else else
enum __WORDSIZE=32; enum __WORDSIZE = 32;
} }
else version (CRuntime_Musl) else version (CRuntime_Musl)
{ {
...@@ -109,13 +109,19 @@ else version (CRuntime_UClibc) ...@@ -109,13 +109,19 @@ else version (CRuntime_UClibc)
enum __USE_REENTRANT = _REENTRANT; enum __USE_REENTRANT = _REENTRANT;
version (D_LP64) version (D_LP64)
enum __WORDSIZE=64; enum __WORDSIZE = 64;
else else
enum __WORDSIZE=32; enum __WORDSIZE = 32;
} }
else version (CRuntime_Bionic) else version (CRuntime_Bionic)
{ {
enum __USE_GNU = false; enum _GNU_SOURCE = false;
enum __USE_GNU = _GNU_SOURCE;
version (D_LP64)
enum __WORDSIZE = 64;
else
enum __WORDSIZE = 32;
} }
else version (OpenBSD) else version (OpenBSD)
{ {
......
...@@ -126,20 +126,6 @@ version (CRuntime_Glibc) ...@@ -126,20 +126,6 @@ version (CRuntime_Glibc)
char* dlerror(); char* dlerror();
void* dlopen(in char*, int); void* dlopen(in char*, int);
void* dlsym(void*, in char*); void* dlsym(void*, in char*);
deprecated("Please use core.sys.linux.dlfcn for non-POSIX extensions")
{
int dladdr(in void* addr, Dl_info* info);
void* dlvsym(void* handle, in char* symbol, in char* version_);
struct Dl_info
{
const(char)* dli_fname;
void* dli_fbase;
const(char)* dli_sname;
void* dli_saddr;
}
}
} }
else version (Darwin) else version (Darwin)
{ {
......
...@@ -27,7 +27,7 @@ extern (C) nothrow @nogc: ...@@ -27,7 +27,7 @@ extern (C) nothrow @nogc:
intmax_t imaxabs(intmax_t); intmax_t imaxabs(intmax_t);
imaxdiv_t imaxdiv(intmax_t, intmax_t); imaxdiv_t imaxdiv(intmax_t, intmax_t);
intmax_t strtoimax(in char*, char**, int); intmax_t strtoimax(in char*, char**, int);
uintmax_t strtoumax(in char *, char**, int); uintmax_t strtoumax(in char*, char**, int);
intmax_t wcstoimax(in wchar_t*, wchar_t**, int); intmax_t wcstoimax(in wchar_t*, wchar_t**, int);
uintmax_t wcstoumax(in wchar_t*, wchar_t**, int); uintmax_t wcstoumax(in wchar_t*, wchar_t**, int);
*/ */
...@@ -35,6 +35,6 @@ uintmax_t wcstoumax(in wchar_t*, wchar_t**, int); ...@@ -35,6 +35,6 @@ uintmax_t wcstoumax(in wchar_t*, wchar_t**, int);
intmax_t imaxabs(intmax_t); intmax_t imaxabs(intmax_t);
imaxdiv_t imaxdiv(intmax_t, intmax_t); imaxdiv_t imaxdiv(intmax_t, intmax_t);
intmax_t strtoimax(in char*, char**, int); intmax_t strtoimax(in char*, char**, int);
uintmax_t strtoumax(in char *, char**, int); uintmax_t strtoumax(in char*, char**, int);
intmax_t wcstoimax(in wchar_t*, wchar_t**, int); intmax_t wcstoimax(in wchar_t*, wchar_t**, int);
uintmax_t wcstoumax(in wchar_t*, wchar_t**, int); uintmax_t wcstoumax(in wchar_t*, wchar_t**, int);
...@@ -743,9 +743,7 @@ else version (Solaris) ...@@ -743,9 +743,7 @@ else version (Solaris)
int ai_socktype; int ai_socktype;
int ai_protocol; int ai_protocol;
version (SPARC) version (SPARC64)
int _ai_pad;
else version (SPARC64)
int _ai_pad; int _ai_pad;
socklen_t ai_addrlen; socklen_t ai_addrlen;
......
...@@ -1142,10 +1142,10 @@ else version (FreeBSD) ...@@ -1142,10 +1142,10 @@ else version (FreeBSD)
int sigdelset(sigset_t*, int); int sigdelset(sigset_t*, int);
int sigemptyset(sigset_t *); int sigemptyset(sigset_t *);
int sigfillset(sigset_t *); int sigfillset(sigset_t *);
int sigismember(in sigset_t *, int); int sigismember(in sigset_t*, int);
int sigpending(sigset_t *); int sigpending(sigset_t *);
int sigprocmask(int, in sigset_t*, sigset_t*); int sigprocmask(int, in sigset_t*, sigset_t*);
int sigsuspend(in sigset_t *); int sigsuspend(in sigset_t*);
int sigwait(in sigset_t*, int*); int sigwait(in sigset_t*, int*);
} }
else version (NetBSD) else version (NetBSD)
...@@ -1228,10 +1228,10 @@ else version (NetBSD) ...@@ -1228,10 +1228,10 @@ else version (NetBSD)
int __sigdelset14(sigset_t*, int); int __sigdelset14(sigset_t*, int);
int __sigemptyset14(sigset_t *); int __sigemptyset14(sigset_t *);
int __sigfillset14(sigset_t *); int __sigfillset14(sigset_t *);
int __sigismember14(in sigset_t *, int); int __sigismember14(in sigset_t*, int);
int __sigpending14(sigset_t *); int __sigpending14(sigset_t *);
int __sigprocmask14(int, in sigset_t*, sigset_t*); int __sigprocmask14(int, in sigset_t*, sigset_t*);
int __sigsuspend14(in sigset_t *); int __sigsuspend14(in sigset_t*);
int sigwait(in sigset_t*, int*); int sigwait(in sigset_t*, int*);
alias __sigaction14 sigaction; alias __sigaction14 sigaction;
...@@ -1314,10 +1314,10 @@ else version (OpenBSD) ...@@ -1314,10 +1314,10 @@ else version (OpenBSD)
int sigdelset(sigset_t*, int); int sigdelset(sigset_t*, int);
int sigemptyset(sigset_t *); int sigemptyset(sigset_t *);
int sigfillset(sigset_t *); int sigfillset(sigset_t *);
int sigismember(in sigset_t *, int); int sigismember(in sigset_t*, int);
int sigpending(sigset_t *); int sigpending(sigset_t *);
int sigprocmask(int, in sigset_t*, sigset_t*); int sigprocmask(int, in sigset_t*, sigset_t*);
int sigsuspend(in sigset_t *); int sigsuspend(in sigset_t*);
int sigwait(in sigset_t*, int*); int sigwait(in sigset_t*, int*);
} }
else version (DragonFlyBSD) else version (DragonFlyBSD)
...@@ -1363,10 +1363,10 @@ else version (DragonFlyBSD) ...@@ -1363,10 +1363,10 @@ else version (DragonFlyBSD)
int sigdelset(sigset_t*, int); int sigdelset(sigset_t*, int);
int sigemptyset(sigset_t *); int sigemptyset(sigset_t *);
int sigfillset(sigset_t *); int sigfillset(sigset_t *);
int sigismember(in sigset_t *, int); int sigismember(in sigset_t*, int);
int sigpending(sigset_t *); int sigpending(sigset_t *);
int sigprocmask(int, in sigset_t*, sigset_t*); int sigprocmask(int, in sigset_t*, sigset_t*);
int sigsuspend(in sigset_t *); int sigsuspend(in sigset_t*);
int sigwait(in sigset_t*, int*); int sigwait(in sigset_t*, int*);
} }
else version (Solaris) else version (Solaris)
...@@ -3258,7 +3258,7 @@ else version (CRuntime_Musl) ...@@ -3258,7 +3258,7 @@ else version (CRuntime_Musl)
sigfn_t2 sigset(int sig, sigfn_t2 func); sigfn_t2 sigset(int sig, sigfn_t2 func);
int killpg(pid_t, int); int killpg(pid_t, int);
int sigaltstack(const scope stack_t*, stack_t*); int sigaltstack(in stack_t*, stack_t*);
int sighold(int); int sighold(int);
int sigignore(int); int sigignore(int);
int siginterrupt(int, int); int siginterrupt(int, int);
......
...@@ -180,6 +180,37 @@ else version (CRuntime_UClibc) ...@@ -180,6 +180,37 @@ else version (CRuntime_UClibc)
FILE* tmpfile(); FILE* tmpfile();
} }
} }
else version (CRuntime_Musl)
{
static if ( __USE_FILE_OFFSET64 )
{
int fgetpos64(FILE*, fpos_t *);
alias fgetpos64 fgetpos;
FILE* fopen64(in char*, in char*);
alias fopen64 fopen;
FILE* freopen64(in char*, in char*, FILE*);
alias freopen64 freopen;
int fseek(FILE*, c_long, int);
int fsetpos64(FILE*, in fpos_t*);
alias fsetpos64 fsetpos;
FILE* tmpfile64();
alias tmpfile64 tmpfile;
}
else
{
int fgetpos(FILE*, fpos_t *);
FILE* fopen(in char*, in char*);
FILE* freopen(in char*, in char*, FILE*);
int fseek(FILE*, c_long, int);
int fsetpos(FILE*, in fpos_t*);
FILE* tmpfile();
}
}
else version (Solaris) else version (Solaris)
{ {
static if (__USE_FILE_OFFSET64 && __WORDSIZE != 64) static if (__USE_FILE_OFFSET64 && __WORDSIZE != 64)
...@@ -277,6 +308,30 @@ else version (CRuntime_UClibc) ...@@ -277,6 +308,30 @@ else version (CRuntime_UClibc)
off_t ftello(FILE*); off_t ftello(FILE*);
} }
} }
else version (CRuntime_Musl)
{
enum L_ctermid = 20;
static if ( __USE_FILE_OFFSET64 )
{
int fseeko64(FILE*, off_t, int);
alias fseeko64 fseeko;
}
else
{
int fseeko(FILE*, off_t, int);
}
static if ( __USE_FILE_OFFSET64 )
{
off_t ftello64(FILE*);
alias ftello64 ftello;
}
else
{
off_t ftello(FILE*);
}
}
else version (Solaris) else version (Solaris)
{ {
enum L_ctermid = 9; enum L_ctermid = 9;
...@@ -331,6 +386,9 @@ else version (OpenBSD) // as of OpenBSD 5.4 ...@@ -331,6 +386,9 @@ else version (OpenBSD) // as of OpenBSD 5.4
version = HaveMemstream; version = HaveMemstream;
else version (CRuntime_UClibc) else version (CRuntime_UClibc)
version = HaveMemstream; version = HaveMemstream;
// http://git.musl-libc.org/cgit/musl/commit/src/stdio/open_memstream.c?id=b158b32a44d56ef20407d4285b58180447ffff1f
else version (CRuntime_Musl)
version = HaveMemstream;
version (HaveMemstream) version (HaveMemstream)
{ {
......
...@@ -574,9 +574,45 @@ else version (CRuntime_Bionic) ...@@ -574,9 +574,45 @@ else version (CRuntime_Bionic)
} }
else version (CRuntime_Musl) else version (CRuntime_Musl)
{ {
char* realpath(in char*, char*); c_long a64l(in char*);
double drand48();
char* ecvt(double, int, int *, int *); // LEGACY
double erand48(ref ushort[3]);
char* fcvt(double, int, int *, int *); // LEGACY
char* gcvt(double, int, char*); // LEGACY
int getsubopt(char**, in char**, char**);
int grantpt(int);
char* initstate(uint, char*, size_t);
c_long jrand48(ref ushort[3]);
char* l64a(c_long);
void lcong48(ref ushort[7]);
c_long lrand48();
char* mktemp(char*); // LEGACY
char* mkdtemp(char*); // Defined in IEEE 1003.1, 2008 Edition
int mkstemp(char*);
c_long mrand48();
c_long nrand48(ref ushort[3]);
int posix_openpt(int);
char* ptsname(int);
int putenv(char*); int putenv(char*);
c_long random();
char* realpath(in char*, char*);
ushort *seed48(ref ushort[3]);
void setkey(in char*);
char* setstate(in char*);
void srand48(c_long);
void srandom(uint);
int unlockpt(int);
static if ( __USE_LARGEFILE64 )
{
int mkstemp64(char*);
alias mkstemp64 mkstemp;
}
else
{
int mkstemp(char*); int mkstemp(char*);
}
} }
else version (Solaris) else version (Solaris)
......
...@@ -8,11 +8,20 @@ module core.sys.posix.sys.filio; ...@@ -8,11 +8,20 @@ module core.sys.posix.sys.filio;
import core.sys.posix.sys.ioccom; import core.sys.posix.sys.ioccom;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
version (Posix): version (Posix):
nothrow @nogc: nothrow @nogc:
version (OSX) version (Darwin)
{ {
// File-descriptor ioctl's // File-descriptor ioctl's
enum uint FIOCLEX = _IO('f', 1); // set close on exec on fd enum uint FIOCLEX = _IO('f', 1); // set close on exec on fd
......
...@@ -6,11 +6,20 @@ ...@@ -6,11 +6,20 @@
module core.sys.posix.sys.ioccom; module core.sys.posix.sys.ioccom;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
version (Posix): version (Posix):
nothrow @nogc: nothrow @nogc:
version (OSX) version (Darwin)
{ {
/* OSX ioctl's (based on FreeBSD) encode the command in the lower 16-bits /* OSX ioctl's (based on FreeBSD) encode the command in the lower 16-bits
* and the size of any in/out parameters in the lower 13 bits of the upper * and the size of any in/out parameters in the lower 13 bits of the upper
......
...@@ -525,6 +525,7 @@ else version (CRuntime_Bionic) ...@@ -525,6 +525,7 @@ else version (CRuntime_Bionic)
else version (CRuntime_Musl) else version (CRuntime_Musl)
{ {
alias ulong rlim_t; alias ulong rlim_t;
enum RLIM_INFINITY = cast(c_ulong)(~0UL);
int getrlimit(int, rlimit*); int getrlimit(int, rlimit*);
int setrlimit(int, in rlimit*); int setrlimit(int, in rlimit*);
......
...@@ -15,7 +15,6 @@ public import core.sys.posix.sys.types; // for time_t ...@@ -15,7 +15,6 @@ public import core.sys.posix.sys.types; // for time_t
public import core.sys.posix.signal; // for sigset_t public import core.sys.posix.signal; // for sigset_t
//debug=select; // uncomment to turn on debugging printf's //debug=select; // uncomment to turn on debugging printf's
version (unittest) import core.stdc.stdio: printf;
version (OSX) version (OSX)
version = Darwin; version = Darwin;
...@@ -560,6 +559,8 @@ else ...@@ -560,6 +559,8 @@ else
pure unittest pure unittest
{ {
import core.stdc.stdio: printf;
debug(select) printf("core.sys.posix.sys.select unittest\n"); debug(select) printf("core.sys.posix.sys.select unittest\n");
fd_set fd; fd_set fd;
......
...@@ -571,8 +571,8 @@ version (CRuntime_Glibc) ...@@ -571,8 +571,8 @@ version (CRuntime_Glibc)
} }
int accept(int, scope sockaddr*, scope socklen_t*); int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t); int bind(int, in sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t); int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*); int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*); int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*); int getsockopt(int, int, int, scope void*, scope socklen_t*);
...@@ -580,10 +580,10 @@ version (CRuntime_Glibc) ...@@ -580,10 +580,10 @@ version (CRuntime_Glibc)
ssize_t recv(int, scope void*, size_t, int); ssize_t recv(int, scope void*, size_t, int);
ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*); ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*);
ssize_t recvmsg(int, scope msghdr*, int); ssize_t recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int); ssize_t send(int, in void*, size_t, int);
ssize_t sendmsg(int, const scope msghdr*, int); ssize_t sendmsg(int, in msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t); ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t); int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe; int shutdown(int, int) @safe;
int socket(int, int, int) @safe; int socket(int, int, int) @safe;
int sockatmark(int) @safe; int sockatmark(int) @safe;
...@@ -727,8 +727,8 @@ else version (Darwin) ...@@ -727,8 +727,8 @@ else version (Darwin)
} }
int accept(int, scope sockaddr*, scope socklen_t*); int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t); int bind(int, in sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t); int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*); int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*); int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*); int getsockopt(int, int, int, scope void*, scope socklen_t*);
...@@ -736,10 +736,10 @@ else version (Darwin) ...@@ -736,10 +736,10 @@ else version (Darwin)
ssize_t recv(int, scope void*, size_t, int); ssize_t recv(int, scope void*, size_t, int);
ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*); ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*);
ssize_t recvmsg(int, scope msghdr*, int); ssize_t recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int); ssize_t send(int, in void*, size_t, int);
ssize_t sendmsg(int, const scope msghdr*, int); ssize_t sendmsg(int, in msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t); ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t); int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe; int shutdown(int, int) @safe;
int socket(int, int, int) @safe; int socket(int, int, int) @safe;
int sockatmark(int) @safe; int sockatmark(int) @safe;
...@@ -904,8 +904,8 @@ else version (FreeBSD) ...@@ -904,8 +904,8 @@ else version (FreeBSD)
} }
int accept(int, scope sockaddr*, scope socklen_t*); int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t); int bind(int, in sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t); int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*); int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*); int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*); int getsockopt(int, int, int, scope void*, scope socklen_t*);
...@@ -913,10 +913,10 @@ else version (FreeBSD) ...@@ -913,10 +913,10 @@ else version (FreeBSD)
ssize_t recv(int, scope void*, size_t, int); ssize_t recv(int, scope void*, size_t, int);
ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*); ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*);
ssize_t recvmsg(int, scope msghdr*, int); ssize_t recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int); ssize_t send(int, in void*, size_t, int);
ssize_t sendmsg(int, const scope msghdr*, int); ssize_t sendmsg(int, in msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t); ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t); int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe; int shutdown(int, int) @safe;
int socket(int, int, int) @safe; int socket(int, int, int) @safe;
int sockatmark(int) @safe; int sockatmark(int) @safe;
...@@ -1101,8 +1101,8 @@ else version (NetBSD) ...@@ -1101,8 +1101,8 @@ else version (NetBSD)
} }
int accept(int, scope sockaddr*, scope socklen_t*); int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t); int bind(int, in sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t); int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*); int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*); int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*); int getsockopt(int, int, int, scope void*, scope socklen_t*);
...@@ -1110,10 +1110,10 @@ else version (NetBSD) ...@@ -1110,10 +1110,10 @@ else version (NetBSD)
ssize_t recv(int, scope void*, size_t, int); ssize_t recv(int, scope void*, size_t, int);
ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*); ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*);
ssize_t recvmsg(int, scope msghdr*, int); ssize_t recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int); ssize_t send(int, in void*, size_t, int);
ssize_t sendmsg(int, const scope msghdr*, int); ssize_t sendmsg(int, in msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t); ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t); int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe; int shutdown(int, int) @safe;
int socket(int, int, int) @safe; int socket(int, int, int) @safe;
int sockatmark(int) @safe; int sockatmark(int) @safe;
...@@ -1274,8 +1274,8 @@ else version (OpenBSD) ...@@ -1274,8 +1274,8 @@ else version (OpenBSD)
} }
int accept(int, scope sockaddr*, scope socklen_t*); int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t); int bind(int, in sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t); int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*); int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*); int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*); int getsockopt(int, int, int, scope void*, scope socklen_t*);
...@@ -1283,10 +1283,10 @@ else version (OpenBSD) ...@@ -1283,10 +1283,10 @@ else version (OpenBSD)
ssize_t recv(int, scope void*, size_t, int); ssize_t recv(int, scope void*, size_t, int);
ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*); ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*);
ssize_t recvmsg(int, scope msghdr*, int); ssize_t recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int); ssize_t send(int, in void*, size_t, int);
ssize_t sendmsg(int, const scope msghdr*, int); ssize_t sendmsg(int, in msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t); ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t); int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe; int shutdown(int, int) @safe;
int socket(int, int, int) @safe; int socket(int, int, int) @safe;
int sockatmark(int) @safe; int sockatmark(int) @safe;
...@@ -1655,8 +1655,8 @@ else version (Solaris) ...@@ -1655,8 +1655,8 @@ else version (Solaris)
} }
int accept(int, scope sockaddr*, scope socklen_t*); int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t); int bind(int, in sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t); int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*); int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*); int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*); int getsockopt(int, int, int, scope void*, scope socklen_t*);
...@@ -1664,10 +1664,10 @@ else version (Solaris) ...@@ -1664,10 +1664,10 @@ else version (Solaris)
ssize_t recv(int, scope void*, size_t, int); ssize_t recv(int, scope void*, size_t, int);
ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*); ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*);
ssize_t recvmsg(int, scope msghdr*, int); ssize_t recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int); ssize_t send(int, in void*, size_t, int);
ssize_t sendmsg(int, const scope msghdr*, int); ssize_t sendmsg(int, in msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t); ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t); int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe; int shutdown(int, int) @safe;
int socket(int, int, int) @safe; int socket(int, int, int) @safe;
int sockatmark(int) @safe; int sockatmark(int) @safe;
...@@ -1816,8 +1816,8 @@ else version (CRuntime_Bionic) ...@@ -1816,8 +1816,8 @@ else version (CRuntime_Bionic)
enum SOCK_RDM = 4; enum SOCK_RDM = 4;
int accept(int, scope sockaddr*, scope socklen_t*); int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t); int bind(int, in sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t); int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*); int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*); int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*); int getsockopt(int, int, int, scope void*, scope socklen_t*);
...@@ -1825,10 +1825,10 @@ else version (CRuntime_Bionic) ...@@ -1825,10 +1825,10 @@ else version (CRuntime_Bionic)
ssize_t recv(int, scope void*, size_t, int); ssize_t recv(int, scope void*, size_t, int);
ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*); ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*);
int recvmsg(int, scope msghdr*, int); int recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int); ssize_t send(int, in void*, size_t, int);
int sendmsg(int, const scope msghdr*, int); int sendmsg(int, in msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t); ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t); int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe; int shutdown(int, int) @safe;
int socket(int, int, int) @safe; int socket(int, int, int) @safe;
int sockatmark(int) @safe; int sockatmark(int) @safe;
......
...@@ -1391,7 +1391,6 @@ else version (Solaris) ...@@ -1391,7 +1391,6 @@ else version (Solaris)
dev_t st_rdev; dev_t st_rdev;
c_long[2] st_pad2; c_long[2] st_pad2;
off_t st_size; off_t st_size;
c_long st_pad3;
union union
{ {
timestruc_t st_atim; timestruc_t st_atim;
......
...@@ -10,11 +10,20 @@ import core.sys.posix.sys.ioccom; ...@@ -10,11 +10,20 @@ import core.sys.posix.sys.ioccom;
import core.sys.posix.termios; import core.sys.posix.termios;
import core.sys.posix.sys.time; import core.sys.posix.sys.time;
version (OSX)
version = Darwin;
else version (iOS)
version = Darwin;
else version (TVOS)
version = Darwin;
else version (WatchOS)
version = Darwin;
version (Posix): version (Posix):
nothrow @nogc: nothrow @nogc:
version (OSX) version (Darwin)
{ {
struct winsize { struct winsize {
ushort ws_row; // rows, in characters ushort ws_row; // rows, in characters
......
...@@ -852,7 +852,7 @@ else version (Darwin) ...@@ -852,7 +852,7 @@ else version (Darwin)
{ {
version (D_LP64) version (D_LP64)
{ {
enum __PTHREAD_SIZE__ = 1168; enum __PTHREAD_SIZE__ = 8176;
enum __PTHREAD_ATTR_SIZE__ = 56; enum __PTHREAD_ATTR_SIZE__ = 56;
enum __PTHREAD_MUTEXATTR_SIZE__ = 8; enum __PTHREAD_MUTEXATTR_SIZE__ = 8;
enum __PTHREAD_MUTEX_SIZE__ = 56; enum __PTHREAD_MUTEX_SIZE__ = 56;
...@@ -864,7 +864,7 @@ else version (Darwin) ...@@ -864,7 +864,7 @@ else version (Darwin)
} }
else else
{ {
enum __PTHREAD_SIZE__ = 596; enum __PTHREAD_SIZE__ = 4088;
enum __PTHREAD_ATTR_SIZE__ = 36; enum __PTHREAD_ATTR_SIZE__ = 36;
enum __PTHREAD_MUTEXATTR_SIZE__ = 8; enum __PTHREAD_MUTEXATTR_SIZE__ = 8;
enum __PTHREAD_MUTEX_SIZE__ = 40; enum __PTHREAD_MUTEX_SIZE__ = 40;
......
...@@ -138,8 +138,8 @@ else version (CRuntime_Musl) ...@@ -138,8 +138,8 @@ else version (CRuntime_Musl)
{ {
struct iovec struct iovec
{ {
void* iov_base; void* iov_base;
uint iov_len; size_t iov_len;
} }
ssize_t readv(int, in iovec*, int); ssize_t readv(int, in iovec*, int);
......
...@@ -526,3 +526,63 @@ else version (CRuntime_UClibc) ...@@ -526,3 +526,63 @@ else version (CRuntime_UClibc)
void syslog (int __pri, const char *__fmt, ...); void syslog (int __pri, const char *__fmt, ...);
void closelog(); void closelog();
} }
else version (CRuntime_Musl)
{
//PRIORITY
enum {
LOG_EMERG = 0, /* system is unusable */
LOG_ALERT = 1, /* action must be taken immediately */
LOG_CRIT = 2, /* critical conditions */
LOG_ERR = 3, /* error conditions */
LOG_WARNING = 4, /* warning conditions */
LOG_NOTICE = 5, /* normal but significant condition */
LOG_INFO = 6, /* informational */
LOG_DEBUG = 7, /* debug-level messages */
};
//OPTIONS
enum {
LOG_PID = 0x01, /* log the pid with each message */
LOG_CONS = 0x02, /* log on the console if errors in sending */
LOG_ODELAY = 0x04, /* delay open until first syslog() (default) */
LOG_NDELAY = 0x08, /* don't delay open */
LOG_NOWAIT = 0x10, /* don't wait for console forks: DEPRECATED */
LOG_PERROR = 0x20, /* log to stderr as well */
};
//FACILITY
enum {
LOG_KERN = (0<<3), /* kernel messages */
LOG_USER = (1<<3), /* random user-level messages */
LOG_MAIL = (2<<3), /* mail system */
LOG_DAEMON = (3<<3), /* system daemons */
LOG_AUTH = (4<<3), /* security/authorization messages */
LOG_SYSLOG = (5<<3), /* messages generated internally by syslogd */
LOG_LPR = (6<<3), /* line printer subsystem */
LOG_NEWS = (7<<3), /* network news subsystem */
LOG_UUCP = (8<<3), /* UUCP subsystem */
LOG_CRON = (9<<3), /* clock daemon */
LOG_AUTHPRIV = (10<<3), /* security/authorization messages (private), */
LOG_FTP = (11<<3), /* ftp daemon */
/* other codes through 15 reserved for system use */
LOG_LOCAL0 = (16<<3), /* reserved for local use */
LOG_LOCAL1 = (17<<3), /* reserved for local use */
LOG_LOCAL2 = (18<<3), /* reserved for local use */
LOG_LOCAL3 = (19<<3), /* reserved for local use */
LOG_LOCAL4 = (20<<3), /* reserved for local use */
LOG_LOCAL5 = (21<<3), /* reserved for local use */
LOG_LOCAL6 = (22<<3), /* reserved for local use */
LOG_LOCAL7 = (23<<3), /* reserved for local use */
LOG_NFACILITIES = 24, /* current number of facilities */
};
int LOG_MASK(int pri) { return 1 << pri; } /* mask for one priority */
int LOG_UPTO(int pri) { return (1 << (pri+1)) - 1; } /* all priorities through pri */
void openlog (const char *, int __option, int __facility);
int setlogmask (int __mask);
void syslog (int __pri, const char *__fmt, ...);
void closelog();
}
...@@ -624,6 +624,9 @@ else version (CRuntime_Bionic) ...@@ -624,6 +624,9 @@ else version (CRuntime_Bionic)
} }
else version (CRuntime_Musl) else version (CRuntime_Musl)
{ {
extern __gshared int daylight;
extern __gshared c_long timezone;
tm* getdate(in char*); tm* getdate(in char*);
char* strptime(in char*, in char*, tm*); char* strptime(in char*, in char*, tm*);
} }
......
...@@ -1342,9 +1342,162 @@ else version (CRuntime_Bionic) ...@@ -1342,9 +1342,162 @@ else version (CRuntime_Bionic)
enum W_OK = 2; enum W_OK = 2;
enum X_OK = 1; enum X_OK = 1;
enum _SC_PAGESIZE = 0x0027; enum
enum _SC_NPROCESSORS_ONLN = 0x0061; {
enum _SC_THREAD_STACK_MIN = 0x004c; _SC_ARG_MAX = 0x0000,
_SC_BC_BASE_MAX = 0x0001,
_SC_BC_DIM_MAX = 0x0002,
_SC_BC_SCALE_MAX = 0x0003,
_SC_BC_STRING_MAX = 0x0004,
_SC_CHILD_MAX = 0x0005,
_SC_CLK_TCK = 0x0006,
_SC_COLL_WEIGHTS_MAX = 0x0007,
_SC_EXPR_NEST_MAX = 0x0008,
_SC_LINE_MAX = 0x0009,
_SC_NGROUPS_MAX = 0x000a,
_SC_OPEN_MAX = 0x000b,
_SC_PASS_MAX = 0x000c,
_SC_2_C_BIND = 0x000d,
_SC_2_C_DEV = 0x000e,
_SC_2_C_VERSION = 0x000f,
_SC_2_CHAR_TERM = 0x0010,
_SC_2_FORT_DEV = 0x0011,
_SC_2_FORT_RUN = 0x0012,
_SC_2_LOCALEDEF = 0x0013,
_SC_2_SW_DEV = 0x0014,
_SC_2_UPE = 0x0015,
_SC_2_VERSION = 0x0016,
_SC_JOB_CONTROL = 0x0017,
_SC_SAVED_IDS = 0x0018,
_SC_VERSION = 0x0019,
_SC_RE_DUP_MAX = 0x001a,
_SC_STREAM_MAX = 0x001b,
_SC_TZNAME_MAX = 0x001c,
_SC_XOPEN_CRYPT = 0x001d,
_SC_XOPEN_ENH_I18N = 0x001e,
_SC_XOPEN_SHM = 0x001f,
_SC_XOPEN_VERSION = 0x0020,
_SC_XOPEN_XCU_VERSION = 0x0021,
_SC_XOPEN_REALTIME = 0x0022,
_SC_XOPEN_REALTIME_THREADS = 0x0023,
_SC_XOPEN_LEGACY = 0x0024,
_SC_ATEXIT_MAX = 0x0025,
_SC_IOV_MAX = 0x0026,
_SC_UIO_MAXIOV = _SC_IOV_MAX,
_SC_PAGESIZE = 0x0027,
_SC_PAGE_SIZE = 0x0028,
_SC_XOPEN_UNIX = 0x0029,
_SC_XBS5_ILP32_OFF32 = 0x002a,
_SC_XBS5_ILP32_OFFBIG = 0x002b,
_SC_XBS5_LP64_OFF64 = 0x002c,
_SC_XBS5_LPBIG_OFFBIG = 0x002d,
_SC_AIO_LISTIO_MAX = 0x002e,
_SC_AIO_MAX = 0x002f,
_SC_AIO_PRIO_DELTA_MAX = 0x0030,
_SC_DELAYTIMER_MAX = 0x0031,
_SC_MQ_OPEN_MAX = 0x0032,
_SC_MQ_PRIO_MAX = 0x0033,
_SC_RTSIG_MAX = 0x0034,
_SC_SEM_NSEMS_MAX = 0x0035,
_SC_SEM_VALUE_MAX = 0x0036,
_SC_SIGQUEUE_MAX = 0x0037,
_SC_TIMER_MAX = 0x0038,
_SC_ASYNCHRONOUS_IO = 0x0039,
_SC_FSYNC = 0x003a,
_SC_MAPPED_FILES = 0x003b,
_SC_MEMLOCK = 0x003c,
_SC_MEMLOCK_RANGE = 0x003d,
_SC_MEMORY_PROTECTION = 0x003e,
_SC_MESSAGE_PASSING = 0x003f,
_SC_PRIORITIZED_IO = 0x0040,
_SC_PRIORITY_SCHEDULING = 0x0041,
_SC_REALTIME_SIGNALS = 0x0042,
_SC_SEMAPHORES = 0x0043,
_SC_SHARED_MEMORY_OBJECTS = 0x0044,
_SC_SYNCHRONIZED_IO = 0x0045,
_SC_TIMERS = 0x0046,
_SC_GETGR_R_SIZE_MAX = 0x0047,
_SC_GETPW_R_SIZE_MAX = 0x0048,
_SC_LOGIN_NAME_MAX = 0x0049,
_SC_THREAD_DESTRUCTOR_ITERATIONS = 0x004a,
_SC_THREAD_KEYS_MAX = 0x004b,
_SC_THREAD_STACK_MIN = 0x004c,
_SC_THREAD_THREADS_MAX = 0x004d,
_SC_TTY_NAME_MAX = 0x004e,
_SC_THREADS = 0x004f,
_SC_THREAD_ATTR_STACKADDR = 0x0050,
_SC_THREAD_ATTR_STACKSIZE = 0x0051,
_SC_THREAD_PRIORITY_SCHEDULING = 0x0052,
_SC_THREAD_PRIO_INHERIT = 0x0053,
_SC_THREAD_PRIO_PROTECT = 0x0054,
_SC_THREAD_SAFE_FUNCTIONS = 0x0055,
_SC_NPROCESSORS_CONF = 0x0060,
_SC_NPROCESSORS_ONLN = 0x0061,
_SC_PHYS_PAGES = 0x0062,
_SC_AVPHYS_PAGES = 0x0063,
_SC_MONOTONIC_CLOCK = 0x0064,
_SC_2_PBS = 0x0065,
_SC_2_PBS_ACCOUNTING = 0x0066,
_SC_2_PBS_CHECKPOINT = 0x0067,
_SC_2_PBS_LOCATE = 0x0068,
_SC_2_PBS_MESSAGE = 0x0069,
_SC_2_PBS_TRACK = 0x006a,
_SC_ADVISORY_INFO = 0x006b,
_SC_BARRIERS = 0x006c,
_SC_CLOCK_SELECTION = 0x006d,
_SC_CPUTIME = 0x006e,
_SC_HOST_NAME_MAX = 0x006f,
_SC_IPV6 = 0x0070,
_SC_RAW_SOCKETS = 0x0071,
_SC_READER_WRITER_LOCKS = 0x0072,
_SC_REGEXP = 0x0073,
_SC_SHELL = 0x0074,
_SC_SPAWN = 0x0075,
_SC_SPIN_LOCKS = 0x0076,
_SC_SPORADIC_SERVER = 0x0077,
_SC_SS_REPL_MAX = 0x0078,
_SC_SYMLOOP_MAX = 0x0079,
_SC_THREAD_CPUTIME = 0x007a,
_SC_THREAD_PROCESS_SHARED = 0x007b,
_SC_THREAD_ROBUST_PRIO_INHERIT = 0x007c,
_SC_THREAD_ROBUST_PRIO_PROTECT = 0x007d,
_SC_THREAD_SPORADIC_SERVER = 0x007e,
_SC_TIMEOUTS = 0x007f,
_SC_TRACE = 0x0080,
_SC_TRACE_EVENT_FILTER = 0x0081,
_SC_TRACE_EVENT_NAME_MAX = 0x0082,
_SC_TRACE_INHERIT = 0x0083,
_SC_TRACE_LOG = 0x0084,
_SC_TRACE_NAME_MAX = 0x0085,
_SC_TRACE_SYS_MAX = 0x0086,
_SC_TRACE_USER_EVENT_MAX = 0x0087,
_SC_TYPED_MEMORY_OBJECTS = 0x0088,
_SC_V7_ILP32_OFF32 = 0x0089,
_SC_V7_ILP32_OFFBIG = 0x008a,
_SC_V7_LP64_OFF64 = 0x008b,
_SC_V7_LPBIG_OFFBIG = 0x008c,
_SC_XOPEN_STREAMS = 0x008d,
_SC_XOPEN_UUCP = 0x008e,
_SC_LEVEL1_ICACHE_SIZE = 0x008f,
_SC_LEVEL1_ICACHE_ASSOC = 0x0090,
_SC_LEVEL1_ICACHE_LINESIZE = 0x0091,
_SC_LEVEL1_DCACHE_SIZE = 0x0092,
_SC_LEVEL1_DCACHE_ASSOC = 0x0093,
_SC_LEVEL1_DCACHE_LINESIZE = 0x0094,
_SC_LEVEL2_CACHE_SIZE = 0x0095,
_SC_LEVEL2_CACHE_ASSOC = 0x0096,
_SC_LEVEL2_CACHE_LINESIZE = 0x0097,
_SC_LEVEL3_CACHE_SIZE = 0x0098,
_SC_LEVEL3_CACHE_ASSOC = 0x0099,
_SC_LEVEL3_CACHE_LINESIZE = 0x009a,
_SC_LEVEL4_CACHE_SIZE = 0x009b,
_SC_LEVEL4_CACHE_ASSOC = 0x009c,
_SC_LEVEL4_CACHE_LINESIZE = 0x009d,
}
} }
else version (Solaris) else version (Solaris)
{ {
...@@ -2403,7 +2556,7 @@ else version (OpenBSD) ...@@ -2403,7 +2556,7 @@ else version (OpenBSD)
{ {
char* crypt(in char*, in char*); char* crypt(in char*, in char*);
//char* ctermid(char*); //char* ctermid(char*);
void encrypt(ref char[64], int) @trusted; //void encrypt(ref char[64], int) @trusted;
int fchdir(int) @trusted; int fchdir(int) @trusted;
c_long gethostid() @trusted; c_long gethostid() @trusted;
pid_t getpgid(pid_t) @trusted; pid_t getpgid(pid_t) @trusted;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment