Module Name: src
Committed By: christos
Date: Sun Mar 6 22:36:07 UTC 2011
Modified Files:
src/usr.bin/quota: Makefile getvfsquota.c printquota.c printquota.h
quota.c
Added Files:
src/usr.bin/quota: quotautil.c quotautil.h
Log Message:
- merge more code.
- simplify struct access.
To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/usr.bin/quota/Makefile
cvs rdiff -u -r1.3 -r1.4 src/usr.bin/quota/getvfsquota.c \
src/usr.bin/quota/printquota.c src/usr.bin/quota/printquota.h
cvs rdiff -u -r1.35 -r1.36 src/usr.bin/quota/quota.c
cvs rdiff -u -r0 -r1.1 src/usr.bin/quota/quotautil.c \
src/usr.bin/quota/quotautil.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/quota/Makefile
diff -u src/usr.bin/quota/Makefile:1.8 src/usr.bin/quota/Makefile:1.9
--- src/usr.bin/quota/Makefile:1.8 Sun Mar 6 15:47:59 2011
+++ src/usr.bin/quota/Makefile Sun Mar 6 17:36:07 2011
@@ -1,10 +1,10 @@
-# $NetBSD: Makefile,v 1.8 2011/03/06 20:47:59 christos Exp $
+# $NetBSD: Makefile,v 1.9 2011/03/06 22:36:07 christos Exp $
# from: @(#)Makefile 8.1 (Berkeley) 6/6/93
WARNS ?= 4
.include <bsd.own.mk>
PROG= quota
-SRCS= quota.c printquota.c getvfsquota.c
+SRCS= quota.c printquota.c getvfsquota.c quotautil.c
CPPFLAGS+=-I${NETBSDSRCDIR}/sys -I${NETBSDSRCDIR}/usr.bin/quota
DPADD= ${LIBRPCSVC} ${LIBPROP}
Index: src/usr.bin/quota/getvfsquota.c
diff -u src/usr.bin/quota/getvfsquota.c:1.3 src/usr.bin/quota/getvfsquota.c:1.4
--- src/usr.bin/quota/getvfsquota.c:1.3 Sun Mar 6 15:47:59 2011
+++ src/usr.bin/quota/getvfsquota.c Sun Mar 6 17:36:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: getvfsquota.c,v 1.3 2011/03/06 20:47:59 christos Exp $ */
+/* $NetBSD: getvfsquota.c,v 1.4 2011/03/06 22:36:07 christos Exp $ */
/*-
* Copyright (c) 2011 Manuel Bouyer
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: getvfsquota.c,v 1.3 2011/03/06 20:47:59 christos Exp $");
+__RCSID("$NetBSD: getvfsquota.c,v 1.4 2011/03/06 22:36:07 christos Exp $");
#include <stdio.h>
#include <stdlib.h>
@@ -42,9 +42,8 @@
#include <ufs/ufs/quota2_prop.h>
#include <sys/quota.h>
-#include <getvfsquota.h>
-
-const char *qfextension[] = INITQFNAMES;
+#include "getvfsquota.h"
+#include "quotautil.h"
/* retrieve quotas from vfs, for the given user id */
int
Index: src/usr.bin/quota/printquota.c
diff -u src/usr.bin/quota/printquota.c:1.3 src/usr.bin/quota/printquota.c:1.4
--- src/usr.bin/quota/printquota.c:1.3 Sun Mar 6 15:47:59 2011
+++ src/usr.bin/quota/printquota.c Sun Mar 6 17:36:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: printquota.c,v 1.3 2011/03/06 20:47:59 christos Exp $ */
+/* $NetBSD: printquota.c,v 1.4 2011/03/06 22:36:07 christos Exp $ */
/*
* Copyright (c) 1980, 1990, 1993
@@ -42,7 +42,7 @@
#if 0
static char sccsid[] = "@(#)quota.c 8.4 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: printquota.c,v 1.3 2011/03/06 20:47:59 christos Exp $");
+__RCSID("$NetBSD: printquota.c,v 1.4 2011/03/06 22:36:07 christos Exp $");
#endif
#endif /* not lint */
@@ -59,7 +59,7 @@
#include <limits.h>
#include <inttypes.h>
-#include <printquota.h>
+#include "printquota.h"
/*
* convert 64bit value to a printable string
@@ -138,13 +138,12 @@
return buf;
}
-#if 0
/*
* Calculate the grace period and return a precise string for it,
* either in seconds or in format xWyDzHtMuS
*/
const char *
-timepprt(char *buf, size_t len, time_t seconds, int hflag, int space)
+timepprt(char *buf, size_t len, time_t seconds, int hflag)
{
ssize_t i = 0;
@@ -158,7 +157,7 @@
seconds = seconds % WEEK;
}
- if (remain < 3 || seconds == 0)
+ if (len - i < 3 || seconds == 0)
return buf;
if ((seconds / DAY) > 0) {
@@ -166,7 +165,7 @@
seconds = seconds % DAY;
}
- if (remain < 4 || seconds == 0)
+ if (len - i < 4 || seconds == 0)
return buf;
if ((seconds / HOUR) > 0) {
@@ -174,7 +173,7 @@
seconds = seconds % HOUR;
}
- if (remain < 4 || seconds == 0)
+ if (len - i < 4 || seconds == 0)
return buf;
if ((seconds / MINUTE) > 0) {
@@ -183,7 +182,7 @@
seconds = seconds % MINUTE;
}
- if (remain < 4 || seconds == 0)
+ if (len - i < 4 || seconds == 0)
return buf;
(void)snprintf(buf + i, len - i, "%" PRId64 "S", seconds);
@@ -272,4 +271,3 @@
*val = btodb(*val);
return ret;
}
-#endif
Index: src/usr.bin/quota/printquota.h
diff -u src/usr.bin/quota/printquota.h:1.3 src/usr.bin/quota/printquota.h:1.4
--- src/usr.bin/quota/printquota.h:1.3 Sun Mar 6 15:47:59 2011
+++ src/usr.bin/quota/printquota.h Sun Mar 6 17:36:07 2011
@@ -1,10 +1,7 @@
-/* $NetBSD: printquota.h,v 1.3 2011/03/06 20:47:59 christos Exp $ */
+/* $NetBSD: printquota.h,v 1.4 2011/03/06 22:36:07 christos Exp $ */
const char *intprt(char *, size_t, uint64_t, int, int);
const char *timeprt(char *, size_t, time_t, time_t);
-#if 0
-const char *timepprt(time_t, int, int);
+const char *timepprt(char *, size_t, time_t, int);
int timeprd(const char *, time_t *);
int intrd(char *str, uint64_t *val, u_int);
-#endif
-
Index: src/usr.bin/quota/quota.c
diff -u src/usr.bin/quota/quota.c:1.35 src/usr.bin/quota/quota.c:1.36
--- src/usr.bin/quota/quota.c:1.35 Sun Mar 6 15:47:59 2011
+++ src/usr.bin/quota/quota.c Sun Mar 6 17:36:07 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: quota.c,v 1.35 2011/03/06 20:47:59 christos Exp $ */
+/* $NetBSD: quota.c,v 1.36 2011/03/06 22:36:07 christos Exp $ */
/*
* Copyright (c) 1980, 1990, 1993
@@ -42,7 +42,7 @@
#if 0
static char sccsid[] = "@(#)quota.c 8.4 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: quota.c,v 1.35 2011/03/06 20:47:59 christos Exp $");
+__RCSID("$NetBSD: quota.c,v 1.36 2011/03/06 22:36:07 christos Exp $");
#endif
#endif /* not lint */
@@ -76,8 +76,9 @@
#include <rpc/pmap_prot.h>
#include <rpcsvc/rquota.h>
-#include <printquota.h>
-#include <getvfsquota.h>
+#include "printquota.h"
+#include "quotautil.h"
+#include "getvfsquota.h"
struct quotause {
struct quotause *next;
@@ -88,7 +89,6 @@
#define FOUND 0x01
#define QUOTA2 0x02
-static int alldigits(const char *);
static int callaurpc(const char *, rpcprog_t, rpcvers_t, rpcproc_t,
xdrproc_t, void *, xdrproc_t, void *);
static int getnfsquota(struct statvfs *, struct quotause *, uint32_t, int);
@@ -335,14 +335,14 @@
quplist = getprivs(id, type);
for (qup = quplist; qup; qup = qup->next) {
int ql_stat;
+ struct quota2_val *q = qup->q2e.q2e_val;
if (!vflag &&
- qup->q2e.q2e_val[QL_BLOCK].q2v_softlimit == UQUAD_MAX &&
- qup->q2e.q2e_val[QL_BLOCK].q2v_hardlimit == UQUAD_MAX &&
- qup->q2e.q2e_val[QL_FILE].q2v_softlimit == UQUAD_MAX &&
- qup->q2e.q2e_val[QL_FILE].q2v_hardlimit == UQUAD_MAX)
+ q[QL_BLOCK].q2v_softlimit == UQUAD_MAX &&
+ q[QL_BLOCK].q2v_hardlimit == UQUAD_MAX &&
+ q[QL_FILE].q2v_softlimit == UQUAD_MAX &&
+ q[QL_FILE].q2v_hardlimit == UQUAD_MAX)
continue;
- ql_stat = quota2_check_limit(&qup->q2e.q2e_val[QL_FILE],
- 1, now);
+ ql_stat = quota2_check_limit(&q[QL_FILE], 1, now);
switch(QL_STATUS(ql_stat)) {
case QL_S_DENY_HARD:
msgi = "File limit reached on";
@@ -356,8 +356,7 @@
default:
msgi = NULL;
}
- ql_stat = quota2_check_limit(&qup->q2e.q2e_val[QL_BLOCK],
- 1, now);
+ ql_stat = quota2_check_limit(&q[QL_BLOCK], 1, now);
switch(QL_STATUS(ql_stat)) {
case QL_S_DENY_HARD:
msgb = "Block limit reached on";
@@ -381,9 +380,8 @@
printf("\t%s %s\n", msgb, qup->fsname);
continue;
}
- if (vflag || dflag || msgi || msgb ||
- qup->q2e.q2e_val[QL_BLOCK].q2v_cur ||
- qup->q2e.q2e_val[QL_FILE].q2v_cur) {
+ if (vflag || dflag || msgi || msgb || q[QL_BLOCK].q2v_cur ||
+ q[QL_FILE].q2v_cur) {
if (lines++ == 0)
heading(type, id, name, "");
nam = qup->fsname;
@@ -393,46 +391,38 @@
}
if (msgb)
timemsg = timeprt(b0, 9, now,
- qup->q2e.q2e_val[QL_BLOCK].q2v_time);
+ q[QL_BLOCK].q2v_time);
else if ((qup->flags & QUOTA2) != 0 && vflag)
timemsg = timeprt(b0, 9, 0,
- qup->q2e.q2e_val[QL_BLOCK].q2v_grace);
+ q[QL_BLOCK].q2v_grace);
else
timemsg = "";
printf("%12s%9s%c%8s%9s%8s",
nam,
- intprt(b1, 9,
- qup->q2e.q2e_val[QL_BLOCK].q2v_cur,
+ intprt(b1, 9, q[QL_BLOCK].q2v_cur,
HN_B, hflag),
(msgb == NULL) ? ' ' : '*',
- intprt(b2, 9,
- qup->q2e.q2e_val[QL_BLOCK].q2v_softlimit,
+ intprt(b2, 9, q[QL_BLOCK].q2v_softlimit,
HN_B, hflag),
- intprt(b3, 9,
- qup->q2e.q2e_val[QL_BLOCK].q2v_hardlimit,
+ intprt(b3, 9, q[QL_BLOCK].q2v_hardlimit,
HN_B, hflag),
timemsg);
if (msgi)
timemsg = timeprt(b0, 9, now,
- qup->q2e.q2e_val[QL_FILE].q2v_time);
+ q[QL_FILE].q2v_time);
else if ((qup->flags & QUOTA2) != 0 && vflag)
timemsg = timeprt(b0, 9, 0,
- qup->q2e.q2e_val[QL_FILE].q2v_grace);
+ q[QL_FILE].q2v_grace);
else
timemsg = "";
printf("%8s%c%7s%8s%8s\n",
- intprt(b1, 8,
- qup->q2e.q2e_val[QL_FILE].q2v_cur, 0, hflag),
+ intprt(b1, 8, q[QL_FILE].q2v_cur, 0, hflag),
(msgi == NULL) ? ' ' : '*',
- intprt(b2, 8,
- qup->q2e.q2e_val[QL_FILE].q2v_softlimit,
- 0, hflag),
- intprt(b3, 8,
- qup->q2e.q2e_val[QL_FILE].q2v_hardlimit,
- 0, hflag),
+ intprt(b2, 8, q[QL_FILE].q2v_softlimit, 0, hflag),
+ intprt(b3, 8, q[QL_FILE].q2v_hardlimit, 0, hflag),
timemsg);
continue;
}
@@ -648,16 +638,3 @@
return (int) clnt_stat;
}
-
-static int
-alldigits(const char *s)
-{
- unsigned char c;
-
- c = *s++;
- do {
- if (!isdigit(c))
- return 0;
- } while ((c = *s++) != 0);
- return 1;
-}
Added files:
Index: src/usr.bin/quota/quotautil.c
diff -u /dev/null src/usr.bin/quota/quotautil.c:1.1
--- /dev/null Sun Mar 6 17:36:07 2011
+++ src/usr.bin/quota/quotautil.c Sun Mar 6 17:36:07 2011
@@ -0,0 +1,119 @@
+/* $NetBSD: quotautil.c,v 1.1 2011/03/06 22:36:07 christos Exp $ */
+
+/*
+ * Copyright (c) 1980, 1990, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Robert Elz at The University of Melbourne.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__COPYRIGHT("@(#) Copyright (c) 1980, 1990, 1993\
+ The Regents of the University of California. All rights reserved.");
+#endif /* not lint */
+
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)quota.c 8.4 (Berkeley) 4/28/95";
+#else
+__RCSID("$NetBSD: quotautil.c,v 1.1 2011/03/06 22:36:07 christos Exp $");
+#endif
+#endif /* not lint */
+
+#include <sys/param.h>
+#include <sys/types.h>
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <fstab.h>
+#include <errno.h>
+#include <limits.h>
+#include <inttypes.h>
+
+#include <ufs/ufs/quota2.h>
+#include <ufs/ufs/quota1.h>
+
+#include "quotautil.h"
+
+const char *qfextension[MAXQUOTAS] = INITQFNAMES;
+const char *qfname = QUOTAFILENAME;
+
+/*
+ * Check to see if a particular quota is to be enabled.
+ */
+int
+hasquota(char *buf, size_t len, struct fstab *fs, int type)
+{
+ char *opt;
+ char *cp = NULL;
+ static char initname, usrname[100], grpname[100];
+
+ if (!initname) {
+ (void)snprintf(usrname, sizeof(usrname), "%s%s",
+ qfextension[USRQUOTA], qfname);
+ (void)snprintf(grpname, sizeof(grpname), "%s%s",
+ qfextension[GRPQUOTA], qfname);
+ initname = 1;
+ }
+ strlcpy(buf, fs->fs_mntops, len);
+ for (opt = strtok(buf, ","); opt; opt = strtok(NULL, ",")) {
+ if ((cp = strchr(opt, '=')) != NULL)
+ *cp++ = '\0';
+ if (type == USRQUOTA && strcmp(opt, usrname) == 0)
+ break;
+ if (type == GRPQUOTA && strcmp(opt, grpname) == 0)
+ break;
+ }
+ if (!opt)
+ return 0;
+ if (cp) {
+ strlcpy(buf, cp, len);
+ return 1;
+ }
+ (void)snprintf(buf, len, "%s/%s.%s", fs->fs_file, qfname,
+ qfextension[type]);
+ return 1;
+}
+
+int
+alldigits(const char *s)
+{
+ unsigned char c;
+
+ c = *s++;
+ do {
+ if (!isdigit(c))
+ return 0;
+ } while ((c = *s++) != 0);
+ return 1;
+}
Index: src/usr.bin/quota/quotautil.h
diff -u /dev/null src/usr.bin/quota/quotautil.h:1.1
--- /dev/null Sun Mar 6 17:36:07 2011
+++ src/usr.bin/quota/quotautil.h Sun Mar 6 17:36:07 2011
@@ -0,0 +1,7 @@
+/* $NetBSD: quotautil.h,v 1.1 2011/03/06 22:36:07 christos Exp $ */
+
+const char *qfextension[MAXQUOTAS];
+const char *qfname;
+struct fstab;
+int hasquota(char *, size_t, struct fstab *, int);
+int alldigits(const char *);