x86: Rename VPD (XCC)
[akaros.git] / kern / include / ros / fs.h
index 3327f10..c2debed 100644 (file)
@@ -1,5 +1,4 @@
-#ifndef _ROS_INC_STAT_H
-#define _ROS_INC_STAT_H
+#pragma once
 
 #include <sys/types.h>
 #include <ros/limits.h>
@@ -57,23 +56,15 @@ struct kstat {
 #define O_FSYNC                        O_SYNC
 #define O_ASYNC                        00020000
 #define O_DIRECT               00040000        /* Direct disk access. */
+#define O_PATH                 00100000        /* Path only, no I/O */
 #define O_DIRECTORY            00200000        /* Must be a directory. */
 #define O_NOFOLLOW             00400000        /* Do not follow links. */
 #define O_NOATIME              01000000        /* Do not set atime. */
 #define O_CLOEXEC              02000000        /* Set close_on_exec. */
 #define O_REMCLO               04000000        /* Remove on close (unsupported). */
-#define O_CREAT_FLAGS (O_CREAT | O_EXCL | O_NOCTTY | O_TRUNC)
-#define O_FCNTL_FLAGS (O_APPEND | O_ASYNC | O_DIRECT | O_NOATIME | O_NONBLOCK)
 
-/* Plan9 names for these flags */
-#define OREAD                  O_RDONLY
-#define OWRITE                 O_WRONLY
-#define ORDWR                  O_RDWR
-#define OEXEC                  O_EXEC
-#define OTRUNC                 O_TRUNC
-#define OCEXEC                 O_CLOEXEC
-#define OEXCL                  O_EXCL
-#define ORCLOSE                        O_REMCLO
+/* Keep this value in sync with glibc (io/fcntl.h) */
+#define AT_FDCWD       -100
 
 #define F_DUPFD                0       /* Duplicate file descriptor */
 #define F_GETFD                1       /* Get file descriptor flags */
@@ -95,7 +86,7 @@ struct kstat {
 /* TODO: have userpsace use our stuff from bits/stats.h */
 #ifdef ROS_KERNEL
 #define stat kstat
-#define dirent kdirent 
+#define dirent kdirent
 
 /* File creation modes (access controls) */
 #define S_IRWXU 00700  /* user (file owner) has read, write and execute perms */
@@ -113,23 +104,24 @@ struct kstat {
 #define S_PMASK 00777  /* mask for all perms */
 
 /* File type is encoded in the file mode */
-#define __S_IFMT       0170000 /* These bits determine file type */
+#define __S_IFMT               000170000       /* These bits determine file type */
 /* File types */
-#define __S_IFDIR      0040000 /* Directory */
-#define __S_IFCHR      0020000 /* Character device */
-#define __S_IFBLK      0060000 /* Block device */
-#define __S_IFREG      0100000 /* Regular file */
-#define __S_IFIFO      0010000 /* FIFO */
-#define __S_IFLNK      0120000 /* Symbolic link */
-#define __S_IFSOCK     0140000 /* Socket */
+#define __S_IFDIR              000040000       /* Directory */
+#define __S_IFCHR              000020000       /* Character device */
+#define __S_IFBLK              000060000       /* Block device */
+#define __S_IFREG              000100000       /* Regular file */
+#define __S_IFIFO              000010000       /* FIFO */
+#define __S_IFLNK              000120000       /* Symbolic link */
+#define __S_IFSOCK             000140000       /* Socket */
 /* Protection bits */
-#define __S_ISUID      04000   /* Set user ID on execution */
-#define __S_ISGID      02000   /* Set group ID on execution */
-#define __S_ISVTX      01000   /* Save swapped text after use (sticky) */
-#define __S_IREAD      0400    /* Read by owner */
-#define __S_IWRITE     0200    /* Write by owner */
-#define __S_IEXEC      0100    /* Execute by owner */
-/* Test macros for file types. */
+#define __S_ISUID              000004000       /* Set user ID on execution */
+#define __S_ISGID              000002000       /* Set group ID on execution */
+#define __S_ISVTX              000001000       /* Save swapped text after use (sticky) */
+#define __S_IREAD              000000400       /* Read by owner */
+#define __S_IWRITE             000000200       /* Write by owner */
+#define __S_IEXEC              000000100       /* Execute by owner */
+
+/* Test macros for file types */
 #define __S_ISTYPE(mode, mask) (((mode) & __S_IFMT) == (mask))
 #define S_ISDIR(mode)  __S_ISTYPE((mode), __S_IFDIR)
 #define S_ISCHR(mode)  __S_ISTYPE((mode), __S_IFCHR)
@@ -140,4 +132,11 @@ struct kstat {
 
 #endif /* ROS_KERNEL */
 
-#endif /* _ROS_INC_STAT_H */
+/* Non-standard bits */
+#define __S_NONSTD             077000000       /* Magic Akaros bits */
+#define __S_READABLE   001000000       /* File is readable */
+#define __S_WRITABLE   002000000       /* File is writable */
+
+/* Test macros for non-standard bits */
+#define S_READABLE(mode)       (((mode) & __S_READABLE) != 0)
+#define S_WRITABLE(mode)       (((mode) & __S_WRITABLE) != 0)