Module Name:    src
Committed By:   dholland
Date:           Wed Feb  1 05:12:45 UTC 2012

Modified Files:
        src/tests/fs/ffs: t_miscquota.sh
        src/usr.sbin/repquota: repquota.8 repquota.c

Log Message:
Reimplement repquota -x to print in tabular form instead of XML.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/tests/fs/ffs/t_miscquota.sh
cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/repquota/repquota.8
cvs rdiff -u -r1.39 -r1.40 src/usr.sbin/repquota/repquota.c

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

Modified files:

Index: src/tests/fs/ffs/t_miscquota.sh
diff -u src/tests/fs/ffs/t_miscquota.sh:1.4 src/tests/fs/ffs/t_miscquota.sh:1.5
--- src/tests/fs/ffs/t_miscquota.sh:1.4	Wed Jan 18 20:51:23 2012
+++ src/tests/fs/ffs/t_miscquota.sh	Wed Feb  1 05:12:45 2012
@@ -1,4 +1,4 @@
-# $NetBSD: t_miscquota.sh,v 1.4 2012/01/18 20:51:23 bouyer Exp $ 
+# $NetBSD: t_miscquota.sh,v 1.5 2012/02/01 05:12:45 dholland Exp $ 
 #
 #  Copyright (c) 2011 Manuel Bouyer
 #  All rights reserved.
@@ -82,7 +82,7 @@ quota_walk_list()
 		i=$((i + 1))
 	done
 	# do a repquota
-	atf_check -s exit:0 -o 'match:<integer>0x64000' \
+	atf_check -s exit:0 -o 'match:user 409600 blocks  *81920 20 0' \
 	    env LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK=vfs=getvfsstat,blanket=/mnt repquota -x -${expect} /mnt
 	rump_quota_shutdown
 }

Index: src/usr.sbin/repquota/repquota.8
diff -u src/usr.sbin/repquota/repquota.8:1.11 src/usr.sbin/repquota/repquota.8:1.12
--- src/usr.sbin/repquota/repquota.8:1.11	Sun Mar  6 17:36:32 2011
+++ src/usr.sbin/repquota/repquota.8	Wed Feb  1 05:12:45 2012
@@ -29,7 +29,7 @@
 .\" SUCH DAMAGE.
 .\"
 .\"     from: @(#)repquota.8	8.1 (Berkeley) 6/6/93
-.\"	$NetBSD: repquota.8,v 1.11 2011/03/06 17:36:32 wiz Exp $
+.\"	$NetBSD: repquota.8,v 1.12 2012/02/01 05:12:45 dholland Exp $
 .\"
 .Dd February 10, 2011
 .Dt REPQUOTA 8
@@ -71,8 +71,8 @@ group and user quotas if they exist).
 Print a header line before printing each file system quotas.
 Print all exiting quotas, including those whose current usage is 0.
 .It Fl x
-export file system quota in a plist format suitable for
-.Xr quotactl 8 .
+export file system quota in a tabular dump format suitable for
+.Xr quotarestore 8 .
 A single file system should be specified.
 .El
 .Pp
@@ -86,12 +86,12 @@ printed, along with any quotas created w
 Only the super-user may use this command.
 .Sh SEE ALSO
 .Xr quota 1 ,
-.Xr quotactl 2 ,
+.Xr libquota 3 ,
 .Xr fstab 5 ,
 .Xr edquota 8 ,
 .Xr quotacheck 8 ,
-.Xr quotactl 8 ,
-.Xr quotaon 8
+.Xr quotaon 8 ,
+.Xr quotarestore 8
 .Sh HISTORY
 The
 .Nm

