vfs/stat: Make the flag defintion more confirm POSIX standard

specified here:
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_stat.h.html

Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
Xiang Xiao
2020-07-05 23:30:43 +08:00
committed by Abdelatif Guettouche
parent 1a523e5519
commit 91ed14c631
7 changed files with 130 additions and 78 deletions
+36 -28
View File
@@ -63,38 +63,46 @@
#define S_IRUSR (1 << 8)
#define S_IRWXU (7 << 6)
#define S_ISVTX 0 /* "Sticky" bit (not used) */
#define S_ISGID 0 /* Set group ID bit (not used)*/
#define S_ISUID 0 /* Set UID bit (not used) */
#define S_ISVTX (1 << 9) /* "Sticky" bit (not used) */
#define S_ISGID (1 << 10) /* Set group ID bit (not used)*/
#define S_ISUID (1 << 11) /* Set UID bit (not used) */
#define S_IFIFO 0 /* Bits 11-14: File type bits (not all used) */
#define S_IFCHR (1 << 11)
#define S_IFDIR (2 << 11)
#define S_IFBLK (3 << 11)
#define S_IFREG (4 << 11)
#define S_IFMQ (5 << 11)
#define S_IFSEM (6 << 11)
#define S_IFSHM (7 << 11)
#define S_IFSOCK (8 << 11)
#define S_IFMTD (9 << 11)
#define s_IFTGT (15 << 11) /* May be the target of a symbolic link */
#define S_IFLNK (1 << 15) /* Bit 15: Symbolic link */
#define S_IFMT (31 << 11) /* Bits 11-15: Full file type */
#define S_IFIFO (1 << 12) /* Bits 12-15: File type bits (not all used) */
#define S_IFCHR (2 << 12)
#define S_IFSEM (3 << 12)
#define S_IFDIR (4 << 12)
#define S_IFMQ (5 << 12)
#define S_IFBLK (6 << 12)
#define S_IFSHM (7 << 12)
#define S_IFREG (8 << 12)
#define S_IFMTD (9 << 12)
#define S_IFLNK (10 << 12)
#define S_IFSOCK (12 << 12)
#define S_IFMT (15 << 12)
/* File type macros that operate on an instance of mode_t */
#define S_ISFIFO(m) (0)
#define S_ISCHR(m) (((m) & s_IFTGT) == S_IFCHR)
#define S_ISDIR(m) (((m) & s_IFTGT) == S_IFDIR)
#define S_ISBLK(m) (((m) & s_IFTGT) == S_IFBLK)
#define S_ISREG(m) (((m) & s_IFTGT) == S_IFREG)
#define S_ISMQ(m) (((m) & s_IFTGT) == S_IFMQ)
#define S_ISSEM(m) (((m) & s_IFTGT) == S_IFSEM)
#define S_ISSHM(m) (((m) & s_IFTGT) == S_IFSHM)
#define S_ISSOCK(m) (((m) & s_IFTGT) == S_IFSOCK)
#define S_ISMTD(m) (((m) & s_IFTGT) == S_IFMTD)
#define S_ISLNK(m) (((m) & S_IFLNK) != 0)
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
#define S_ISSEM(m) (((m) & S_IFMT) == S_IFSEM)
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#define S_ISMQ(m) (((m) & S_IFMT) == S_IFMQ)
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
#define S_ISSHM(m) (((m) & S_IFMT) == S_IFSHM)
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#define S_ISMTD(m) (((m) & S_IFMT) == S_IFMTD)
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
/* These are from POSIX.1b. If the objects are not implemented using separate
* distinct file types, the macros always will evaluate to zero. Unlike the
* other S_* macros the following three take a pointer to a `struct stat'
* object as the argument.
*/
#define S_TYPEISSEM(buf) S_ISSEM((buf)->st_mode)
#define S_TYPEISMQ(buf) S_ISMQ((buf)->st_mode)
#define S_TYPEISSHM(buf) S_ISSHM((buf)->st_mode)
/* The following macros are required by POSIX to acheive backward
* compatibility with earlier versions of struct stat.