diff -Nurp a/libphobos/libdruntime/core/sys/posix/fcntl.d b/libphobos/libdruntime/core/sys/posix/fcntl.d --- a/libphobos/libdruntime/core/sys/posix/fcntl.d 2020-01-01 00:00:00.000000000 +0900 +++ b/libphobos/libdruntime/core/sys/posix/fcntl.d 2020-01-01 00:00:00.000000000 +0900 @@ -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 -Nurp a/libphobos/libdruntime/core/sys/posix/semaphore.d b/libphobos/libdruntime/core/sys/posix/semaphore.d --- a/libphobos/libdruntime/core/sys/posix/semaphore.d 2020-01-01 00:00:00.000000000 +0900 +++ b/libphobos/libdruntime/core/sys/posix/semaphore.d 2020-01-01 00:00:00.000000000 +0900 @@ -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 -Nurp a/libphobos/libdruntime/core/sys/posix/sys/stat.d b/libphobos/libdruntime/core/sys/posix/sys/stat.d --- a/libphobos/libdruntime/core/sys/posix/sys/stat.d 2020-01-01 00:00:00.000000000 +0900 +++ b/libphobos/libdruntime/core/sys/posix/sys/stat.d 2020-01-01 00:00:00.000000000 +0900 @@ -1587,31 +1587,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; - - timespec st_atim; - timespec st_mtim; - timespec st_ctim; - 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; } + 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; } + } } - long[3] __unused; } + 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; + + 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 + { + 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; } + } + } + } + else + static assert("Unsupported platform"); + private { extern (D) bool S_ISTYPE( mode_t mode, uint mask ) diff -Nurp a/libphobos/libdruntime/core/sys/posix/sys/types.d b/libphobos/libdruntime/core/sys/posix/sys/types.d --- a/libphobos/libdruntime/core/sys/posix/sys/types.d 2020-01-08 00:00:00.000000000 +0900 +++ b/libphobos/libdruntime/core/sys/posix/sys/types.d 2020-01-08 00:00:00.000000000 +0900 @@ -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;