summaryrefslogtreecommitdiffstats
path: root/lib/libutil
diff options
context:
space:
mode:
authormckusick <mckusick@FreeBSD.org>2010-03-16 06:12:30 +0000
committermckusick <mckusick@FreeBSD.org>2010-03-16 06:12:30 +0000
commitf63b97928b6dff04ed1652eee2d75a7577479818 (patch)
tree8218da33f517c5e82ea83e7c71daba26e9dd1ed0 /lib/libutil
parent834fb25a9ed2240101506d137b5be7d71c75f306 (diff)
downloadFreeBSD-src-f63b97928b6dff04ed1652eee2d75a7577479818.zip
FreeBSD-src-f63b97928b6dff04ed1652eee2d75a7577479818.tar.gz
Debugging nits found while testing the new 64-bit quota code.
Diffstat (limited to 'lib/libutil')
-rw-r--r--lib/libutil/quotafile.c34
1 files changed, 18 insertions, 16 deletions
diff --git a/lib/libutil/quotafile.c b/lib/libutil/quotafile.c
index ab57d66..0fda5f6 100644
--- a/lib/libutil/quotafile.c
+++ b/lib/libutil/quotafile.c
@@ -129,11 +129,9 @@ quota_open(struct fstab *fs, int quotatype, int openflags)
goto error;
qf->dev = st.st_dev;
serrno = hasquota(fs, quotatype, qf->qfname, sizeof(qf->qfname));
- qcmd = QCMD(Q_GETQUOTA, quotatype);
- if (quotactl(fs->fs_file, qcmd, 0, &dqh) == 0) {
- qf->wordsize = 64;
+ qcmd = QCMD(Q_GETQUOTASIZE, quotatype);
+ if (quotactl(qf->fsname, qcmd, 0, &qf->wordsize) == 0)
return (qf);
- }
if (serrno == 0) {
errno = EOPNOTSUPP;
goto error;
@@ -250,18 +248,22 @@ int
quota_maxid(struct quotafile *qf)
{
struct stat st;
+ int maxid;
if (stat(qf->qfname, &st) < 0)
return (0);
switch (qf->wordsize) {
case 32:
- return (st.st_size / sizeof(struct dqblk32) - 1);
+ maxid = st.st_size / sizeof(struct dqblk32) - 1;
+ break;
case 64:
- return (st.st_size / sizeof(struct dqblk64) - 2);
+ maxid = st.st_size / sizeof(struct dqblk64) - 2;
+ break;
default:
- return (0);
+ maxid = 0;
+ break;
}
- /* not reached */
+ return (maxid > 0 ? maxid : 0);
}
static int
@@ -395,10 +397,6 @@ quota_write_usage(struct quotafile *qf, struct dqblk *dqb, int id)
struct dqblk dqbuf;
int qcmd;
- if ((qf->accmode & O_RDWR) != O_RDWR) {
- errno = EBADF;
- return (-1);
- }
if (qf->fd == -1) {
qcmd = QCMD(Q_SETUSE, qf->quotatype);
return (quotactl(qf->fsname, qcmd, id, dqb));
@@ -406,6 +404,10 @@ quota_write_usage(struct quotafile *qf, struct dqblk *dqb, int id)
/*
* Have to do read-modify-write of quota in file.
*/
+ if ((qf->accmode & O_RDWR) != O_RDWR) {
+ errno = EBADF;
+ return (-1);
+ }
if (quota_read(qf, &dqbuf, id) != 0)
return (-1);
/*
@@ -443,10 +445,6 @@ quota_write_limits(struct quotafile *qf, struct dqblk *dqb, int id)
struct dqblk dqbuf;
int qcmd;
- if ((qf->accmode & O_RDWR) != O_RDWR) {
- errno = EBADF;
- return (-1);
- }
if (qf->fd == -1) {
qcmd = QCMD(Q_SETQUOTA, qf->quotatype);
return (quotactl(qf->fsname, qcmd, id, dqb));
@@ -454,6 +452,10 @@ quota_write_limits(struct quotafile *qf, struct dqblk *dqb, int id)
/*
* Have to do read-modify-write of quota in file.
*/
+ if ((qf->accmode & O_RDWR) != O_RDWR) {
+ errno = EBADF;
+ return (-1);
+ }
if (quota_read(qf, &dqbuf, id) != 0)
return (-1);
/*
OpenPOWER on IntegriCloud