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.
This commit is contained in:
Iain Buclaw 2020-04-27 23:33:18 +02:00
parent 9b8e9006bb
commit 6dffa67b46
37 changed files with 697 additions and 207 deletions

View File

@ -1,3 +1,9 @@
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.

View File

@ -1,4 +1,4 @@
2b5c0b2766949e788e4929c5fb0e2ba698ff79a3
476882795473a884f837bea6da850ac5181868d1
The first line of this file holds the git revision number of the last
merge done from the dlang/druntime repository.

View File

@ -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/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/mman.d core/sys/linux/sys/netinet/tcp.d \
core/sys/linux/sys/prctl.d core/sys/linux/sys/signalfd.d \
core/sys/linux/sys/socket.d core/sys/linux/sys/sysinfo.d \
core/sys/linux/sys/time.d core/sys/linux/sys/xattr.d \
core/sys/linux/termios.d core/sys/linux/time.d \
core/sys/linux/timerfd.d core/sys/linux/tipc.d core/sys/linux/unistd.d
core/sys/linux/sys/mman.d core/sys/linux/sys/prctl.d \
core/sys/linux/sys/signalfd.d core/sys/linux/sys/socket.d \
core/sys/linux/sys/sysinfo.d core/sys/linux/sys/time.d \
core/sys/linux/sys/xattr.d core/sys/linux/termios.d \
core/sys/linux/time.d core/sys/linux/timerfd.d core/sys/linux/tipc.d \
core/sys/linux/unistd.d
DRUNTIME_DSOURCES_NETBSD = core/sys/netbsd/dlfcn.d \
core/sys/netbsd/execinfo.d core/sys/netbsd/string.d \

View File

