From 61565034678feb77b6c58414a124a3e2da5b51e7 Mon Sep 17 00:00:00 2001 From: ed Date: Sun, 21 Mar 2010 20:43:23 +0000 Subject: Actually make O_DIRECTORY work. According to POSIX open() must return ENOTDIR when the path name does not refer to a path name. Change vn_open() to respect this flag. This also simplifies the Linuxolator a bit. --- sys/compat/linux/linux_file.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'sys/compat/linux/linux_file.c') diff --git a/sys/compat/linux/linux_file.c b/sys/compat/linux/linux_file.c index 4e33eaa..9ff1cf0 100644 --- a/sys/compat/linux/linux_file.c +++ b/sys/compat/linux/linux_file.c @@ -128,6 +128,8 @@ linux_common_open(struct thread *td, int dirfd, char *path, int l_flags, int mod bsd_flags |= O_DIRECT; if (l_flags & LINUX_O_NOFOLLOW) bsd_flags |= O_NOFOLLOW; + if (l_flags & LINUX_O_DIRECTORY) + bsd_flags |= O_DIRECTORY; /* XXX LINUX_O_NOATIME: unable to be easily implemented. */ error = kern_openat(td, dirfd, path, UIO_SYSSPACE, bsd_flags, mode); @@ -154,12 +156,6 @@ linux_common_open(struct thread *td, int dirfd, char *path, int l_flags, int mod PROC_UNLOCK(p); sx_sunlock(&proctree_lock); } - if (l_flags & LINUX_O_DIRECTORY) { - if (fp->f_type != DTYPE_VNODE || - fp->f_vnode->v_type != VDIR) { - error = ENOTDIR; - } - } fdrop(fp, td); /* * XXX as above, fdrop()/kern_close() pair is racy. -- cgit v1.1