open - implement O_DIRECTORY
authorAlex Hornung <alex@alexhornung.com>
Mon, 30 Jul 2012 11:20:00 +0000 (11:20 +0000)
committerAlex Hornung <alex@alexhornung.com>
Mon, 30 Jul 2012 13:55:08 +0000 (13:55 +0000)
sys/kern/vfs_vnops.c
sys/sys/fcntl.h

index 9b28f66..90ae370 100644 (file)
@@ -208,6 +208,10 @@ again:
                error = EOPNOTSUPP;
                goto bad;
        }
+       if (vp->v_type != VDIR && (fmode & O_DIRECTORY)) {
+               error = ENOTDIR;
+               goto bad;
+       }
        if ((fmode & O_CREAT) == 0) {
                if (fmode & (FWRITE | O_TRUNC)) {
                        if (vp->v_type == VDIR) {
index 8566bb6..489f0b6 100644 (file)
 #define O_FBUFFERED    0x02000000      /* force buffered I/O */
 #define O_MAPONREAD    0x04000000      /* memory map read buffer */
 
+#define O_DIRECTORY    0x08000000      /* error if not a directory */
+
 #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
 #define FREVOKED       0x10000000      /* revoked by fdrevoke() */
 #define FAPPENDONLY    0x20000000      /* O_APPEND cannot be changed */