} fs_path_t;
extern int fs_count; /* number of entries in fs table */
+extern int xfs_fs_count; /* number of xfs entries in fs table */
extern fs_path_t *fs_table; /* array of entries in fs table */
extern fs_path_t *fs_path; /* current entry in the fs table */
extern char *mtab_file;
extern char *progname;
int fs_count;
+int xfs_fs_count;
struct fs_path *fs_table;
struct fs_path *fs_path;
goto out_norealloc;
fs_table = tmp_fs_table;
- fs_path = &fs_table[fs_count];
+ /* Put foreign filesystems at the end, xfs filesystems at the front */
+ if (flags & FS_FOREIGN || fs_count == 0) {
+ fs_path = &fs_table[fs_count];
+ } else {
+ /* move foreign fs entries down, insert new one just before */
+ memmove(&fs_table[xfs_fs_count + 1], &fs_table[xfs_fs_count],
+ sizeof(fs_path_t)*(fs_count - xfs_fs_count));
+ fs_path = &fs_table[xfs_fs_count];
+ xfs_fs_count++;
+ }
fs_path->fs_dir = dir;
fs_path->fs_prid = prid;
fs_path->fs_flags = flags;
pathlist_f(void)
{
int i;
+ struct fs_path *path;
- for (i = 0; i < fs_count; i++)
- printpath(&fs_table[i], i, 1, &fs_table[i] == fs_path);
+ for (i = 0; i < fs_count; i++) {
+ path = &fs_table[i];
+ /* Table is ordered xfs first, then foreign */
+ if (path->fs_flags & FS_FOREIGN && !foreign_allowed)
+ break;
+ printpath(path, i, 1, path == fs_path);
+ }
return 0;
}
char **argv)
{
int i;
+ struct fs_path *path;
- for (i = 0; i < fs_count; i++)
- printpath(&fs_table[i], i, 0, 0);
+ for (i = 0; i < fs_count; i++) {
+ path = &fs_table[i];
+ if (path->fs_flags & FS_FOREIGN && !foreign_allowed)
+ break;
+ printpath(path, i, 0, 0);
+ }
return 0;
}
char **argv)
{
int i;
+ int max = foreign_allowed ? fs_count : xfs_fs_count;
if (fs_count == 0) {
printf(_("No paths are available\n"));
return pathlist_f();
i = atoi(argv[1]);
- if (i < 0 || i >= fs_count) {
+ if (i < 0 || i >= max) {
printf(_("value %d is out of range (0-%d)\n"),
- i, fs_count-1);
+ i, max - 1);
} else {
fs_path = &fs_table[i];
pathlist_f();