Module Name:    src
Committed By:   pooka
Date:           Thu Jul  2 12:53:48 UTC 2009

Modified Files:
        src/sys/kern: vfs_syscalls.c
        src/sys/sys: vfs_syscalls.h

Log Message:
expose mkdir to in-kernel consumers


To generate a diff of this commit:
cvs rdiff -u -r1.395 -r1.396 src/sys/kern/vfs_syscalls.c
cvs rdiff -u -r1.9 -r1.10 src/sys/sys/vfs_syscalls.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/vfs_syscalls.c
diff -u src/sys/kern/vfs_syscalls.c:1.395 src/sys/kern/vfs_syscalls.c:1.396
--- src/sys/kern/vfs_syscalls.c:1.395	Mon Jun 29 05:08:18 2009
+++ src/sys/kern/vfs_syscalls.c	Thu Jul  2 12:53:47 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_syscalls.c,v 1.395 2009/06/29 05:08:18 dholland Exp $	*/
+/*	$NetBSD: vfs_syscalls.c,v 1.396 2009/07/02 12:53:47 pooka Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.395 2009/06/29 05:08:18 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.396 2009/07/02 12:53:47 pooka Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_fileassoc.h"
@@ -3444,14 +3444,21 @@
 		syscallarg(const char *) path;
 		syscallarg(int) mode;
 	} */
-	struct proc *p = l->l_proc;
+
+	return do_sys_mkdir(SCARG(uap, path), SCARG(uap, mode));
+}
+
+int
+do_sys_mkdir(const char *path, mode_t mode)
+{
+	struct proc *p = curlwp->l_proc;
 	struct vnode *vp;
 	struct vattr vattr;
 	int error;
 	struct nameidata nd;
 
-	NDINIT(&nd, CREATE, LOCKPARENT | CREATEDIR | TRYEMULROOT, UIO_USERSPACE,
-	    SCARG(uap, path));
+	NDINIT(&nd, CREATE, LOCKPARENT | CREATEDIR | TRYEMULROOT,
+	    UIO_USERSPACE, path);
 	if ((error = namei(&nd)) != 0)
 		return (error);
 	vp = nd.ni_vp;
@@ -3467,8 +3474,7 @@
 	VATTR_NULL(&vattr);
 	vattr.va_type = VDIR;
 	/* We will read cwdi->cwdi_cmask unlocked. */
-	vattr.va_mode =
-	    (SCARG(uap, mode) & ACCESSPERMS) &~ p->p_cwdi->cwdi_cmask;
+	vattr.va_mode = (mode & ACCESSPERMS) &~ p->p_cwdi->cwdi_cmask;
 	error = VOP_MKDIR(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vattr);
 	if (!error)
 		vput(nd.ni_vp);

Index: src/sys/sys/vfs_syscalls.h
diff -u src/sys/sys/vfs_syscalls.h:1.9 src/sys/sys/vfs_syscalls.h:1.10
--- src/sys/sys/vfs_syscalls.h:1.9	Sun Jan 11 02:45:56 2009
+++ src/sys/sys/vfs_syscalls.h	Thu Jul  2 12:53:47 2009
@@ -1,8 +1,9 @@
-/*     $NetBSD: vfs_syscalls.h,v 1.9 2009/01/11 02:45:56 christos Exp $        */
+/*     $NetBSD: vfs_syscalls.h,v 1.10 2009/07/02 12:53:47 pooka Exp $        */
 
 #ifndef _SYS_VFS_SYSCALLS_H_
 #define _SYS_VFS_SYSCALLS_H_
 
+#include <sys/types.h>
 #include <sys/fstypes.h>
 
 struct stat;
@@ -36,5 +37,6 @@
 int	do_sys_unlink(const char *, enum uio_seg);
 int	do_sys_rename(const char *, const char *, enum uio_seg, int);
 int	do_sys_mknod(struct lwp *l, const char *, mode_t, dev_t, register_t *);
+int	do_sys_mkdir(const char *, mode_t);
 
 #endif /* _SYS_VFS_SYSCALLS_H_ */

Reply via email to