static void remove_extents( char *dir, uint type, uint flags) { fs_path_t *mount; mount = fs_table_lookup(dir, FS_MOUNT_POINT); if (!mount) { exitcode = 1; fprintf(stderr, "%s: unknown mount point %s\n", progname, dir); return; } dir = mount->fs_name; if (type & XFS_USER_QUOTA) { if (remove_qtype_extents(dir, XFS_USER_QUOTA) < 0) return; } if (type & XFS_GROUP_QUOTA) { if (remove_qtype_extents(dir, XFS_GROUP_QUOTA) < 0) return; } else if (type & XFS_PROJ_QUOTA) { if (remove_qtype_extents(dir, XFS_PROJ_QUOTA) < 0) return; } if (flags & VERBOSE_FLAG) state_quotafile_mount(stdout, type, mount, flags); }
static void dump_limits_any_type( FILE *fp, uint type, char *dir, uint lower, uint upper) { fs_path_t *mount; uint id; if ((mount = fs_table_lookup(dir, FS_MOUNT_POINT)) == NULL) { exitcode = 1; fprintf(stderr, "%s: cannot find mount point %s\n", progname, dir); return; } if (upper) { for (id = lower; id <= upper; id++) dump_file(fp, id, type, mount->fs_name); return; } switch (type) { case XFS_GROUP_QUOTA: { struct group *g; setgrent(); while ((g = getgrent()) != NULL) dump_file(fp, g->gr_gid, type, mount->fs_name); endgrent(); break; } case XFS_PROJ_QUOTA: { struct fs_project *p; setprent(); while ((p = getprent()) != NULL) dump_file(fp, p->pr_prid, type, mount->fs_name); endprent(); break; } case XFS_USER_QUOTA: { struct passwd *u; setpwent(); while ((u = getpwent()) != NULL) dump_file(fp, u->pw_uid, type, mount->fs_name); endpwent(); break; } } }
int parent_f(int argc, char **argv) { int c; int listpath_flag = 0; int check_flag = 0; fs_path_t *fs; static int tab_init; if (!tab_init) { tab_init = 1; fs_table_initialise(0, NULL, 0, NULL); } fs = fs_table_lookup(file->name, FS_MOUNT_POINT); if (!fs) { fprintf(stderr, _("file argument, \"%s\", is not in a mounted XFS filesystem\n"), file->name); return 1; } mntpt = fs->fs_dir; verbose_flag = 0; while ((c = getopt(argc, argv, "cpv")) != EOF) { switch (c) { case 'c': check_flag = 1; break; case 'p': listpath_flag = 1; break; case 'v': verbose_flag++; break; default: return command_usage(&parent_cmd); } } if (!check_flag && !listpath_flag) /* default case */ exitcode = parent_list(listpath_flag); else { if (listpath_flag) exitcode = parent_list(listpath_flag); if (check_flag) exitcode = parent_check(); } return 0; }
/* * Initialize an fs_table cursor. If a directory path is supplied, * the cursor is set up to appear as though the table contains only * a single entry which represents the directory specified. * Otherwise it is set up to prepare for visiting all entries in the * global table, starting with the first. "flags" can be either * FS_MOUNT_POINT or FS_PROJECT_PATH to limit what type of entries * will be selected by fs_cursor_next_entry(). 0 can be used as a * wild card (selecting either type). */ void fs_cursor_initialise( char *dir, uint flags, fs_cursor_t *cur) { fs_path_t *path; memset(cur, 0, sizeof(*cur)); if (dir) { if ((path = fs_table_lookup(dir, flags)) == NULL) return; cur->local = *path; cur->count = 1; cur->table = &cur->local; } else { cur->count = fs_count; cur->table = fs_table; } cur->flags = flags; }
static void quotaoff( char *dir, uint type, uint qflags, uint flags) { fs_path_t *mount; mount = fs_table_lookup(dir, FS_MOUNT_POINT); if (!mount) { exitcode = 1; fprintf(stderr, "%s: unknown mount point %s\n", progname, dir); return; } dir = mount->fs_name; if (xfsquotactl(XFS_QUOTAOFF, dir, type, 0, (void *)&qflags) < 0) perror("XFS_QUOTAOFF"); else if (flags & VERBOSE_FLAG) state_quotafile_mount(stdout, type, mount, flags); }