summaryrefslogtreecommitdiff
path: root/libphobos/libdruntime/core/sys/posix
diff options
context:
space:
mode:
Diffstat (limited to 'libphobos/libdruntime/core/sys/posix')
-rw-r--r--libphobos/libdruntime/core/sys/posix/config.d8
-rw-r--r--libphobos/libdruntime/core/sys/posix/fcntl.d112
-rw-r--r--libphobos/libdruntime/core/sys/posix/semaphore.d4
-rw-r--r--libphobos/libdruntime/core/sys/posix/sys/socket.d62
-rw-r--r--libphobos/libdruntime/core/sys/posix/sys/stat.d236
-rw-r--r--libphobos/libdruntime/core/sys/posix/sys/types.d22
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;