Changeset 00aece0 in mainline for uspace/app/bdsh/cmds/modules/mount/mount.c
- Timestamp:
- 2012-02-18T16:47:38Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4449c6c
- Parents:
- bd5f3b7 (diff), f943dd3 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bdsh/cmds/modules/mount/mount.c
rbd5f3b7 r00aece0 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 }; … … 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) … … 68 114 const char *dev = ""; 69 115 int rc, c, opt_ind; 116 unsigned int instance = 0; 117 bool instance_set = false; 118 char **t_argv; 70 119 71 120 argc = cli_count_args(argv); 72 121 73 122 for (c = 0, optind = 0, opt_ind = 0; c != -1;) { 74 c = getopt_long(argc, argv, " h", long_options, &opt_ind);123 c = getopt_long(argc, argv, "i:h", long_options, &opt_ind); 75 124 switch (c) { 76 125 case 'h': 77 126 help_cmd_mount(HELP_LONG); 78 127 return CMD_SUCCESS; 128 case 'i': 129 instance = (unsigned int) strtol(optarg, NULL, 10); 130 instance_set = true; 131 break; 79 132 } 80 133 } 81 134 82 if ((argc < 3) || (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)) { 83 142 printf("%s: invalid number of arguments. Try `mount --help'\n", 84 143 cmdname); 85 144 return CMD_FAILURE; 86 145 } 146 if (argc == 1) { 147 print_mtab_list(); 148 return CMD_SUCCESS; 149 } 87 150 if (argc > 3) 88 dev = argv[3];151 dev = t_argv[3]; 89 152 if (argc == 5) 90 mopts = argv[4];153 mopts = t_argv[4]; 91 154 92 rc = mount( argv[1], argv[2], dev, mopts, 0);155 rc = mount(t_argv[1], t_argv[2], dev, mopts, 0, instance); 93 156 if (rc != EOK) { 94 157 printf("Unable to mount %s filesystem to %s on %s (rc=%d)\n", 95 argv[1], argv[2],argv[3], rc);158 t_argv[1], t_argv[2], t_argv[3], rc); 96 159 return CMD_FAILURE; 97 160 }
Note:
See TracChangeset
for help on using the changeset viewer.