Changes in uspace/app/bdsh/cmds/modules/mount/mount.c [e6cb880:2e1b9dc] in mainline
- File:
-
- 1 edited
-
uspace/app/bdsh/cmds/modules/mount/mount.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bdsh/cmds/modules/mount/mount.c
re6cb880 r2e1b9dc 27 27 */ 28 28 29 #include <loc.h> 29 30 #include <stdio.h> 30 31 #include <stdlib.h> 31 32 #include <vfs/vfs.h> 33 #include <adt/list.h> 32 34 #include <errno.h> 33 35 #include <getopt.h> 36 #include <inttypes.h> 34 37 #include "config.h" 35 38 #include "util.h" … … 43 46 static struct option const long_options[] = { 44 47 { "help", no_argument, 0, 'h' }, 48 { "instance", required_argument, 0, 'i' }, 45 49 { 0, 0, 0, 0 } 46 50 }; … … 51 55 { 52 56 static char helpfmt[] = 53 "Usage: %s <fstype> <mp> <dev>[<moptions>]\n";57 "Usage: %s <fstype> <mp> [dev] [<moptions>]\n"; 54 58 if (level == HELP_SHORT) { 55 59 printf("'%s' mounts a file system.\n", cmdname); … … 61 65 } 62 66 67 static void print_mtab_list(void) 68 { 69 LIST_INITIALIZE(mtab_list); 70 mtab_ent_t *old_ent = NULL; 71 char *svc_name; 72 int rc; 73 74 get_mtab_list(&mtab_list); 75 76 list_foreach(mtab_list, cur) { 77 mtab_ent_t *mtab_ent = list_get_instance(cur, mtab_ent_t, 78 link); 79 80 if (old_ent) 81 free(old_ent); 82 83 old_ent = mtab_ent; 84 85 printf("%s", mtab_ent->fs_name); 86 if (mtab_ent->instance) 87 printf("/%d", mtab_ent->instance); 88 89 printf(" %s", mtab_ent->mp); 90 91 rc = loc_service_get_name(mtab_ent->service_id, &svc_name); 92 if (rc == EOK) { 93 printf(" %s", svc_name); 94 free(svc_name); 95 } else { 96 printf(" (%" PRIun ")", mtab_ent->service_id); 97 } 98 99 if (str_size(mtab_ent->opts) > 0) 100 printf(" (%s)", mtab_ent->opts); 101 102 putchar('\n'); 103 } 104 105 if (old_ent) 106 free(old_ent); 107 } 108 63 109 /* Main entry point for mount, accepts an array of arguments */ 64 110 int cmd_mount(char **argv) … … 66 112 unsigned int argc; 67 113 const char *mopts = ""; 114 const char *dev = ""; 68 115 int rc, c, opt_ind; 116 unsigned int instance = 0; 117 bool instance_set = false; 118 char **t_argv; 69 119 70 120 argc = cli_count_args(argv); 71 121 72 122 for (c = 0, optind = 0, opt_ind = 0; c != -1;) { 73 c = getopt_long(argc, argv, " h", long_options, &opt_ind);123 c = getopt_long(argc, argv, "i:h", long_options, &opt_ind); 74 124 switch (c) { 75 125 case 'h': 76 126 help_cmd_mount(HELP_LONG); 77 127 return CMD_SUCCESS; 128 case 'i': 129 instance = (unsigned int) strtol(optarg, NULL, 10); 130 instance_set = true; 131 break; 78 132 } 79 133 } 80 134 81 if ((argc < 4) || (argc > 5)) { 135 if (instance_set) { 136 argc -= 2; 137 t_argv = &argv[2]; 138 } else 139 t_argv = &argv[0]; 140 141 if ((argc == 2) || (argc > 5)) { 82 142 printf("%s: invalid number of arguments. Try `mount --help'\n", 83 143 cmdname); 84 144 return CMD_FAILURE; 85 145 } 146 if (argc == 1) { 147 print_mtab_list(); 148 return CMD_SUCCESS; 149 } 150 if (argc > 3) 151 dev = t_argv[3]; 86 152 if (argc == 5) 87 mopts = argv[4];153 mopts = t_argv[4]; 88 154 89 rc = mount( argv[1], argv[2], argv[3], mopts, 0);155 rc = mount(t_argv[1], t_argv[2], dev, mopts, 0, instance); 90 156 if (rc != EOK) { 91 157 printf("Unable to mount %s filesystem to %s on %s (rc=%d)\n", 92 argv[1], argv[2],argv[3], rc);158 t_argv[1], t_argv[2], t_argv[3], rc); 93 159 return CMD_FAILURE; 94 160 }
Note:
See TracChangeset
for help on using the changeset viewer.
