diff options
Diffstat (limited to 'libphobos/libdruntime/core/sys/posix')
-rw-r--r-- | libphobos/libdruntime/core/sys/posix/config.d | 8 | ||||
-rw-r--r-- | libphobos/libdruntime/core/sys/posix/fcntl.d | 112 | ||||
-rw-r--r-- | libphobos/libdruntime/core/sys/posix/semaphore.d | 4 | ||||
-rw-r--r-- | libphobos/libdruntime/core/sys/posix/sys/socket.d | 62 | ||||
-rw-r--r-- | libphobos/libdruntime/core/sys/posix/sys/stat.d | 236 | ||||
-rw-r--r-- | libphobos/libdruntime/core/sys/posix/sys/types.d | 22 |
6 files changed, 392 insertions, 52 deletions
diff --git a/libphobos/libdruntime/core/sys/posix/config.d b/libphobos/libdruntime/core/sys/posix/config.d index 38a75d609af..9ac42a130a0 100644 --- a/libphobos/libdruntime/core/sys/posix/config.d +++ b/libphobos/libdruntime/core/sys/posix/config.d @@ -67,15 +67,21 @@ version (CRuntime_Glibc) } else version (CRuntime_Musl) { + // off_t is always 64 bits on Musl enum _FILE_OFFSET_BITS = 64; + // Not present in Musl sources enum __REDIRECT = false; + // Those three are irrelevant for Musl as it always uses 64 bits off_t enum __USE_FILE_OFFSET64 = _FILE_OFFSET_BITS == 64; enum __USE_LARGEFILE = __USE_FILE_OFFSET64 && !__REDIRECT; enum __USE_LARGEFILE64 = __USE_FILE_OFFSET64 && !__REDIRECT; - enum __WORDSIZE=64; + version (D_LP64) + enum __WORDSIZE = 64; + else + enum __WORDSIZE = 32; } else version (CRuntime_UClibc) { diff --git a/libphobos/libdruntime/core/sys/posix/fcntl.d b/libphobos/libdruntime/core/sys/posix/fcntl.d index 867356c67e6..9febcff849b 100644 --- a/libphobos/libdruntime/core/sys/posix/fcntl.d +++ b/libphobos/libdruntime/core/sys/posix/fcntl.d @@ -779,7 +779,102 @@ else version (CRuntime_Bionic) } else version (CRuntime_Musl) { - enum { + version (X86_64) + { + enum + { + O_DIRECTORY = 0x010000, // octal 0200000 + O_NOFOLLOW = 0x020000, // octal 0400000 + O_DIRECT = 0x004000, // octal 040000 + O_LARGEFILE = 0, + O_TMPFILE = 0x410000, // octal 020200000 + + F_GETLK = 5, + F_SETLK = 6, + F_SETLKW = 7, + } + } + // Note: Definitions for i386 are in arch/generic/bits/fcntl.h + else version (X86) + { + enum + { + O_DIRECTORY = 0x010000, // octal 0200000 + O_NOFOLLOW = 0x020000, // octal 0400000 + O_DIRECT = 0x004000, // octal 040000 + O_LARGEFILE = 0x008000, // octal 0100000 + O_TMPFILE = 0x410000, // octal 020200000 + + F_GETLK = 12, + F_SETLK = 13, + F_SETLKW = 14, + } + } + else version (ARM) + { + enum + { + O_DIRECTORY = 0x004000, // octal 040000 + O_NOFOLLOW = 0x008000, // octal 0100000 + O_DIRECT = 0x010000, // octal 0200000 + O_LARGEFILE = 0x020000, // octal 0400000 + O_TMPFILE = 0x404000, // octal 020040000 + + F_GETLK = 12, + F_SETLK = 13, + F_SETLKW = 14, + } + } + else version (AArch64) + { + enum + { + O_DIRECTORY = 0x004000, // octal 040000 + O_NOFOLLOW = 0x008000, // octal 0100000 + O_DIRECT = 0x010000, // octal 0200000 + O_LARGEFILE = 0x020000, // octal 0400000 + O_TMPFILE = 0x404000, // octal 020040000 + + F_GETLK = 5, + F_SETLK = 6, + F_SETLKW = 7, + } + } + else version (SystemZ) + { + enum + { + O_DIRECTORY = 0x010000, // octal 0200000 + O_NOFOLLOW = 0x020000, // octal 0400000 + O_DIRECT = 0x004000, // octal 040000 + O_LARGEFILE = 0x008000, // octal 0100000 + O_TMPFILE = 0x410000, // octal 020200000 + + F_GETLK = 5, + F_SETLK = 6, + F_SETLKW = 7, + } + } + else version (PPC64) + { + enum + { + O_DIRECTORY = 0x004000, // octal 040000 + O_NOFOLLOW = 0x008000, // octal 0100000 + O_DIRECT = 0x020000, // octal 0400000 + O_LARGEFILE = 0x010000, // octal 0200000 + O_TMPFILE = 0x410000, // octal 020200000 + + F_GETLK = 5, + F_SETLK = 6, + F_SETLKW = 7, + } + } + else + static assert(0, "Platform not supported"); + + enum + { O_CREAT = 0x40, // octal 0100 O_EXCL = 0x80, // octal 0200 O_NOCTTY = 0x100, // octal 0400 @@ -790,16 +885,11 @@ else version (CRuntime_Musl) O_DSYNC = 0x1000, // octal 010000 O_SYNC = 0x101000, // octal 04010000 O_RSYNC = O_SYNC, - O_DIRECTORY = 0x10000, - O_NOFOLLOW = 0x20000, O_CLOEXEC = 0x80000, O_ASYNC = 0x2000, - O_DIRECT = 0x4000, - O_LARGEFILE = 0, O_NOATIME = 0x40000, O_PATH = 0x200000, - O_TMPFILE = 0x410000, O_NDELAY = O_NONBLOCK, O_SEARCH = O_PATH, O_EXEC = O_PATH, @@ -809,19 +899,19 @@ else version (CRuntime_Musl) O_WRONLY = 01, O_RDWR = 02, } - enum { + enum + { F_DUPFD = 0, F_GETFD = 1, F_SETFD = 2, F_GETFL = 3, F_SETFL = 4, - F_GETLK = 5, - F_SETLK = 6, - F_SETLKW = 7, + // F_GETLK, F_SETLK, F_SETLKW are arch-specific F_SETOWN = 8, F_GETOWN = 9, } - enum { + enum + { F_RDLCK = 0, F_WRLCK = 1, F_UNLCK = 2, diff --git a/libphobos/libdruntime/core/sys/posix/semaphore.d b/libphobos/libdruntime/core/sys/posix/semaphore.d index ae22d9db54f..cae47773989 100644 --- a/libphobos/libdruntime/core/sys/posix/semaphore.d +++ b/libphobos/libdruntime/core/sys/posix/semaphore.d @@ -143,8 +143,10 @@ else version (CRuntime_Bionic) else version (CRuntime_Musl) { struct sem_t { - int[4*long.sizeof/int.sizeof] __val; + int[4*c_long.sizeof/int.sizeof] __val; } + + enum SEM_FAILED = (sem_t*).init; } else version (CRuntime_UClibc) { diff --git a/libphobos/libdruntime/core/sys/posix/sys/socket.d b/libphobos/libdruntime/core/sys/posix/sys/socket.d index 791a59328f7..0732a48ab88 100644 --- a/libphobos/libdruntime/core/sys/posix/sys/socket.d +++ b/libphobos/libdruntime/core/sys/posix/sys/socket.d @@ -1895,22 +1895,52 @@ else version (CRuntime_Musl) enum { - SO_DEBUG = 1, - SO_REUSEADDR = 2, - SO_TYPE = 3, - SO_ERROR = 4, - SO_DONTROUTE = 5, - SO_BROADCAST = 6, - SO_SNDBUF = 7, - SO_RCVBUF = 8, - SO_KEEPALIVE = 9, - SO_OOBINLINE = 10, - SO_LINGER = 13, - SO_RCVLOWAT = 18, - SO_SNDLOWAT = 19, - SO_RCVTIMEO = 20, - SO_SNDTIMEO = 21, - SO_ACCEPTCONN = 30 + SO_DEBUG = 1 + } + + version (MIPS_Any) + { + enum + { + SO_REUSEADDR = 0x0004, + SO_TYPE = 0x1008, + SO_ERROR = 0x1007, + SO_DONTROUTE = 0x0010, + SO_BROADCAST = 0x0020, + SO_SNDBUF = 0x1001, + SO_RCVBUF = 0x1002, + SO_KEEPALIVE = 0x0008, + SO_OOBINLINE = 0x0100, + SO_LINGER = 0x0080, + SO_REUSEPORT = 0x0200, + SO_RCVLOWAT = 0x1004, + SO_SNDLOWAT = 0x1003, + SO_RCVTIMEO = 0x1006, + SO_SNDTIMEO = 0x1005, + SO_ACCEPTCONN = 0x1009 + } + } + else + { + enum + { + SO_REUSEADDR = 2, + SO_TYPE = 3, + SO_ERROR = 4, + SO_DONTROUTE = 5, + SO_BROADCAST = 6, + SO_SNDBUF = 7, + SO_RCVBUF = 8, + SO_KEEPALIVE = 9, + SO_OOBINLINE = 10, + SO_LINGER = 13, + SO_REUSEPORT = 15, + SO_RCVLOWAT = 18, + SO_SNDLOWAT = 19, + SO_RCVTIMEO = 20, + SO_SNDTIMEO = 21, + SO_ACCEPTCONN = 30 + } } enum : uint diff --git a/libphobos/libdruntime/core/sys/posix/sys/stat.d b/libphobos/libdruntime/core/sys/posix/sys/stat.d index 8692014ffe1..52b51bd3c71 100644 --- a/libphobos/libdruntime/core/sys/posix/sys/stat.d +++ b/libphobos/libdruntime/core/sys/posix/sys/stat.d @@ -1664,31 +1664,225 @@ else version (CRuntime_Musl) S_ISGID = 0x400, // octal 02000 S_ISVTX = 0x200, // octal 01000 } - struct stat_t { - dev_t st_dev; - ino_t st_ino; - nlink_t st_nlink; - - mode_t st_mode; - uid_t st_uid; - gid_t st_gid; - uint __pad0; - dev_t st_rdev; - off_t st_size; - blksize_t st_blksize; - blkcnt_t st_blocks; + version (ARM) + { + struct stat_t + { + dev_t st_dev; + int __st_dev_padding; + c_long __st_ino_truncated; + mode_t st_mode; + nlink_t st_nlink; + + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + int __st_rdev_padding; + off_t st_size; + blksize_t st_blksize; + blkcnt_t st_blocks; + + timespec st_atim; + timespec st_mtim; + timespec st_ctim; + ino_t st_ino; + + extern(D) @safe @property inout pure nothrow + { + ref inout(time_t) st_atime() return { return st_atim.tv_sec; } + ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; } + ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; } + } + } + } + else version (AArch64) + { + struct stat_t + { + dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + nlink_t st_nlink; + + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + c_ulong __pad; + off_t st_size; + blksize_t st_blksize; + int __pad2; + blkcnt_t st_blocks; + + timespec st_atim; + timespec st_mtim; + timespec st_ctim; + uint[2] __unused; + + extern(D) @safe @property inout pure nothrow + { + ref inout(time_t) st_atime() return { return st_atim.tv_sec; } + ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; } + ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; } + } + } + } + else version (X86_64) + { + struct stat_t + { + dev_t st_dev; + ino_t st_ino; + nlink_t st_nlink; + + mode_t st_mode; + uid_t st_uid; + gid_t st_gid; + uint __pad0; + dev_t st_rdev; + off_t st_size; + blksize_t st_blksize; + blkcnt_t st_blocks; + + timespec st_atim; + timespec st_mtim; + timespec st_ctim; + + c_long[3] __unused; + + extern(D) @safe @property inout pure nothrow + { + ref inout(time_t) st_atime() return { return st_atim.tv_sec; } + ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; } + ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; } + } + } + } + else version (X86) + { + struct stat_t + { + dev_t st_dev; + int __st_dev_padding; + c_long __st_ino_truncated; + mode_t st_mode; + nlink_t st_nlink; + + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + int __st_rdev_padding; + off_t st_size; + blksize_t st_blksize; + blkcnt_t st_blocks; + + timespec st_atim; + timespec st_mtim; + timespec st_ctim; + ino_t st_ino; + + extern(D) @safe @property inout pure nothrow + { + ref inout(time_t) st_atime() return { return st_atim.tv_sec; } + ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; } + ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; } + } + } + } + else version (MIPS64) + { + struct stat_t + { + dev_t st_dev; + int[3] __pad1; + ino_t st_ino; + mode_t st_mode; + nlink_t st_nlink; + + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + uint[2] __pad2; + off_t st_size; + int __pad3; + + timespec st_atim; + timespec st_mtim; + timespec st_ctim; + blksize_t st_blksize; + uint __pad4; + blkcnt_t st_blocks; + int[14] __pad5; + + extern(D) @safe @property inout pure nothrow + { + ref inout(time_t) st_atime() return { return st_atim.tv_sec; } + ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; } + ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; } + } + } + } + else version (PPC64) + { + struct stat_t + { + dev_t st_dev; + ino_t st_ino; + nlink_t st_nlink; + mode_t st_mode; - timespec st_atim; - timespec st_mtim; - timespec st_ctim; - extern(D) @safe @property inout pure nothrow + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + off_t st_size; + blksize_t st_blksize; + blkcnt_t st_blocks; + + timespec st_atim; + timespec st_mtim; + timespec st_ctim; + c_ulong[3] __unused; + + extern(D) @safe @property inout pure nothrow + { + ref inout(time_t) st_atime() return { return st_atim.tv_sec; } + ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; } + ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; } + } + } + } + else version (SystemZ) + { + struct stat_t { - ref inout(time_t) st_atime() return { return st_atim.tv_sec; } - ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; } - ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; } + dev_t st_dev; + ino_t st_ino; + nlink_t st_nlink; + mode_t st_mode; + + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + off_t st_size; + + timespec st_atim; + timespec st_mtim; + timespec st_ctim; + + blksize_t st_blksize; + blkcnt_t st_blocks; + c_ulong[3] __unused; + + extern(D) @safe @property inout pure nothrow + { + ref inout(time_t) st_atime() return { return st_atim.tv_sec; } + ref inout(time_t) st_mtime() return { return st_mtim.tv_sec; } + ref inout(time_t) st_ctime() return { return st_ctim.tv_sec; } + } } - long[3] __unused; } + else + static assert("Unsupported platform"); + private { extern (D) bool S_ISTYPE( mode_t mode, uint mask ) diff --git a/libphobos/libdruntime/core/sys/posix/sys/types.d b/libphobos/libdruntime/core/sys/posix/sys/types.d index 6188047cf0e..169287c3bec 100644 --- a/libphobos/libdruntime/core/sys/posix/sys/types.d +++ b/libphobos/libdruntime/core/sys/posix/sys/types.d @@ -112,8 +112,26 @@ version (CRuntime_Glibc) } else version (CRuntime_Musl) { - alias c_long blksize_t; - alias c_ulong nlink_t; + version (AArch64) + { + alias int blksize_t; + alias uint nlink_t; + } + else version (MIPS64) + { + alias c_long blksize_t; + alias uint nlink_t; + } + else version (RISCV64) + { + alias int blksize_t; + alias uint nlink_t; + } + else + { + alias c_long blksize_t; + alias c_ulong nlink_t; + } alias long dev_t; alias long blkcnt_t; alias ulong ino_t; |