summaryrefslogtreecommitdiffstats
path: root/cpukit/libmisc/shell/main_mount.c
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2007-12-17 00:12:01 +0000
committerChris Johns <chrisj@rtems.org>2007-12-17 00:12:01 +0000
commit2eeb648c35eef0a378470f3cca523963978ffd09 (patch)
tree1c9ad13fdbf0117c6c953979da82cad8daf48d76 /cpukit/libmisc/shell/main_mount.c
parent2007-12-16 Ralf Corsépius <ralf.corsepius@rtems.org> (diff)
downloadrtems-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.c155
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 */
+};