diff options
author | Chris Johns <chrisj@rtems.org> | 2010-05-31 13:56:37 +0000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2010-05-31 13:56:37 +0000 |
commit | 29e92b090c8bc35745aa5c89231ce806bcb11e57 (patch) | |
tree | a253c33b1654609acfbd5216797976dce3b0748f /cpukit/libmisc/shell | |
parent | 2010-05-31 Joel Sherrill <joel.sherrilL@OARcorp.com> (diff) | |
download | rtems-29e92b090c8bc35745aa5c89231ce806bcb11e57.tar.bz2 |
2010-05-31 Chris Johns <chrisj@rtems.org>
* libcsupport/Makefile.am: Add mount-mgr.c.
* libcsupport/src/mount-mgr.c: New.
* include/rtems/fs.h: Added rtems_filesystem_location_mount.
* libcsupport/include/rtems/libio.h, libcsupport/src/mount.c: New
mount interface. It is similar to Linux.
* libcsupport/include/rtems/libio_.h: Remove the
init_fs_mount_table call.
* libcsupport/src/base_fs.c: Remove init_fs_mount_table_call. Use
the new mount call. Remove setting the root node in the global
pathloc. Mount does this now.
* libcsupport/src/privateenv.c: Remove the hack to set the root
mount table entry in the environment.
* libcsupport/src/unmount.cL Free the target string.
* libblock/src/bdpart-mount.c: New mount API.
* libfs/src/devfs/devfs.h, libfs/src/devfs/devfs_init.c,
libfs/src/dosfs/dosfs.h, libfs/src/dosfs/msdos.h,
libfs/src/dosfs/msdos_init.c, libfs/src/imfs/imfs.h,
libfs/src/imfs/imfs_eval.c, libfs/src/imfs/imfs_init.c,
libfs/src/imfs/miniimfs_init.c,
libfs/src/nfsclient/src/librtemsNfs.h,
libfs/src/rfs/rtems-rfs-rtems.c, libfs/src/rfs/rtems-rfs.h,
libnetworking/lib/ftpfs.c, libnetworking/rtems/ftpfs.h,
libnetworking/rtems/tftp.h: New mount_h API.
* libfs/src/devfs/devfs_eval.c: Local include of extern ops.
* libfs/src/nfsclient/src/nfs.c: New mount API. Removed the mount
me call and fixed the initialisation to happen when mounting.
* libmisc/Makefile.am, libmisc/shell/shellconfig.h: Remove mount
filesystem files.
* libmisc/fsmount/fsmount.c, libmisc/fsmount/fsmount.h: Updated to
the new mount table values.
* libmisc/shell/main_mount_ftp.c,
libmisc/shell/main_mount_msdos.c, libmisc/shell/main_mount_rfs.c,
libmisc/shell/main_mount_tftp.c: Removed.
* libmisc/shell/main_mount.c: Use the new mount API. Also access
the file system table for the file system types.
* libnetworking/lib/tftpDriver.c: Updated to the new mount
API. Fixed to allow mounting from any mount point. Also can now
have more than file system mounted.
* sapi/include/confdefs.h: Add file system configuration support.
Diffstat (limited to 'cpukit/libmisc/shell')
-rw-r--r-- | cpukit/libmisc/shell/main_mount.c | 149 | ||||
-rw-r--r-- | cpukit/libmisc/shell/main_mount_ftp.c | 37 | ||||
-rw-r--r-- | cpukit/libmisc/shell/main_mount_msdos.c | 35 | ||||
-rw-r--r-- | cpukit/libmisc/shell/main_mount_rfs.c | 36 | ||||
-rw-r--r-- | cpukit/libmisc/shell/main_mount_tftp.c | 37 | ||||
-rw-r--r-- | cpukit/libmisc/shell/shellconfig.h | 39 |
6 files changed, 44 insertions, 289 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 */ }; diff --git a/cpukit/libmisc/shell/main_mount_ftp.c b/cpukit/libmisc/shell/main_mount_ftp.c deleted file mode 100644 index 2712812fc0..0000000000 --- a/cpukit/libmisc/shell/main_mount_ftp.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Shell Command Implmentation - * - * Author: Fernando RUIZ CASAS - * Work: fernando.ruiz@ctv.es - * Home: correo@fernando-ruiz.com - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - * - * $Id$ - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <errno.h> - -#include <rtems.h> -#include <rtems/shell.h> -#include <rtems/dosfs.h> -#include <rtems/fsmount.h> -#include "internal.h" - -#include <rtems/ftpfs.h> - -rtems_shell_filesystems_t rtems_shell_Mount_FTP = { - name: "ftp", - driver_needed: 1, - fs_ops: &rtems_ftpfs_ops, - mounter: rtems_shell_libc_mounter -}; diff --git a/cpukit/libmisc/shell/main_mount_msdos.c b/cpukit/libmisc/shell/main_mount_msdos.c deleted file mode 100644 index 67c87d984a..0000000000 --- a/cpukit/libmisc/shell/main_mount_msdos.c +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Shell Command Implmentation - * - * Author: Fernando RUIZ CASAS - * Work: fernando.ruiz@ctv.es - * Home: correo@fernando-ruiz.com - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - * - * $Id$ - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <errno.h> - -#include <rtems.h> -#include <rtems/shell.h> -#include <rtems/dosfs.h> -#include <rtems/fsmount.h> -#include "internal.h" - -rtems_shell_filesystems_t rtems_shell_Mount_MSDOS = { - name: "msdos", - driver_needed: 1, - fs_ops: &msdos_ops, - mounter: rtems_shell_libc_mounter -}; diff --git a/cpukit/libmisc/shell/main_mount_rfs.c b/cpukit/libmisc/shell/main_mount_rfs.c deleted file mode 100644 index 674556afce..0000000000 --- a/cpukit/libmisc/shell/main_mount_rfs.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Shell Command Implmentation - * - * Author: Fernando RUIZ CASAS - * Work: fernando.ruiz@ctv.es - * Home: correo@fernando-ruiz.com - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - * - * $Id$ - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <errno.h> - -#include <rtems.h> -#include <rtems/shell.h> -#include <rtems/rtems-rfs.h> -#include <rtems/fsmount.h> -#include "internal.h" - -rtems_shell_filesystems_t rtems_shell_Mount_RFS = { - name: "rfs", - driver_needed: 1, - fs_ops: &rtems_rfs_ops, - mounter: rtems_shell_libc_mounter -}; - diff --git a/cpukit/libmisc/shell/main_mount_tftp.c b/cpukit/libmisc/shell/main_mount_tftp.c deleted file mode 100644 index 1efeb7b229..0000000000 --- a/cpukit/libmisc/shell/main_mount_tftp.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Shell Command Implmentation - * - * Author: Fernando RUIZ CASAS - * Work: fernando.ruiz@ctv.es - * Home: correo@fernando-ruiz.com - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - * - * $Id$ - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <errno.h> - -#include <rtems.h> -#include <rtems/shell.h> -#include <rtems/fsmount.h> -#include "internal.h" - -#include <rtems/ftpfs.h> -#include <rtems/tftp.h> - -rtems_shell_filesystems_t rtems_shell_Mount_TFTP = { - name: "tftp", - driver_needed: 0, - fs_ops: &rtems_tftp_ops, - mounter: rtems_shell_libc_mounter -}; diff --git a/cpukit/libmisc/shell/shellconfig.h b/cpukit/libmisc/shell/shellconfig.h index 65428ea164..cfc475095e 100644 --- a/cpukit/libmisc/shell/shellconfig.h +++ b/cpukit/libmisc/shell/shellconfig.h @@ -92,17 +92,6 @@ extern rtems_shell_alias_t rtems_shell_EXIT_Alias; extern rtems_shell_alias_t *rtems_shell_Initial_aliases[]; /* - * Externs for mount command helpers - */ -extern rtems_shell_filesystems_t rtems_shell_Mount_RFS; -extern rtems_shell_filesystems_t rtems_shell_Mount_MSDOS; -extern rtems_shell_filesystems_t rtems_shell_Mount_TFTP; -extern rtems_shell_filesystems_t rtems_shell_Mount_FTP; -extern rtems_shell_filesystems_t rtems_shell_Mount_NFS; - -extern rtems_shell_filesystems_t *rtems_shell_Mount_filesystems[]; - -/* * If we are configured to alias a command, then make sure the underlying * command is configured. */ @@ -444,34 +433,6 @@ extern rtems_shell_filesystems_t *rtems_shell_Mount_filesystems[]; NULL }; - /* - * The mount command's support file system types. - */ - #if (defined(CONFIGURE_SHELL_COMMANDS_ALL) && \ - !defined(CONFIGURE_SHELL_COMMAND_NO_MOUNT)) || \ - defined(CONFIGURE_SHELL_COMMAND_MOUNT) - rtems_shell_filesystems_t *rtems_shell_Mount_filesystems[] = { - #if defined(CONFIGURE_SHELL_MOUNT_RFS) - &rtems_shell_Mount_RFS, - #endif - #if defined(CONFIGURE_SHELL_MOUNT_MSDOS) - &rtems_shell_Mount_MSDOS, - #endif - #if RTEMS_NETWORKING - #if defined(CONFIGURE_SHELL_MOUNT_TFTP) - &rtems_shell_Mount_TFTP, - #endif - #if defined(CONFIGURE_SHELL_MOUNT_FTP) - &rtems_shell_Mount_FTP, - #endif - #if defined(CONFIGURE_SHELL_MOUNT_NFS) - &rtems_shell_Mount_NFS, - #endif - #endif - NULL - }; - #endif - #endif #endif |