Fix up of file open flags (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 19 Nov 2013 21:21:19 +0000 (13:21 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 19:47:32 +0000 (11:47 -0800)
Plan9 and glibc differed in their open flags, as well as semantics on
things like CREATE.  Note there is no OCREAT in plan9, so we've got more
of a mashup of flags and syscalls.

I tried to get the intent of openmode() correct: reduce to the access
mode type, with EXEC => RDONLY, and ignore all the other flags.

devsrv's open was aborting for TRUNC, though I don't see why.  These
fake devices should be ignoring it anyways; everything is one big write
from the beginning, for all writes.

Reinstall your kernel headers, if you want access to the flags from
userspace.

kern/include/ros/fs.h

index e1dfac2..e01f039 100644 (file)
@@ -45,13 +45,15 @@ struct kstat {
 #define dirent kdirent 
 
 /* File access modes for open and fcntl. */
-#define O_RDONLY               0                       /* Open read-only */
-#define O_WRONLY               1                       /* Open write-only */
-#define O_RDWR                 2                       /* Open read/write */
-#define O_ACCMODE              3
+#define O_RDONLY               0x00            /* Open read-only */
+#define O_WRONLY               0x01            /* Open write-only */
+#define O_RDWR                 0x02            /* Open read/write */
+#define O_EXEC                 0x04            /* Open for exec (unsupported) */
+#define O_ACCMODE              0x07
 
 /* Bits OR'd into the second argument to open */
 #define O_CREAT                        00000100        /* not fcntl */
+#define O_CREATE               O_CREAT         /* fucking saving space with the 'E'? */
 #define O_EXCL                 00000200        /* not fcntl */
 #define O_NOCTTY               00000400        /* not fcntl */
 #define O_TRUNC                        00001000        /* not fcntl */
@@ -65,9 +67,20 @@ struct kstat {
 #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
+
 /* File creation modes (access controls) */
 #define S_IRWXU 00700  /* user (file owner) has read, write and execute perms */
 #define S_IRUSR 00400  /* user has read permission */