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_ */