@ -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/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/mman.lo core/sys/linux/sys/netinet/tcp.lo \
core/sys/linux/sys/prctl.lo core/sys/linux/sys/signalfd.lo \
core/sys/linux/sys/socket.lo core/sys/linux/sys/sysinfo.lo \
core/sys/linux/sys/time.lo core/sys/linux/sys/xattr.lo \
core/sys/linux/termios.lo core/sys/linux/time.lo \
core/sys/linux/timerfd.lo core/sys/linux/tipc.lo \
core/sys/linux/unistd.lo
core/sys/linux/sys/mman.lo core/sys/linux/sys/prctl.lo \
core/sys/linux/sys/signalfd.lo core/sys/linux/sys/socket.lo \
core/sys/linux/sys/sysinfo.lo core/sys/linux/sys/time.lo \
core/sys/linux/sys/xattr.lo core/sys/linux/termios.lo \
core/sys/linux/time.lo core/sys/linux/timerfd.lo \
core/sys/linux/tipc.lo core/sys/linux/unistd.lo
@DRUNTIME_OS_LINUX_TRUE@am__objects_18 = $(am__objects_17)
am__objects_19 = core/sys/windows/accctrl.lo \
core/sys/windows/aclapi.lo core/sys/windows/aclui.lo \
@ -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/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/mman.d core/sys/linux/sys/netinet/tcp.d \
core/sys/linux/sys/prctl.d core/sys/linux/sys/signalfd.d \
core/sys/linux/sys/socket.d core/sys/linux/sys/sysinfo.d \
core/sys/linux/sys/time.d core/sys/linux/sys/xattr.d \
core/sys/linux/termios.d core/sys/linux/time.d \
core/sys/linux/timerfd.d core/sys/linux/tipc.d core/sys/linux/unistd.d
core/sys/linux/sys/mman.d core/sys/linux/sys/prctl.d \
core/sys/linux/sys/signalfd.d core/sys/linux/sys/socket.d \
core/sys/linux/sys/sysinfo.d core/sys/linux/sys/time.d \
core/sys/linux/sys/xattr.d core/sys/linux/termios.d \
core/sys/linux/time.d core/sys/linux/timerfd.d core/sys/linux/tipc.d \
core/sys/linux/unistd.d
DRUNTIME_DSOURCES_NETBSD = core/sys/netbsd/dlfcn.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)
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/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/signalfd.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:
-rm -f core/sys/linux/netinet/*.lo
-rm -f core/sys/linux/sys/*.$(OBJEXT)
-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/*.lo
-rm -f core/sys/netbsd/sys/*.$(OBJEXT)
@ -2027,7 +2019,6 @@ clean-libtool:
-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/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/sys/.libs core/sys/netbsd/sys/_libs
-rm -rf core/sys/openbsd/.libs core/sys/openbsd/_libs
@ -2183,7 +2174,6 @@ distclean-generic:
-rm -f core/sys/linux/$(am__dirstamp)
-rm -f core/sys/linux/netinet/$(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/sys/$(am__dirstamp)
-rm -f core/sys/openbsd/$(am__dirstamp)

View File

@ -167,9 +167,11 @@ unittest
/*************************************
* Round argument to a specific precision.
*
* D language types specify a minimum precision, not a maximum. The
* `toPrec()` function forces rounding of the argument `f` to the
* precision of the specified floating point type `T`.
* D language types specify only a minimum precision, not a maximum. The
* `toPrec()` function forces rounding of the argument `f` to the precision
* 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:
* T = precision type to round to
@ -206,9 +208,10 @@ T toPrec(T:real)(real f) { pragma(inline, false); return f; }
@safe unittest
{
static float f = 1.1f;
static double d = 1.1;
static real r = 1.1L;
// Test all instantiations work with all combinations of float.
float f = 1.1f;
double d = 1.1;
real r = 1.1L;
f = toPrec!float(f + f);
f = toPrec!float(d + d);
f = toPrec!float(r + r);
@ -219,19 +222,32 @@ T toPrec(T:real)(real f) { pragma(inline, false); return f; }
r = toPrec!real(d + d);
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 double PID = 0x1.921fb54442d18p+1;
enum float PIF = 0x1.921fb6p+1;
static assert(approxEqual(toPrec!float(PIR), PIF));
static assert(approxEqual(toPrec!double(PIR), PID));
static assert(approxEqual(toPrec!real(PIR), PIR));
static assert(approxEqual(toPrec!float(PID), PIF));
static assert(approxEqual(toPrec!double(PID), PID));
static assert(approxEqual(toPrec!real(PID), PID));
static assert(approxEqual(toPrec!float(PIF), PIF));
static assert(approxEqual(toPrec!double(PIF), PIF));
static assert(approxEqual(toPrec!real(PIF), PIF));
assert(toPrec!float(PIR) == PIF);
assert(toPrec!double(PIR) == PID);
assert(toPrec!real(PIR) == PIR);
assert(toPrec!float(PID) == PIF);
assert(toPrec!double(PID) == PID);
assert(toPrec!real(PID) == PID);
assert(toPrec!float(PIF) == PIF);
assert(toPrec!double(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));
}

View File

@ -17,6 +17,15 @@
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):
@trusted:
nothrow:
@ -39,10 +48,10 @@ else version (CRuntime_Microsoft)
///
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);
}

View File

@ -211,6 +211,50 @@ version (Windows)
enum ENOTEMPTY = 41; /// Directory not empty
enum EILSEQ = 42; /// Illegal byte sequence
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)
{

View File

@ -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.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@@@.
T _typify(T)(T val) @safe pure nothrow { return val; }
@ -77,7 +85,7 @@ version (Windows)
alias intmax_t = long; ///
alias uintmax_t = ulong; ///
}
else version (OSX)
else version (Darwin)
{
alias int8_t = byte; ///
alias int16_t = short; ///
@ -140,6 +148,15 @@ else version (Posix)
alias int_fast32_t = int; ///
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
{
alias int_fast8_t = byte; ///

View File

@ -23,6 +23,12 @@ else version (TVOS)
else version (WatchOS)
version = Darwin;
// Those libs don't expose the mandated C interface
version (CRuntime_Glibc)
version = ReturnStrerrorR;
else version (CRuntime_UClibc)
version = ReturnStrerrorR;
extern (C):
@system:
nothrow:
@ -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* 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);
}
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);
}
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);
///

View File

@ -25,12 +25,5 @@ else version (WatchOS)
version (Darwin):
extern (C):
version (X86)
version = i386;
version (X86_64)
version = i386;
version (i386)
{
alias uint natural_t;
alias natural_t mach_port_t;
}
alias natural_t = uint;
alias mach_port_t = natural_t;

View File

@ -34,6 +34,11 @@ version (X86)
version = i386;
version (X86_64)
version = i386;
version (AArch64)
version = AnyARM;
version (ARM)
version = AnyARM;
version (i386)
{
alias mach_port_t thread_act_t;
@ -135,3 +140,98 @@ version (i386)
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*);
}
// 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*);
}

View File

@ -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. */
static assert(is(typeof(&dlclose) == __externC!(int, void*)));
static assert(is(typeof(&dlerror) == __externC!(char*)));
static assert(is(typeof(&dlopen) == __externC!(void*, const char*, int)));
static assert(is(typeof(&dlsym) == __externC!(void*, void*, const char*)));
extern(C) {
static assert(is(typeof(&dlclose) == int function(void*)));
static assert(is(typeof(&dlerror) == char* function()));
static assert(is(typeof(&dlopen) == void* function(in char*, int)));
static assert(is(typeof(&dlsym) == void* function(void*, in char*)));
}
static if (__BSD_VISIBLE)
{

View File

@ -38,6 +38,8 @@ else
asm nothrow @trusted { mov p[EBP], EBP; }
else version (D_InlineAsm_X86_64)
asm nothrow @trusted { mov p[RBP], RBP; }
else version (AArch64)
asm nothrow @trusted { "str x29, %0" : "=m" (p); }
else
static assert(false, "Architecture not supported.");

View File

@ -27,6 +27,3 @@ deprecated("use _DEFAULT_SOURCE")
enum __USE_MISC = _DEFAULT_SOURCE;
enum __USE_ATFILE = _ATFILE_SOURCE;
enum __USE_GNU = _GNU_SOURCE;
// Available in bionic from API 21
version (CRuntime_Bionic) enum __WORDSIZE = 32;

View File

@ -31,7 +31,15 @@ import core.sys.linux.dlfcn : Lmid_t;
import core.sys.linux.elf;
// <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
alias __WORDSIZE __ELF_NATIVE_CLASS;

View File

@ -1,9 +0,0 @@
/**
* 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;

View File

@ -156,3 +156,21 @@ enum
SO_PEERGROUPS = 59,
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
}

View File

@ -20,5 +20,6 @@ int timerfd_settime(int fd, int flags, const itimerspec* new_value, itimerspec*
int timerfd_gettime(int fd, itimerspec* curr_value);
enum TFD_TIMER_ABSTIME = 1 << 0;
enum TFD_TIMER_CANCEL_ON_SET = 1 << 1;
enum TFD_CLOEXEC = 0x80000;
enum TFD_NONBLOCK = 0x800;

View File

@ -61,9 +61,9 @@ version (CRuntime_Glibc)
enum __USE_REENTRANT = _REENTRANT;
version (D_LP64)
enum __WORDSIZE=64;
enum __WORDSIZE = 64;
else
enum __WORDSIZE=32;
enum __WORDSIZE = 32;
}
else version (CRuntime_Musl)
{
@ -109,13 +109,19 @@ else version (CRuntime_UClibc)
enum __USE_REENTRANT = _REENTRANT;
version (D_LP64)
enum __WORDSIZE=64;
enum __WORDSIZE = 64;
else
enum __WORDSIZE=32;
enum __WORDSIZE = 32;
}
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)
{

View File

@ -126,20 +126,6 @@ version (CRuntime_Glibc)
char* dlerror();
void* dlopen(in char*, int);
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)
{

View File

@ -27,7 +27,7 @@ extern (C) nothrow @nogc:
intmax_t imaxabs(intmax_t);
imaxdiv_t imaxdiv(intmax_t, intmax_t);
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);
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);
imaxdiv_t imaxdiv(intmax_t, intmax_t);
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);
uintmax_t wcstoumax(in wchar_t*, wchar_t**, int);

View File

@ -743,9 +743,7 @@ else version (Solaris)
int ai_socktype;
int ai_protocol;
version (SPARC)
int _ai_pad;
else version (SPARC64)
version (SPARC64)
int _ai_pad;
socklen_t ai_addrlen;

View File

@ -1142,10 +1142,10 @@ else version (FreeBSD)
int sigdelset(sigset_t*, int);
int sigemptyset(sigset_t *);
int sigfillset(sigset_t *);
int sigismember(in sigset_t *, int);
int sigismember(in sigset_t*, int);
int sigpending(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*);
}
else version (NetBSD)
@ -1228,10 +1228,10 @@ else version (NetBSD)
int __sigdelset14(sigset_t*, int);
int __sigemptyset14(sigset_t *);
int __sigfillset14(sigset_t *);
int __sigismember14(in sigset_t *, int);
int __sigismember14(in sigset_t*, int);
int __sigpending14(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*);
alias __sigaction14 sigaction;
@ -1314,10 +1314,10 @@ else version (OpenBSD)
int sigdelset(sigset_t*, int);
int sigemptyset(sigset_t *);
int sigfillset(sigset_t *);
int sigismember(in sigset_t *, int);
int sigismember(in sigset_t*, int);
int sigpending(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*);
}
else version (DragonFlyBSD)
@ -1363,10 +1363,10 @@ else version (DragonFlyBSD)
int sigdelset(sigset_t*, int);
int sigemptyset(sigset_t *);
int sigfillset(sigset_t *);
int sigismember(in sigset_t *, int);
int sigismember(in sigset_t*, int);
int sigpending(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*);
}
else version (Solaris)
@ -3258,7 +3258,7 @@ else version (CRuntime_Musl)
sigfn_t2 sigset(int sig, sigfn_t2 func);
int killpg(pid_t, int);
int sigaltstack(const scope stack_t*, stack_t*);
int sigaltstack(in stack_t*, stack_t*);
int sighold(int);
int sigignore(int);
int siginterrupt(int, int);

View File

@ -180,6 +180,37 @@ else version (CRuntime_UClibc)
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)
{
static if (__USE_FILE_OFFSET64 && __WORDSIZE != 64)
@ -277,6 +308,30 @@ else version (CRuntime_UClibc)
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)
{
enum L_ctermid = 9;
@ -331,6 +386,9 @@ else version (OpenBSD) // as of OpenBSD 5.4
version = HaveMemstream;
else version (CRuntime_UClibc)
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)
{

View File

@ -574,9 +574,45 @@ else version (CRuntime_Bionic)
}
else version (CRuntime_Musl)
{
char* realpath(in char*, char*);
int putenv(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*);
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*);
}
}
else version (Solaris)

View File

@ -8,11 +8,20 @@ module core.sys.posix.sys.filio;
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):
nothrow @nogc:
version (OSX)
version (Darwin)
{
// File-descriptor ioctl's
enum uint FIOCLEX = _IO('f', 1); // set close on exec on fd

View File

@ -6,11 +6,20 @@
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):
nothrow @nogc:
version (OSX)
version (Darwin)
{
/* 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

View File

@ -525,6 +525,7 @@ else version (CRuntime_Bionic)
else version (CRuntime_Musl)
{
alias ulong rlim_t;
enum RLIM_INFINITY = cast(c_ulong)(~0UL);
int getrlimit(int, rlimit*);
int setrlimit(int, in rlimit*);

View File

@ -15,7 +15,6 @@ public import core.sys.posix.sys.types; // for time_t
public import core.sys.posix.signal; // for sigset_t
//debug=select; // uncomment to turn on debugging printf's
version (unittest) import core.stdc.stdio: printf;
version (OSX)
version = Darwin;
@ -560,6 +559,8 @@ else
pure unittest
{
import core.stdc.stdio: printf;
debug(select) printf("core.sys.posix.sys.select unittest\n");
fd_set fd;

View File

@ -571,8 +571,8 @@ version (CRuntime_Glibc)
}
int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t);
int bind(int, in sockaddr*, socklen_t);
int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*);
@ -580,10 +580,10 @@ version (CRuntime_Glibc)
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 recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int);
ssize_t sendmsg(int, const scope msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t);
ssize_t send(int, in void*, size_t, int);
ssize_t sendmsg(int, in msghdr*, int);
ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe;
int socket(int, int, int) @safe;
int sockatmark(int) @safe;
@ -727,8 +727,8 @@ else version (Darwin)
}
int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t);
int bind(int, in sockaddr*, socklen_t);
int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*);
@ -736,10 +736,10 @@ else version (Darwin)
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 recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int);
ssize_t sendmsg(int, const scope msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t);
ssize_t send(int, in void*, size_t, int);
ssize_t sendmsg(int, in msghdr*, int);
ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe;
int socket(int, int, int) @safe;
int sockatmark(int) @safe;
@ -904,8 +904,8 @@ else version (FreeBSD)
}
int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t);
int bind(int, in sockaddr*, socklen_t);
int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*);
@ -913,10 +913,10 @@ else version (FreeBSD)
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 recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int);
ssize_t sendmsg(int, const scope msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t);
ssize_t send(int, in void*, size_t, int);
ssize_t sendmsg(int, in msghdr*, int);
ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe;
int socket(int, int, int) @safe;
int sockatmark(int) @safe;
@ -1101,8 +1101,8 @@ else version (NetBSD)
}
int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t);
int bind(int, in sockaddr*, socklen_t);
int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*);
@ -1110,10 +1110,10 @@ else version (NetBSD)
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 recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int);
ssize_t sendmsg(int, const scope msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t);
ssize_t send(int, in void*, size_t, int);
ssize_t sendmsg(int, in msghdr*, int);
ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe;
int socket(int, int, int) @safe;
int sockatmark(int) @safe;
@ -1274,8 +1274,8 @@ else version (OpenBSD)
}
int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t);
int bind(int, in sockaddr*, socklen_t);
int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*);
@ -1283,10 +1283,10 @@ else version (OpenBSD)
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 recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int);
ssize_t sendmsg(int, const scope msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t);
ssize_t send(int, in void*, size_t, int);
ssize_t sendmsg(int, in msghdr*, int);
ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe;
int socket(int, int, int) @safe;
int sockatmark(int) @safe;
@ -1655,8 +1655,8 @@ else version (Solaris)
}
int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t);
int bind(int, in sockaddr*, socklen_t);
int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*);
@ -1664,10 +1664,10 @@ else version (Solaris)
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 recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int);
ssize_t sendmsg(int, const scope msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t);
ssize_t send(int, in void*, size_t, int);
ssize_t sendmsg(int, in msghdr*, int);
ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe;
int socket(int, int, int) @safe;
int sockatmark(int) @safe;
@ -1816,8 +1816,8 @@ else version (CRuntime_Bionic)
enum SOCK_RDM = 4;
int accept(int, scope sockaddr*, scope socklen_t*);
int bind(int, const scope sockaddr*, socklen_t);
int connect(int, const scope sockaddr*, socklen_t);
int bind(int, in sockaddr*, socklen_t);
int connect(int, in sockaddr*, socklen_t);
int getpeername(int, scope sockaddr*, scope socklen_t*);
int getsockname(int, scope sockaddr*, scope socklen_t*);
int getsockopt(int, int, int, scope void*, scope socklen_t*);
@ -1825,10 +1825,10 @@ else version (CRuntime_Bionic)
ssize_t recv(int, scope void*, size_t, int);
ssize_t recvfrom(int, scope void*, size_t, int, scope sockaddr*, scope socklen_t*);
int recvmsg(int, scope msghdr*, int);
ssize_t send(int, const scope void*, size_t, int);
int sendmsg(int, const scope msghdr*, int);
ssize_t sendto(int, const scope void*, size_t, int, const scope sockaddr*, socklen_t);
int setsockopt(int, int, int, const scope void*, socklen_t);
ssize_t send(int, in void*, size_t, int);
int sendmsg(int, in msghdr*, int);
ssize_t sendto(int, in void*, size_t, int, in sockaddr*, socklen_t);
int setsockopt(int, int, int, in void*, socklen_t);
int shutdown(int, int) @safe;
int socket(int, int, int) @safe;
int sockatmark(int) @safe;

View File

@ -1391,7 +1391,6 @@ else version (Solaris)
dev_t st_rdev;
c_long[2] st_pad2;
off_t st_size;
c_long st_pad3;
union
{
timestruc_t st_atim;

View File

@ -10,11 +10,20 @@ import core.sys.posix.sys.ioccom;
import core.sys.posix.termios;
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):
nothrow @nogc:
version (OSX)
version (Darwin)
{
struct winsize {
ushort ws_row; // rows, in characters

View File

@ -852,7 +852,7 @@ else version (Darwin)
{
version (D_LP64)
{
enum __PTHREAD_SIZE__ = 1168;
enum __PTHREAD_SIZE__ = 8176;
enum __PTHREAD_ATTR_SIZE__ = 56;
enum __PTHREAD_MUTEXATTR_SIZE__ = 8;
enum __PTHREAD_MUTEX_SIZE__ = 56;
@ -864,7 +864,7 @@ else version (Darwin)
}
else
{
enum __PTHREAD_SIZE__ = 596;
enum __PTHREAD_SIZE__ = 4088;
enum __PTHREAD_ATTR_SIZE__ = 36;
enum __PTHREAD_MUTEXATTR_SIZE__ = 8;
enum __PTHREAD_MUTEX_SIZE__ = 40;

View File

@ -138,8 +138,8 @@ else version (CRuntime_Musl)
{
struct iovec
{
void* iov_base;
uint iov_len;
void* iov_base;
size_t iov_len;
}
ssize_t readv(int, in iovec*, int);

View File

@ -526,3 +526,63 @@ else version (CRuntime_UClibc)
void syslog (int __pri, const char *__fmt, ...);
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();
}

View File

@ -624,6 +624,9 @@ else version (CRuntime_Bionic)
}
else version (CRuntime_Musl)
{
extern __gshared int daylight;
extern __gshared c_long timezone;
tm* getdate(in char*);
char* strptime(in char*, in char*, tm*);
}

View File

@ -1342,9 +1342,162 @@ else version (CRuntime_Bionic)
enum W_OK = 2;
enum X_OK = 1;
enum _SC_PAGESIZE = 0x0027;
enum _SC_NPROCESSORS_ONLN = 0x0061;
enum _SC_THREAD_STACK_MIN = 0x004c;
enum
{
_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)
{
@ -2403,7 +2556,7 @@ else version (OpenBSD)
{
char* crypt(in char*, in char*);
//char* ctermid(char*);
void encrypt(ref char[64], int) @trusted;
//void encrypt(ref char[64], int) @trusted;
int fchdir(int) @trusted;
c_long gethostid() @trusted;
pid_t getpgid(pid_t) @trusted;