For further splitting of get_quota() and dump_file()/report_mount(). Signed-off-by: Andrey Albershteyn <aalbersh@xxxxxxxxxx> --- quota/report.c | 165 +++++++++++++++++++++++++------------------------ 1 file changed, 84 insertions(+), 81 deletions(-) diff --git a/quota/report.c b/quota/report.c index 97a89a92..0462ce97 100644 --- a/quota/report.c +++ b/quota/report.c @@ -96,39 +96,38 @@ get_quota( static int dump_file( FILE *fp, + fs_disk_quota_t *d, uint id, uint *oid, uint type, char *dev, int flags) { - fs_disk_quota_t d; - - if (!get_quota(&d, id, oid, type, dev, flags)) + if (!get_quota(d, id, oid, type, dev, flags)) return 0; - if (!d.d_blk_softlimit && !d.d_blk_hardlimit && - !d.d_ino_softlimit && !d.d_ino_hardlimit && - !d.d_rtb_softlimit && !d.d_rtb_hardlimit) + if (!d->d_blk_softlimit && !d->d_blk_hardlimit && + !d->d_ino_softlimit && !d->d_ino_hardlimit && + !d->d_rtb_softlimit && !d->d_rtb_hardlimit) return 1; fprintf(fp, "fs = %s\n", dev); /* this branch is for backward compatibility reasons */ - if (d.d_rtb_softlimit || d.d_rtb_hardlimit) + if (d->d_rtb_softlimit || d->d_rtb_hardlimit) fprintf(fp, "%-10d %7llu %7llu %7llu %7llu %7llu %7llu\n", - d.d_id, - (unsigned long long)d.d_blk_softlimit, - (unsigned long long)d.d_blk_hardlimit, - (unsigned long long)d.d_ino_softlimit, - (unsigned long long)d.d_ino_hardlimit, - (unsigned long long)d.d_rtb_softlimit, - (unsigned long long)d.d_rtb_hardlimit); + d->d_id, + (unsigned long long)d->d_blk_softlimit, + (unsigned long long)d->d_blk_hardlimit, + (unsigned long long)d->d_ino_softlimit, + (unsigned long long)d->d_ino_hardlimit, + (unsigned long long)d->d_rtb_softlimit, + (unsigned long long)d->d_rtb_hardlimit); else fprintf(fp, "%-10d %7llu %7llu %7llu %7llu\n", - d.d_id, - (unsigned long long)d.d_blk_softlimit, - (unsigned long long)d.d_blk_hardlimit, - (unsigned long long)d.d_ino_softlimit, - (unsigned long long)d.d_ino_hardlimit); + d->d_id, + (unsigned long long)d->d_blk_softlimit, + (unsigned long long)d->d_blk_hardlimit, + (unsigned long long)d->d_ino_softlimit, + (unsigned long long)d->d_ino_hardlimit); return 1; } @@ -142,6 +141,7 @@ dump_limits_any_type( uint upper) { fs_path_t *mount; + fs_disk_quota_t d; uint id = 0, oid; if ((mount = fs_table_lookup(dir, FS_MOUNT_POINT)) == NULL) { @@ -154,14 +154,14 @@ dump_limits_any_type( /* Range was specified; query everything in it */ if (upper) { for (id = lower; id <= upper; id++) - dump_file(fp, id, NULL, type, mount->fs_name, 0); + dump_file(fp, &d, id, NULL, type, mount->fs_name, 0); return; } /* Use GETNEXTQUOTA if it's available */ - if (dump_file(fp, id, &oid, type, mount->fs_name, GETNEXTQUOTA_FLAG)) { + if (dump_file(fp, &d, id, &oid, type, mount->fs_name, GETNEXTQUOTA_FLAG)) { id = oid + 1; - while (dump_file(fp, id, &oid, type, mount->fs_name, + while (dump_file(fp, &d, id, &oid, type, mount->fs_name, GETNEXTQUOTA_FLAG)) id = oid + 1; return; @@ -173,7 +173,7 @@ dump_limits_any_type( struct group *g; setgrent(); while ((g = getgrent()) != NULL) - dump_file(fp, g->gr_gid, NULL, type, + dump_file(fp, &d, g->gr_gid, NULL, type, mount->fs_name, 0); endgrent(); break; @@ -182,7 +182,7 @@ dump_limits_any_type( struct fs_project *p; setprent(); while ((p = getprent()) != NULL) - dump_file(fp, p->pr_prid, NULL, type, + dump_file(fp, &d, p->pr_prid, NULL, type, mount->fs_name, 0); endprent(); break; @@ -191,7 +191,7 @@ dump_limits_any_type( struct passwd *u; setpwent(); while ((u = getpwent()) != NULL) - dump_file(fp, u->pw_uid, NULL, type, + dump_file(fp, &d, u->pw_uid, NULL, type, mount->fs_name, 0); endpwent(); break; @@ -335,6 +335,7 @@ report_header( static int report_mount( FILE *fp, + fs_disk_quota_t *d, uint32_t id, char *name, uint32_t *oid, @@ -343,22 +344,21 @@ report_mount( fs_path_t *mount, uint flags) { - fs_disk_quota_t d; time64_t timer; char c[8], h[8], s[8]; uint qflags; int count; - if (!get_quota(&d, id, oid, type, mount->fs_name, flags)) + if (!get_quota(d, id, oid, type, mount->fs_name, flags)) return 0; if (flags & TERSE_FLAG) { count = 0; - if ((form & XFS_BLOCK_QUOTA) && d.d_bcount) + if ((form & XFS_BLOCK_QUOTA) && d->d_bcount) count++; - if ((form & XFS_INODE_QUOTA) && d.d_icount) + if ((form & XFS_INODE_QUOTA) && d->d_icount) count++; - if ((form & XFS_RTBLOCK_QUOTA) && d.d_rtbcount) + if ((form & XFS_RTBLOCK_QUOTA) && d->d_rtbcount) count++; if (!count) return 0; @@ -368,19 +368,19 @@ report_mount( report_header(fp, form, type, mount, flags); if (flags & NO_LOOKUP_FLAG) { - fprintf(fp, "#%-10u", d.d_id); + fprintf(fp, "#%-10u", d->d_id); } else { if (name == NULL) { if (type == XFS_USER_QUOTA) { - struct passwd *u = getpwuid(d.d_id); + struct passwd *u = getpwuid(d->d_id); if (u) name = u->pw_name; } else if (type == XFS_GROUP_QUOTA) { - struct group *g = getgrgid(d.d_id); + struct group *g = getgrgid(d->d_id); if (g) name = g->gr_name; } else if (type == XFS_PROJ_QUOTA) { - fs_project_t *p = getprprid(d.d_id); + fs_project_t *p = getprprid(d->d_id); if (p) name = p->pr_name; } @@ -389,73 +389,73 @@ report_mount( if (name != NULL) fprintf(fp, "%-10s", name); else - fprintf(fp, "#%-9u", d.d_id); + fprintf(fp, "#%-9u", d->d_id); } if (form & XFS_BLOCK_QUOTA) { - timer = decode_timer(&d, d.d_btimer, d.d_btimer_hi); + timer = decode_timer(d, d->d_btimer, d->d_btimer_hi); qflags = (flags & HUMAN_FLAG); - if (d.d_blk_hardlimit && d.d_bcount > d.d_blk_hardlimit) + if (d->d_blk_hardlimit && d->d_bcount > d->d_blk_hardlimit) qflags |= LIMIT_FLAG; - if (d.d_blk_softlimit && d.d_bcount > d.d_blk_softlimit) + if (d->d_blk_softlimit && d->d_bcount > d->d_blk_softlimit) qflags |= QUOTA_FLAG; if (flags & HUMAN_FLAG) fprintf(fp, " %6s %6s %6s %02d %8s", - bbs_to_string(d.d_bcount, c, sizeof(c)), - bbs_to_string(d.d_blk_softlimit, s, sizeof(s)), - bbs_to_string(d.d_blk_hardlimit, h, sizeof(h)), - d.d_bwarns, + bbs_to_string(d->d_bcount, c, sizeof(c)), + bbs_to_string(d->d_blk_softlimit, s, sizeof(s)), + bbs_to_string(d->d_blk_hardlimit, h, sizeof(h)), + d->d_bwarns, time_to_string(timer, qflags)); else fprintf(fp, " %10llu %10llu %10llu %02d %9s", - (unsigned long long)d.d_bcount >> 1, - (unsigned long long)d.d_blk_softlimit >> 1, - (unsigned long long)d.d_blk_hardlimit >> 1, - d.d_bwarns, + (unsigned long long)d->d_bcount >> 1, + (unsigned long long)d->d_blk_softlimit >> 1, + (unsigned long long)d->d_blk_hardlimit >> 1, + d->d_bwarns, time_to_string(timer, qflags)); } if (form & XFS_INODE_QUOTA) { - timer = decode_timer(&d, d.d_itimer, d.d_itimer_hi); + timer = decode_timer(d, d->d_itimer, d->d_itimer_hi); qflags = (flags & HUMAN_FLAG); - if (d.d_ino_hardlimit && d.d_icount > d.d_ino_hardlimit) + if (d->d_ino_hardlimit && d->d_icount > d->d_ino_hardlimit) qflags |= LIMIT_FLAG; - if (d.d_ino_softlimit && d.d_icount > d.d_ino_softlimit) + if (d->d_ino_softlimit && d->d_icount > d->d_ino_softlimit) qflags |= QUOTA_FLAG; if (flags & HUMAN_FLAG) fprintf(fp, " %6s %6s %6s %02d %8s", - num_to_string(d.d_icount, c, sizeof(c)), - num_to_string(d.d_ino_softlimit, s, sizeof(s)), - num_to_string(d.d_ino_hardlimit, h, sizeof(h)), - d.d_iwarns, + num_to_string(d->d_icount, c, sizeof(c)), + num_to_string(d->d_ino_softlimit, s, sizeof(s)), + num_to_string(d->d_ino_hardlimit, h, sizeof(h)), + d->d_iwarns, time_to_string(timer, qflags)); else fprintf(fp, " %10llu %10llu %10llu %02d %9s", - (unsigned long long)d.d_icount, - (unsigned long long)d.d_ino_softlimit, - (unsigned long long)d.d_ino_hardlimit, - d.d_iwarns, + (unsigned long long)d->d_icount, + (unsigned long long)d->d_ino_softlimit, + (unsigned long long)d->d_ino_hardlimit, + d->d_iwarns, time_to_string(timer, qflags)); } if (form & XFS_RTBLOCK_QUOTA) { - timer = decode_timer(&d, d.d_rtbtimer, d.d_rtbtimer_hi); + timer = decode_timer(d, d->d_rtbtimer, d->d_rtbtimer_hi); qflags = (flags & HUMAN_FLAG); - if (d.d_rtb_hardlimit && d.d_rtbcount > d.d_rtb_hardlimit) + if (d->d_rtb_hardlimit && d->d_rtbcount > d->d_rtb_hardlimit) qflags |= LIMIT_FLAG; - if (d.d_rtb_softlimit && d.d_rtbcount > d.d_rtb_softlimit) + if (d->d_rtb_softlimit && d->d_rtbcount > d->d_rtb_softlimit) qflags |= QUOTA_FLAG; if (flags & HUMAN_FLAG) fprintf(fp, " %6s %6s %6s %02d %8s", - bbs_to_string(d.d_rtbcount, c, sizeof(c)), - bbs_to_string(d.d_rtb_softlimit, s, sizeof(s)), - bbs_to_string(d.d_rtb_hardlimit, h, sizeof(h)), - d.d_rtbwarns, + bbs_to_string(d->d_rtbcount, c, sizeof(c)), + bbs_to_string(d->d_rtb_softlimit, s, sizeof(s)), + bbs_to_string(d->d_rtb_hardlimit, h, sizeof(h)), + d->d_rtbwarns, time_to_string(timer, qflags)); else fprintf(fp, " %10llu %10llu %10llu %02d %9s", - (unsigned long long)d.d_rtbcount >> 1, - (unsigned long long)d.d_rtb_softlimit >> 1, - (unsigned long long)d.d_rtb_hardlimit >> 1, - d.d_rtbwarns, + (unsigned long long)d->d_rtbcount >> 1, + (unsigned long long)d->d_rtb_softlimit >> 1, + (unsigned long long)d->d_rtb_hardlimit >> 1, + d->d_rtbwarns, time_to_string(timer, qflags)); } fputc('\n', fp); @@ -472,28 +472,29 @@ report_user_mount( uint flags) { struct passwd *u; + fs_disk_quota_t d; uint id = 0, oid; if (upper) { /* identifier range specified */ for (id = lower; id <= upper; id++) { - if (report_mount(fp, id, NULL, NULL, + if (report_mount(fp, &d, id, NULL, NULL, form, XFS_USER_QUOTA, mount, flags)) flags |= NO_HEADER_FLAG; } - } else if (report_mount(fp, id, NULL, &oid, form, + } else if (report_mount(fp, &d, id, NULL, &oid, form, XFS_USER_QUOTA, mount, flags|GETNEXTQUOTA_FLAG)) { id = oid + 1; flags |= GETNEXTQUOTA_FLAG; flags |= NO_HEADER_FLAG; - while (report_mount(fp, id, NULL, &oid, form, XFS_USER_QUOTA, + while (report_mount(fp, &d, id, NULL, &oid, form, XFS_USER_QUOTA, mount, flags)) { id = oid + 1; } } else { setpwent(); while ((u = getpwent()) != NULL) { - if (report_mount(fp, u->pw_uid, u->pw_name, NULL, + if (report_mount(fp, &d, u->pw_uid, u->pw_name, NULL, form, XFS_USER_QUOTA, mount, flags)) flags |= NO_HEADER_FLAG; } @@ -514,28 +515,29 @@ report_group_mount( uint flags) { struct group *g; + fs_disk_quota_t d; uint id = 0, oid; if (upper) { /* identifier range specified */ for (id = lower; id <= upper; id++) { - if (report_mount(fp, id, NULL, NULL, + if (report_mount(fp, &d, id, NULL, NULL, form, XFS_GROUP_QUOTA, mount, flags)) flags |= NO_HEADER_FLAG; } - } else if (report_mount(fp, id, NULL, &oid, form, + } else if (report_mount(fp, &d, id, NULL, &oid, form, XFS_GROUP_QUOTA, mount, flags|GETNEXTQUOTA_FLAG)) { id = oid + 1; flags |= GETNEXTQUOTA_FLAG; flags |= NO_HEADER_FLAG; - while (report_mount(fp, id, NULL, &oid, form, XFS_GROUP_QUOTA, + while (report_mount(fp, &d, id, NULL, &oid, form, XFS_GROUP_QUOTA, mount, flags)) { id = oid + 1; } } else { setgrent(); while ((g = getgrent()) != NULL) { - if (report_mount(fp, g->gr_gid, g->gr_name, NULL, + if (report_mount(fp, &d, g->gr_gid, g->gr_name, NULL, form, XFS_GROUP_QUOTA, mount, flags)) flags |= NO_HEADER_FLAG; } @@ -555,21 +557,22 @@ report_project_mount( uint flags) { fs_project_t *p; + fs_disk_quota_t d; uint id = 0, oid; if (upper) { /* identifier range specified */ for (id = lower; id <= upper; id++) { - if (report_mount(fp, id, NULL, NULL, + if (report_mount(fp, &d, id, NULL, NULL, form, XFS_PROJ_QUOTA, mount, flags)) flags |= NO_HEADER_FLAG; } - } else if (report_mount(fp, id, NULL, &oid, form, + } else if (report_mount(fp, &d, id, NULL, &oid, form, XFS_PROJ_QUOTA, mount, flags|GETNEXTQUOTA_FLAG)) { id = oid + 1; flags |= GETNEXTQUOTA_FLAG; flags |= NO_HEADER_FLAG; - while (report_mount(fp, id, NULL, &oid, form, XFS_PROJ_QUOTA, + while (report_mount(fp, &d, id, NULL, &oid, form, XFS_PROJ_QUOTA, mount, flags)) { id = oid + 1; } @@ -579,14 +582,14 @@ report_project_mount( * Print default project quota, even if projid 0 * isn't defined */ - if (report_mount(fp, 0, NULL, NULL, + if (report_mount(fp, &d, 0, NULL, NULL, form, XFS_PROJ_QUOTA, mount, flags)) flags |= NO_HEADER_FLAG; } setprent(); while ((p = getprent()) != NULL) { - if (report_mount(fp, p->pr_prid, p->pr_name, NULL, + if (report_mount(fp, &d, p->pr_prid, p->pr_name, NULL, form, XFS_PROJ_QUOTA, mount, flags)) flags |= NO_HEADER_FLAG; } -- 2.27.0