diff options
author | Chris Johns <chrisj@rtems.org> | 2007-12-17 00:12:01 +0000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2007-12-17 00:12:01 +0000 |
commit | 2eeb648c35eef0a378470f3cca523963978ffd09 (patch) | |
tree | 1c9ad13fdbf0117c6c953979da82cad8daf48d76 /cpukit/libmisc/shell/main_mount.c | |
parent | 2007-12-16 Ralf Corsépius <ralf.corsepius@rtems.org> (diff) | |
download | rtems-2eeb648c35eef0a378470f3cca523963978ffd09.tar.bz2 |
2007-12-17 Chris Johns <chrisj@rtems.org>
* libnetworking/rtems/tftp.h: Provide a decl to the TFTP file
system opts table.
* libnetworking/rtems/ftpfs.h: Provide a decl to the FTP file
system opts table.
* libmisc/Makefile.am: Add the mount command and supporting files.
* libmisc/preinstall.am: Rebuilt.
* libmisc/shell/cat_file.c, libmisc/shell/cmds.c,
libmisc/shell/main_alias.c, libmisc/shell/main_cat.c,
libmisc/shell/main_cd.c, libmisc/shell/main_chdir.c,
libmisc/shell/main_chmod.c, libmisc/shell/main_chroot.c,
libmisc/shell/main_cpuuse.c, libmisc/shell/main_date.c,
libmisc/shell/main_dir.c, libmisc/shell/main_exit.c,
libmisc/shell/main_help.c, libmisc/shell/main_id.c,
libmisc/shell/main_logoff.c, libmisc/shell/main_ls.c,
libmisc/shell/main_mallocdump.c, libmisc/shell/main_mdump.c,
libmisc/shell/main_medit.c, libmisc/shell/main_mfill.c,
libmisc/shell/main_mkdir.c, libmisc/shell/main_mmove.c,
libmisc/shell/main_mwdump.c, libmisc/shell/main_pwd.c,
libmisc/shell/main_rm.c, libmisc/shell/main_rmdir.c,
libmisc/shell/main_stackuse.c, libmisc/shell/main_tty.c,
libmisc/shell/main_umask.c, libmisc/shell/main_whoami.c,
libmisc/shell/shell.c, libmisc/shell/shell_cmdset.c,
libmisc/shell/shell_makeargs.c, libmisc/shell/str2int.c,
libmisc/shell/write_file.c: Move all shell_* types, variables and
functions to rtems_shell_* to avoid namespace clashes with
applications. The is an RTEMS shell after all.
* libmisc/shell/shell.h, libmisc/shell/internal.h,
libmisc/shell/shellconfig.h: Move all shell_* types, variables and
functions to rtems_shell_* to avoid namespace clashes with
applications. Add the mount command supporting types.
* libmisc/shell/main_mount.c, libmisc/shell/main_mount_ftp.c,
libmisc/shell/main_mount_msdos.c, libmisc/shell/main_mount_nfs.c,
libmisc/shell/main_mount_tftp.c: New.
Diffstat (limited to 'cpukit/libmisc/shell/main_mount.c')
-rw-r--r-- | cpukit/libmisc/shell/main_mount.c | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/cpukit/libmisc/shell/main_mount.c b/cpukit/libmisc/shell/main_mount.c new file mode 100644 index 0000000000..05cfdffd6b --- /dev/null +++ b/cpukit/libmisc/shell/main_mount.c @@ -0,0 +1,155 @@ +/* + * 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/shellconfig.h> +#include <rtems/dosfs.h> +#include <rtems/fsmount.h> +#include "internal.h" + +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) + { + printf ("error: 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; + int arg; + + 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 (stdout, "error: -t needs a type of file-system;; see -L.\n"); + return 1; + } + + for (a = rtems_Shell_Mount_filesystems; *a; a++) + { + if (strcmp (argv[arg], (*a)->name) == 0) + { + fs = *a; + break; + } + } + } + else if (argv[arg][1] == 'r') + { + options = RTEMS_FILESYSTEM_READ_ONLY; + } + else if (argv[arg][1] == 'L') + { + rtems_shell_filesystems_t** a; + fprintf (stdout, "File systems: "); + for (a = rtems_Shell_Mount_filesystems; *a; a++) + if (*a) + fprintf (stdout, "%s ", (*a)->name); + fprintf (stdout, "\n"); + return 1; + } + else + { + fprintf (stdout, "unknown option: %s\n", argv[arg]); + return 1; + } + } + else + { + if (!driver) + driver = argv[arg]; + else if (!mount_point) + mount_point = argv[arg]; + else + { + printf ("error: driver and mount only require: %s\n", argv[arg]); + return 1; + } + } + } + + if (fs == NULL) + { + fprintf (stdout, "error: no file-system; see the -L option\n"); + return 1; + } + + if (fs->driver_needed && !driver) + { + fprintf (stdout, "error: no driver\n"); + return 1; + } + + if (!mount_point) + { + printf ("error: no mount point\n"); + return 1; + } + + /* + * Mount the disk. + */ + + if (fs->mounter (driver, mount_point, fs, options)) + return 1; + + printf ("mounted %s -> %s\n", driver, mount_point); + + 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 */ +}; |