Index: src/usr.sbin/repquota/repquota.c
diff -u src/usr.sbin/repquota/repquota.c:1.39 src/usr.sbin/repquota/repquota.c:1.40
--- src/usr.sbin/repquota/repquota.c:1.39	Sun Jan 29 07:23:52 2012
+++ src/usr.sbin/repquota/repquota.c	Wed Feb  1 05:12:45 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: repquota.c,v 1.39 2012/01/29 07:23:52 dholland Exp $	*/
+/*	$NetBSD: repquota.c,v 1.40 2012/02/01 05:12:45 dholland Exp $	*/
 
 /*
  * Copyright (c) 1980, 1990, 1993
@@ -42,7 +42,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 19
 #if 0
 static char sccsid[] = "@(#)repquota.c	8.2 (Berkeley) 11/22/94";
 #else
-__RCSID("$NetBSD: repquota.c,v 1.39 2012/01/29 07:23:52 dholland Exp $");
+__RCSID("$NetBSD: repquota.c,v 1.40 2012/02/01 05:12:45 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -65,7 +65,6 @@ __RCSID("$NetBSD: repquota.c,v 1.39 2012
 #include <unistd.h>
 
 #include <quota/quota.h>
-#include <quota/quotaprop.h>
 #include <quota.h>
 
 #include "printquota.h"
@@ -395,69 +394,77 @@ printquotas(int idtype, struct quotahand
 }
 
 static void
-exportquotas(void)
+exportquotaval(const struct quotaval *qv)
 {
-	uint32_t id;
-	struct fileusage *fup;
-	prop_dictionary_t dict, data;
-	prop_array_t cmds, datas;
-	int idtype;
-	uint64_t *valuesp[QUOTA_NLIMITS];
+	if (qv->qv_hardlimit == QUOTA_NOLIMIT) {
+		printf(" -");
+	} else {
+		printf(" %llu", (unsigned long long)qv->qv_hardlimit);
+	}
 
-	dict = quota_prop_create();
-	cmds = prop_array_create();
+	if (qv->qv_softlimit == QUOTA_NOLIMIT) {
+		printf(" -");
+	} else {
+		printf(" %llu", (unsigned long long)qv->qv_softlimit);
+	}
 
-	if (dict == NULL || cmds == NULL) {
-		errx(1, "can't allocate proplist");
+	printf(" %llu", (unsigned long long)qv->qv_usage);
+
+	if (qv->qv_expiretime == QUOTA_NOTIME) {
+		printf(" -");
+	} else {
+		printf(" %lld", (long long)qv->qv_expiretime);
 	}
 
+	if (qv->qv_grace == QUOTA_NOTIME) {
+		printf(" -");
+	} else {
+		printf(" %lld", (long long)qv->qv_grace);
+	}
+}
+
+static void
+exportquotas(void)
+{
+	int idtype;
+	id_t id;
+	struct fileusage *fup;
+
+	/* header */
+	printf("@format netbsd-quota-dump v1\n");
+	printf("# idtype id objtype   hard soft usage expire grace\n");
 
 	for (idtype = 0; idtype < REPQUOTA_NUMIDTYPES; idtype++) {
 		if (valid[idtype] == 0)
 			continue;
-		datas = prop_array_create();
-		if (datas == NULL)
-			errx(1, "can't allocate proplist");
-		valuesp[QUOTA_LIMIT_BLOCK] =
-		    &defaultqv[idtype][QUOTA_LIMIT_BLOCK].qv_hardlimit;
-		valuesp[QUOTA_LIMIT_FILE] =
-		    &defaultqv[idtype][QUOTA_LIMIT_FILE].qv_hardlimit;
-		data = quota64toprop(0, 1, valuesp,
-		    ufs_quota_entry_names, UFS_QUOTA_NENTRIES,
-		    ufs_quota_limit_names, QUOTA_NLIMITS);
-		if (data == NULL)
-			err(1, "quota64toprop(default)");
-		if (!prop_array_add_and_rel(datas, data))
-			err(1, "prop_array_add(data)");
+
+		printf("%s default blocks  ", repquota_idtype_names[idtype]);
+		exportquotaval(&defaultqv[idtype][QUOTA_OBJTYPE_BLOCKS]);
+		printf("\n");
+			
+		printf("%s default files  ", repquota_idtype_names[idtype]);
+		exportquotaval(&defaultqv[idtype][QUOTA_OBJTYPE_FILES]);
+		printf("\n");
 
 		for (id = 0; id <= highid[idtype]; id++) {
 			fup = qremove(id, idtype);
 			if (fup == 0)
 				continue;
-			valuesp[QUOTA_LIMIT_BLOCK] =
-			    &fup->fu_qv[QUOTA_LIMIT_BLOCK].qv_hardlimit;
-			valuesp[QUOTA_LIMIT_FILE] =
-			    &fup->fu_qv[QUOTA_LIMIT_FILE].qv_hardlimit;
-			data = quota64toprop(id, 0, valuesp,
-			    ufs_quota_entry_names, UFS_QUOTA_NENTRIES,
-			    ufs_quota_limit_names, QUOTA_NLIMITS);
-			if (data == NULL)
-				err(1, "quota64toprop(id)");
-			if (!prop_array_add_and_rel(datas, data))
-				err(1, "prop_array_add(data)");
+
+			printf("%s %u blocks  ", repquota_idtype_names[idtype],
+			       id);
+			exportquotaval(&fup->fu_qv[QUOTA_OBJTYPE_BLOCKS]);
+			printf("\n");
+
+			printf("%s %u files  ", repquota_idtype_names[idtype],
+			       id);
+			exportquotaval(&fup->fu_qv[QUOTA_OBJTYPE_FILES]);
+			printf("\n");
+
 			free(fup);
 		}
-
-		if (!quota_prop_add_command(cmds, "set",
-		    ufs_quota_class_names[idtype], datas))
-			err(1, "prop_add_command");
 	}
-
-	if (!prop_dictionary_set(dict, "commands", cmds))
-		err(1, "prop_dictionary_set(command)");
-
-	printf("%s\n", prop_dictionary_externalize(dict));
-	return;
+	printf("@end\n");
 }
 
 /*

Reply via email to