From: Alex Hornung Date: Mon, 30 Jul 2012 11:20:00 +0000 (+0000) Subject: open - implement O_DIRECTORY X-Git-Url: https://gitweb.dragonflybsd.org/~alexh/dragonfly.git/commitdiff_plain/28d748b9da52d38a8f9b903e9dde1480effdf8b7 open - implement O_DIRECTORY --- diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 9b28f6611f..90ae370e67 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -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) { diff --git a/sys/sys/fcntl.h b/sys/sys/fcntl.h index 8566bb60ea..489f0b625f 100644 --- a/sys/sys/fcntl.h +++ b/sys/sys/fcntl.h @@ -107,6 +107,8 @@ #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 */