if (dflag + lflag + rflag == 0)
aflag = 1;
- fs_table_initialise();
+ fs_table_initialise(0, NULL, 0, NULL);
fs = fs_table_lookup(argv[optind], FS_MOUNT_POINT);
if (!fs) {
fprintf(stderr, _("%s: %s is not a mounted XFS filesystem\n"),
extern fs_path_t *fs_path; /* current entry in the fs table */
extern char *mtab_file;
-extern void fs_table_initialise(void);
+extern void fs_table_initialise(int, char *[], int, char *[]);
extern void fs_table_destroy(void);
-extern void fs_table_insert_mount(char *__mount);
-extern void fs_table_insert_project(char *__project);
extern void fs_table_insert_project_path(char *__dir, uint __projid);
if (!tab_init) {
tab_init = 1;
- fs_table_initialise();
+ fs_table_initialise(0, NULL, 0, NULL);
}
fs = fs_table_lookup(file->name, FS_MOUNT_POINT);
if (!fs) {
return fs;
}
-void
+static void
fs_table_insert_mount(
char *mount)
{
return error;
}
-void
+static void
fs_table_insert_project(
char *project)
{
}
}
+/*
+ * Initialize fs_table to contain the given set of mount points and
+ * projects. If mount_count is zero, mounts is ignored and the
+ * table is populated with mounted filesystems. If project_count is
+ * zero, projects is ignored and the table is populated with all
+ * projects defined in the projects file.
+ */
void
-fs_table_initialise(void)
+fs_table_initialise(
+ int mount_count,
+ char *mounts[],
+ int project_count,
+ char *projects[])
{
- int error;
+ int error;
+ int i;
- error = fs_table_initialise_mounts(NULL);
- if (!error)
+ if (mount_count) {
+ for (i = 0; i < mount_count; i++)
+ fs_table_insert_mount(mounts[i]);
+ } else {
+ error = fs_table_initialise_mounts(NULL);
+ if (error)
+ goto out_exit;
+ }
+ if (project_count) {
+ for (i = 0; i < project_count; i++)
+ fs_table_insert_project(projects[i]);
+ } else {
error = fs_table_initialise_projects(NULL);
- if (error) {
- fs_table_destroy();
- fprintf(stderr, _("%s: cannot initialise path table: %s\n"),
- progname, strerror(error));
- exit(1);
+ if (error)
+ goto out_exit;
}
+
+ return;
+
+out_exit:
+ fs_table_destroy();
+ fprintf(stderr, _("%s: cannot initialise path table: %s\n"),
+ progname, strerror(error));
+ exit(1);
}
void
}
}
- if (optind == argc) {
- fs_table_initialise();
- } else {
- while (optind < argc)
- fs_table_insert_mount(argv[optind++]);
- if (!nprojopts)
- fs_table_insert_project(NULL);
- else
- for (c = 0; c < nprojopts; c++)
- fs_table_insert_project(projopts[c]);
- }
- if (projopts)
- free(projopts);
+ fs_table_initialise(argc - optind, &argv[optind], nprojopts, projopts);
+ free(projopts);
init_commands();
add_args_command(init_args_command);