quotactl: add decoding of Q_GETNEXTQUOTA and Q_XGETNEXTQUOTA

* quota.c (if_nextdqblk): New structure.
(decode_cmd_data): Handle Q_GETNEXTQUOTA and Q_XGETNEXTQUOTA.
This commit is contained in:
Дмитрий Левин 2016-03-29 01:15:24 +00:00
parent 4ce6b5e0e8
commit cca2e53c4a

39
quota.c
View File

@ -62,6 +62,19 @@ struct if_dqblk
uint32_t dqb_valid;
};
struct if_nextdqblk {
uint64_t dqb_bhardlimit;
uint64_t dqb_bsoftlimit;
uint64_t dqb_curspace;
uint64_t dqb_ihardlimit;
uint64_t dqb_isoftlimit;
uint64_t dqb_curinodes;
uint64_t dqb_btime;
uint64_t dqb_itime;
uint32_t dqb_valid;
uint32_t dqb_id;
};
struct v1_dqblk
{
uint32_t dqb_bhardlimit; /* absolute limit on disk blks alloc */
@ -228,6 +241,31 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data)
tprints("...}");
break;
}
case Q_GETNEXTQUOTA:
{
struct if_nextdqblk dq;
if (entering(tcp))
return 0;
if (umove_or_printaddr(tcp, data, &dq))
break;
tprintf("{bhardlimit=%" PRIu64 ", ", dq.dqb_bhardlimit);
tprintf("bsoftlimit=%" PRIu64 ", ", dq.dqb_bsoftlimit);
tprintf("curspace=%" PRIu64 ", ", dq.dqb_curspace);
tprintf("ihardlimit=%" PRIu64 ", ", dq.dqb_ihardlimit);
tprintf("isoftlimit=%" PRIu64 ", ", dq.dqb_isoftlimit);
tprintf("curinodes=%" PRIu64 ", ", dq.dqb_curinodes);
if (!abbrev(tcp)) {
tprintf("btime=%" PRIu64 ", ", dq.dqb_btime);
tprintf("itime=%" PRIu64 ", ", dq.dqb_itime);
tprints("valid=");
printflags(if_dqblk_valid,
dq.dqb_valid, "QIF_???");
tprintf(", id=%u}", dq.dqb_id);
} else
tprintf("id=%u, ...}", dq.dqb_id);
break;
}
case Q_V1_GETQUOTA:
if (entering(tcp))
return 0;
@ -267,6 +305,7 @@ decode_cmd_data(struct tcb *tcp, uint32_t cmd, unsigned long data)
break;
}
case Q_XGETQUOTA:
case Q_XGETNEXTQUOTA:
if (entering(tcp))
return 0;
case Q_XSETQLIM: