Module Name:    src
Committed By:   bouyer
Date:           Tue Feb 15 17:52:52 UTC 2011

Modified Files:
        src/sys/compat/netbsd32 [bouyer-quota2]: netbsd32.h
            netbsd32_compat_50.c netbsd32_conv.h netbsd32_ioctl.h
            netbsd32_netbsd.c

Log Message:
implement COMPAT_NETBSD32 quotactl syscalls (both new and COMPAT_50)


To generate a diff of this commit:
cvs rdiff -u -r1.84.8.1 -r1.84.8.2 src/sys/compat/netbsd32/netbsd32.h
cvs rdiff -u -r1.17 -r1.17.4.1 src/sys/compat/netbsd32/netbsd32_compat_50.c
cvs rdiff -u -r1.24 -r1.24.4.1 src/sys/compat/netbsd32/netbsd32_conv.h
cvs rdiff -u -r1.29.4.1 -r1.29.4.2 src/sys/compat/netbsd32/netbsd32_ioctl.h
cvs rdiff -u -r1.168.4.2 -r1.168.4.3 \
    src/sys/compat/netbsd32/netbsd32_netbsd.c

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

Modified files:

Index: src/sys/compat/netbsd32/netbsd32.h
diff -u src/sys/compat/netbsd32/netbsd32.h:1.84.8.1 src/sys/compat/netbsd32/netbsd32.h:1.84.8.2
--- src/sys/compat/netbsd32/netbsd32.h:1.84.8.1	Tue Feb  8 16:19:47 2011
+++ src/sys/compat/netbsd32/netbsd32.h	Tue Feb 15 17:52:51 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32.h,v 1.84.8.1 2011/02/08 16:19:47 bouyer Exp $	*/
+/*	$NetBSD: netbsd32.h,v 1.84.8.2 2011/02/15 17:52:51 bouyer Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001, 2008 Matthew R. Green
@@ -789,6 +789,12 @@
 	netbsd32_long stbcnt;	/* stability limit exceeded (ro) */
 };
 
+/* <prop/plistref.h> */
+struct netbsd32_plistref {
+	netbsd32_pointer_t pref_plist;
+	netbsd32_size_t pref_len;
+};
+
 /* from <ufs/lfs/lfs.h> */
 typedef netbsd32_pointer_t netbsd32_block_infop_t;  /* XXX broken */
 

Index: src/sys/compat/netbsd32/netbsd32_compat_50.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_50.c:1.17 src/sys/compat/netbsd32/netbsd32_compat_50.c:1.17.4.1
--- src/sys/compat/netbsd32/netbsd32_compat_50.c:1.17	Sun May 30 19:31:39 2010
+++ src/sys/compat/netbsd32/netbsd32_compat_50.c	Tue Feb 15 17:52:51 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_compat_50.c,v 1.17 2010/05/30 19:31:39 drochner Exp $	*/
+/*	$NetBSD: netbsd32_compat_50.c,v 1.17.4.1 2011/02/15 17:52:51 bouyer Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.17 2010/05/30 19:31:39 drochner Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.17.4.1 2011/02/15 17:52:51 bouyer Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_sysv.h"
@@ -1069,3 +1069,21 @@
 	return error;
 }
 #endif
+
+int
+compat_50_netbsd32_quotactl(struct lwp *l, const struct compat_50_netbsd32_quotactl_args *uap, register_t *retval)
+{
+	/* {
+		syscallarg(const netbsd32_charp) path;
+		syscallarg(int) cmd;
+		syscallarg(int) uid;
+		syscallarg(netbsd32_voidp) arg;
+	} */
+	struct compat_50_sys_quotactl_args ua;
+
+	NETBSD32TOP_UAP(path, const char);
+	NETBSD32TO64_UAP(cmd);
+	NETBSD32TO64_UAP(uid);
+	NETBSD32TOP_UAP(arg, void *);
+	return (compat_50_sys_quotactl(l, &ua, retval));
+}

Index: src/sys/compat/netbsd32/netbsd32_conv.h
diff -u src/sys/compat/netbsd32/netbsd32_conv.h:1.24 src/sys/compat/netbsd32/netbsd32_conv.h:1.24.4.1
--- src/sys/compat/netbsd32/netbsd32_conv.h:1.24	Sun Jan 16 23:21:16 2011
+++ src/sys/compat/netbsd32/netbsd32_conv.h	Tue Feb 15 17:52:51 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_conv.h,v 1.24 2011/01/16 23:21:16 njoly Exp $	*/
+/*	$NetBSD: netbsd32_conv.h,v 1.24.4.1 2011/02/15 17:52:51 bouyer Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -52,6 +52,8 @@
 
 #include <compat/sys/dirent.h>
 
+#include <prop/plistref.h>
+
 #include <compat/netbsd32/netbsd32.h>
 
 /* converters for structures that we need */
@@ -756,4 +758,30 @@
 	return ((char *)(void *)odp) - buf;
 }
 
+static inline int
+netbsd32_copyin_plistref(netbsd32_pointer_t n32p, struct plistref *p)
+{
+	struct netbsd32_plistref n32plist;
+	int error;
+
+	error = copyin(NETBSD32PTR64(n32p), &n32plist,
+	    sizeof(struct netbsd32_plistref));
+	if (error)
+		return error;
+	p->pref_plist = NETBSD32PTR64(n32plist.pref_plist);
+	p->pref_len = n32plist.pref_len;
+	return 0;
+}
+
+static inline int
+netbsd32_copyout_plistref(netbsd32_pointer_t n32p, struct plistref *p)
+{
+	struct netbsd32_plistref n32plist;
+
+	NETBSD32PTR32(n32plist.pref_plist, p->pref_plist);
+	n32plist.pref_len = p->pref_len;
+	return copyout(&n32plist, NETBSD32PTR64(n32p),
+	    sizeof(struct netbsd32_plistref));
+}
+
 #endif /* _COMPAT_NETBSD32_NETBSD32_CONV_H_ */

