diff --git a/core/sys/posix/sys_stat.odin b/core/sys/posix/sys_stat.odin index 016f1b1e6..dd66d7d14 100644 --- a/core/sys/posix/sys_stat.odin +++ b/core/sys/posix/sys_stat.odin @@ -154,13 +154,10 @@ S_IRWXO :: mode_t{ .IROTH, .IWOTH, .IXOTH } Mode_Bits :: enum c.int { // File type: - IFBLK = log2(S_IFBLK), /* Block special */ - IFCHR = log2(S_IFCHR), /* Character special */ - IFIFO = log2(S_IFIFO), /* FIFO special */ - IFREG = log2(S_IFREG), /* Regular */ - IFDIR = log2(S_IFDIR), /* Directory */ - IFLNK = log2(S_IFLNK), /* Symbolic link */ - IFSOCK = log2(S_IFSOCK), /* Socket */ + IFCHR = log2(_S_IFCHR), /* Character special */ + IFIFO = log2(_S_IFIFO), /* FIFO special */ + IFREG = log2(_S_IFREG), /* Regular */ + IFDIR = log2(_S_IFDIR), /* Directory */ // Permissions: @@ -183,64 +180,53 @@ Mode_Bits :: enum c.int { mode_t :: bit_set[Mode_Bits; _mode_t] #assert(size_of(mode_t) == size_of(_mode_t)) -// NOTE: making these `.IFREG in m` would probably be fine too, -// but implementations make this an exclusive check so lets stick to it. +S_IFMT :: mode_t{ .IFCHR, .IFREG, .IFDIR, .IFIFO } +S_IFSOCK :: mode_t{ .IFREG, .IFDIR } +S_IFLNK :: mode_t{ .IFREG, .IFCHR } +S_IFBLK :: mode_t{ .IFDIR, .IFCHR } +S_IFIFO :: mode_t{ .IFIFO } +S_IFCHR :: mode_t{ .IFCHR } +S_IFDIR :: mode_t{ .IFDIR } +S_IFREG :: mode_t{ .IFREG } -_S_IFMT :: mode_t{ .IFBLK, .IFCHR, .IFIFO, .IFREG, .IFDIR, .IFLNK, .IFSOCK } +#assert(_S_IFMT == _S_IFCHR|_S_IFREG|_S_IFDIR|_S_IFIFO) +#assert(_S_IFSOCK == _S_IFREG|_S_IFDIR) +#assert(_S_IFLNK == _S_IFREG|_S_IFCHR) +#assert(_S_IFBLK == _S_IFDIR|_S_IFCHR) // Test for a block special file. S_ISBLK :: #force_inline proc "contextless" (m: mode_t) -> bool { - return (m & _S_IFMT) == { .IFBLK } + return (m & S_IFMT) == S_IFBLK } // Test for a character special file. S_ISCHR :: #force_inline proc "contextless" (m: mode_t) -> bool { - return (m & _S_IFMT) == { .IFCHR } + return (m & S_IFMT) == S_IFCHR } // Test for a pipe or FIFO special file. S_ISFIFO :: #force_inline proc "contextless" (m: mode_t) -> bool { - return (m & _S_IFMT) == { .IFIFO } + return (m & S_IFMT) == S_IFIFO } // Test for a regular file. S_ISREG :: #force_inline proc "contextless" (m: mode_t) -> bool { - return (m & _S_IFMT) == { .IFREG } + return (m & S_IFMT) == S_IFREG } // Test for a directory. S_ISDIR :: #force_inline proc "contextless" (m: mode_t) -> bool { - return (m & _S_IFMT) == { .IFDIR } + return (m & S_IFMT) == S_IFDIR } // Test for a symbolic link. S_ISLNK :: #force_inline proc "contextless" (m: mode_t) -> bool { - return (m & _S_IFMT) == { .IFLNK } + return (m & S_IFMT) == S_IFLNK } // Test for a socket. S_ISSOCK :: #force_inline proc "contextless" (m: mode_t) -> bool { - return (m & _S_IFMT) == { .IFSOCK } -} - -// Test for a message queue. -S_TYPEISMQ :: #force_inline proc "contextless" (m: mode_t) -> bool { - return _S_TYPEISMQ(m) -} - -// Test for a semaphore. -S_TYPEISSEM :: #force_inline proc "contextless" (m: mode_t) -> bool { - return _S_TYPEISSEM(m) -} - -// Test for a shared memory object. -S_TYPEISSHM :: #force_inline proc "contextless" (m: mode_t) -> bool { - return _S_TYPEISSHM(m) -} - -// Test macro for a typed memory object. -S_TYPEISTMO :: #force_inline proc "contextless" (m: mode_t) -> bool { - return _S_TYPEISTMO(m) + return (m & S_IFMT) == S_IFSOCK } _S_IRWXU :: 0o000700 @@ -262,6 +248,16 @@ _S_ISUID :: 0o004000 _S_ISGID :: 0o002000 _S_ISVTX :: 0o001000 +_S_IFBLK :: 0o060000 +_S_IFCHR :: 0o020000 +_S_IFIFO :: 0o010000 +_S_IFREG :: 0o100000 +_S_IFDIR :: 0o040000 +_S_IFLNK :: 0o120000 +_S_IFSOCK :: 0o140000 + +_S_IFMT :: 0o170000 + when ODIN_OS == .NetBSD { @(private) LSTAT :: "__stat50" @(private) LFSTAT :: "__fstat50" @@ -304,32 +300,6 @@ when ODIN_OS == .Darwin { st_qspare: [2]c.int64_t, /* RESERVED */ } - S_IFBLK :: 0o060000 - S_IFCHR :: 0o020000 - S_IFIFO :: 0o010000 - S_IFREG :: 0o100000 - S_IFDIR :: 0o040000 - S_IFLNK :: 0o120000 - S_IFSOCK :: 0o140000 - - __S_IFMT :: 0o170000 - - _S_TYPEISMQ :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - - _S_TYPEISSEM :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - - _S_TYPEISSHM :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - - _S_TYPEISTMO :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - UTIME_NOW :: -1 UTIME_OMIT :: -2 @@ -391,32 +361,6 @@ when ODIN_OS == .Darwin { } } - S_IFBLK :: 0o060000 - S_IFCHR :: 0o020000 - S_IFIFO :: 0o010000 - S_IFREG :: 0o100000 - S_IFDIR :: 0o040000 - S_IFLNK :: 0o120000 - S_IFSOCK :: 0o140000 - - __S_IFMT :: 0o170000 - - _S_TYPEISMQ :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - - _S_TYPEISSEM :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - - _S_TYPEISSHM :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - - _S_TYPEISTMO :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - UTIME_NOW :: -1 UTIME_OMIT :: -2 @@ -449,32 +393,6 @@ when ODIN_OS == .Darwin { st_spare: [2]c.uint32_t, } - S_IFBLK :: 0o060000 - S_IFCHR :: 0o020000 - S_IFIFO :: 0o010000 - S_IFREG :: 0o100000 - S_IFDIR :: 0o040000 - S_IFLNK :: 0o120000 - S_IFSOCK :: 0o140000 - - __S_IFMT :: 0o170000 - - _S_TYPEISMQ :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - - _S_TYPEISSEM :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - - _S_TYPEISSHM :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - - _S_TYPEISTMO :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - UTIME_NOW :: (1 << 30) - 1 UTIME_OMIT :: (1 << 30) - 2 @@ -506,32 +424,6 @@ when ODIN_OS == .Darwin { st_birthtimespec: timespec, } - S_IFBLK :: 0o060000 - S_IFCHR :: 0o020000 - S_IFIFO :: 0o010000 - S_IFREG :: 0o100000 - S_IFDIR :: 0o040000 - S_IFLNK :: 0o120000 - S_IFSOCK :: 0o140000 - - __S_IFMT :: 0o170000 - - _S_TYPEISMQ :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - - _S_TYPEISSEM :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - - _S_TYPEISSHM :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - - _S_TYPEISTMO :: #force_inline proc "contextless" (m: mode_t) -> bool { - return false - } - UTIME_NOW :: -2 UTIME_OMIT :: -1