diff options
Diffstat (limited to 'cpukit/libmisc/shell/main_mount.c')
-rw-r--r-- | cpukit/libmisc/shell/main_mount.c | 149 |
1 files changed, 44 insertions, 105 deletions
diff --git a/cpukit/libmisc/shell/main_mount.c b/cpukit/libmisc/shell/main_mount.c index 0fe569cc5b..8062001d6a 100644 --- a/cpukit/libmisc/shell/main_mount.c +++ b/cpukit/libmisc/shell/main_mount.c @@ -24,74 +24,24 @@ #include <rtems.h> #include <rtems/shell.h> #include <rtems/shellconfig.h> -#include <rtems/dosfs.h> -#include <rtems/fsmount.h> +#include <rtems/libio.h> #include "internal.h" -static rtems_chain_control filesystems; -static bool fs_init; - -static void rtems_shell_mount_fsys_init(void) -{ - if (!fs_init) - { - rtems_chain_initialize_empty (&filesystems); - fs_init = true; - } -} - -void rtems_shell_mount_add_fsys(rtems_shell_filesystems_t* fs) -{ - rtems_shell_mount_fsys_init(); - rtems_chain_append (&filesystems, &fs->link); -} - -void rtems_shell_mount_del_fsys(rtems_shell_filesystems_t* fs) -{ - if (fs_init) - rtems_chain_extract (&fs->link); -} - -int rtems_shell_libc_mounter( - const char* driver, - const char* path, - rtems_shell_filesystems_t* fs, - rtems_filesystem_options_t options) -{ - rtems_filesystem_mount_table_entry_t* mt_entry; - /* - * Mount the disk. - */ - - if (mount (&mt_entry, fs->fs_ops, options, (char*) driver, (char*) path) < 0) - { - fprintf (stderr, "mount: mount failed: %s\n", strerror (errno)); - return 1; - } - - return 0; -} - -#define NUMOF(_i) (sizeof (_i) / sizeof (_i[0])) - int rtems_shell_main_mount( int argc, char *argv[] ) { rtems_filesystem_options_t options = RTEMS_FILESYSTEM_READ_WRITE; - rtems_shell_filesystems_t* fs = NULL; - char* driver = NULL; - char* mount_point = NULL; + char* type = NULL; + char* source = NULL; + char* target = NULL; + char* fsoptions = NULL; int arg; - rtems_shell_mount_fsys_init(); - for (arg = 1; arg < argc; arg++) { if (argv[arg][0] == '-') { if (argv[arg][1] == 't') { - rtems_shell_filesystems_t** a; - arg++; if (arg == argc) { fprintf( @@ -101,71 +51,58 @@ int rtems_shell_main_mount( ); return 1; } - - for (a = rtems_shell_Mount_filesystems; *a; a++) { - if (strcmp (argv[arg], (*a)->name) == 0) { - fs = *a; - break; - } - } - - if (!fs && !rtems_chain_is_empty(&filesystems)) { - rtems_chain_node* node = filesystems.first; - while (!rtems_chain_is_tail (&filesystems, node)) { - rtems_shell_filesystems_t* f = (rtems_shell_filesystems_t*)node; - if (strcmp (argv[arg], f->name) == 0) { - fs = f; - break; - } - node = node->next; - } - } + type = argv[arg]; } else if (argv[arg][1] == 'r') { options = RTEMS_FILESYSTEM_READ_ONLY; } else if (argv[arg][1] == 'L') { - rtems_shell_filesystems_t** a; - fprintf (stderr, "File systems: "); - for (a = rtems_shell_Mount_filesystems; *a; a++) - if (*a) - fprintf (stderr, "%s ", (*a)->name); - if (!rtems_chain_is_empty(&filesystems)) { - rtems_chain_node* node = filesystems.first; - while (!rtems_chain_is_tail (&filesystems, node)) { - rtems_shell_filesystems_t* f = (rtems_shell_filesystems_t*)node; - fprintf (stderr, "%s ", f->name); - node = node->next; - } + const rtems_filesystem_table_t* fs; + fs = rtems_filesystem_table_first(); + printf ("File systems: "); + while (fs) { + printf ("%s ", fs->type); + fs = rtems_filesystem_table_next(fs); } - fprintf (stderr, "\n"); - return 1; + printf ("\n"); + return 0; + } else if (argv[arg][1] == 'o') { + arg++; + if (arg == argc) { + fprintf( + stderr, + "%s: -o needs a list if filesystem options.\n", + argv[0] + ); + return 1; + } + fsoptions = argv[arg]; } else { fprintf (stderr, "unknown option: %s\n", argv[arg]); return 1; } } else { - if (!driver) - driver = argv[arg]; - else if (!mount_point) - mount_point = argv[arg]; + if (!source) + source = argv[arg]; + else if (!target) + target = argv[arg]; else { fprintf ( - stderr, "mount: driver and mount only require: %s\n", argv[arg]); + stderr, "mount: source and mount only require: %s\n", argv[arg]); return 1; } } } - if (fs == NULL) { + if (!type) { fprintf (stderr, "mount: no file-system; see the -L option\n"); return 1; } - if (fs->driver_needed && !driver) { - fprintf (stderr, "mount: no driver\n"); + if (!source) { + fprintf (stderr, "mount: no source\n"); return 1; } - if (!mount_point) { + if (!target) { fprintf (stderr, "mount: no mount point\n"); return 1; } @@ -174,19 +111,21 @@ int rtems_shell_main_mount( * Mount the disk. */ - if (fs->mounter (driver, mount_point, fs, options)) + if (mount (source, target, type, options, fsoptions) < 0) { + fprintf (stderr, "error: %s\n", strerror(errno)); return 1; + } - printf ("mounted %s -> %s\n", driver, mount_point); + printf ("mounted %s -> %s\n", source, target); return 0; } rtems_shell_cmd_t rtems_shell_MOUNT_Command = { - "mount", /* name */ - "mount [-t fstype] [-r] [-L] device path # mount disk", /* usage */ - "files", /* topic */ - rtems_shell_main_mount, /* command */ - NULL, /* alias */ - NULL /* next */ + "mount", /* name */ + "mount [-t type] [-r] [-L] source target", /* usage */ + "files", /* topic */ + rtems_shell_main_mount, /* command */ + NULL, /* alias */ + NULL /* next */ }; |