Index: src/sys/compat/netbsd32/netbsd32_ioctl.h
diff -u src/sys/compat/netbsd32/netbsd32_ioctl.h:1.29.4.1 src/sys/compat/netbsd32/netbsd32_ioctl.h:1.29.4.2
--- src/sys/compat/netbsd32/netbsd32_ioctl.h:1.29.4.1	Tue Feb  8 16:19:47 2011
+++ src/sys/compat/netbsd32/netbsd32_ioctl.h	Tue Feb 15 17:52:51 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_ioctl.h,v 1.29.4.1 2011/02/08 16:19:47 bouyer Exp $	*/
+/*	$NetBSD: netbsd32_ioctl.h,v 1.29.4.2 2011/02/15 17:52:51 bouyer Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -389,11 +389,6 @@
 #define VNDIOCSET5032	_IOWR('F', 0, struct netbsd32_vnd_ioctl50)
 #define VNDIOCCLR5032	_IOW('F', 1, struct netbsd32_vnd_ioctl50)
 
-struct netbsd32_plistref {
-	netbsd32_voidp	pref_plist;	/* plist data */
-	netbsd32_size_t	pref_len;	/* total length of plist data */
-};
-
 #define ENVSYS_GETDICTIONARY32	_IOWR('E', 0, struct netbsd32_plistref)
 #define ENVSYS_SETDICTIONARY32	_IOWR('E', 1, struct netbsd32_plistref)
 #define ENVSYS_REMOVEPROPS32	_IOWR('E', 2, struct netbsd32_plistref)

Index: src/sys/compat/netbsd32/netbsd32_netbsd.c
diff -u src/sys/compat/netbsd32/netbsd32_netbsd.c:1.168.4.2 src/sys/compat/netbsd32/netbsd32_netbsd.c:1.168.4.3
--- src/sys/compat/netbsd32/netbsd32_netbsd.c:1.168.4.2	Wed Feb  9 16:09:55 2011
+++ src/sys/compat/netbsd32/netbsd32_netbsd.c	Tue Feb 15 17:52:51 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_netbsd.c,v 1.168.4.2 2011/02/09 16:09:55 bouyer Exp $	*/
+/*	$NetBSD: netbsd32_netbsd.c,v 1.168.4.3 2011/02/15 17:52:51 bouyer Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001, 2008 Matthew R. Green
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_netbsd.c,v 1.168.4.2 2011/02/09 16:09:55 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_netbsd.c,v 1.168.4.3 2011/02/15 17:52:51 bouyer Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ddb.h"
@@ -1185,40 +1185,39 @@
 }
 
 int
-compat_50_netbsd32_quotactl(struct lwp *l, const struct compat_50_netbsd32_quotactl_args *uap, register_t *retval)
+netbsd32___quotactl50(struct lwp *l, const struct netbsd32___quotactl50_args *uap, register_t *retval)
 {
 	/* {
 		syscallarg(const netbsd32_charp) path;
-		syscallarg(int) cmd;
-		syscallarg(int) uid;
-		syscallarg(netbsd32_voidp) arg;
+		syscallarg(netbsd32_voidp) v;
 	} */
-	struct compat_50_sys_quotactl_args ua;
+	struct plistref pref;
+	int error;
+	struct vnode *vp;
+	struct mount *mp;
+	prop_dictionary_t dict;
 
-	NETBSD32TOP_UAP(path, const char);
-	NETBSD32TO64_UAP(cmd);
-	NETBSD32TO64_UAP(uid);
-	NETBSD32TOP_UAP(arg, void *);
-	return (compat_50_sys_quotactl(l, &ua, retval));
-}
+	error = namei_simple_user(SCARG_P32(uap, path),
+	    NSM_FOLLOW_TRYEMULROOT, &vp);
 
-int
-netbsd32___quotactl50(struct lwp *l, const struct netbsd32___quotactl50_args *uap, register_t *retval)
-{
-	/* {
-		syscallarg(const netbsd32_charp) path;
-		syscallarg(void *) v;
-	} */
-	//struct sys___quotactl50_args ua;
+	if (error != 0)
+		return (error);
+	mp = vp->v_mount;
 
-	return EOPNOTSUPP;
-#if 0
-	NETBSD32TOP_UAP(path, const char);
-	NETBSD32TO64_UAP(cmd);
-	NETBSD32TO64_UAP(uid);
-	NETBSD32TOP_UAP(arg, void *);
-	return (sys_quotactl(l, &ua, retval));
-#endif
+	error = netbsd32_copyin_plistref(SCARG(uap, pref), &pref);
+	if (error)
+		return error;
+	error = prop_dictionary_copyin(&pref, &dict);
+	if (error)
+		return error;
+	error = VFS_QUOTACTL(mp, dict);
+	vrele(vp);
+	if (!error)
+		error = prop_dictionary_copyout(&pref, dict);
+	if (!error)
+		error = netbsd32_copyout_plistref(SCARG(uap, pref), &pref);
+	prop_object_release(dict);
+	return (error);
 }
 
 int

Reply via email to