Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/bdsh/cmds/modules/mount/mount.c

    re6cb880 r41047bf  
    3030#include <stdlib.h>
    3131#include <vfs/vfs.h>
     32#include <adt/list.h>
    3233#include <errno.h>
    3334#include <getopt.h>
     35#include <inttypes.h>
    3436#include "config.h"
    3537#include "util.h"
     
    4345static struct option const long_options[] = {
    4446        { "help", no_argument, 0, 'h' },
     47        { "instance", required_argument, 0, 'i' },
    4548        { 0, 0, 0, 0 }
    4649};
     
    5154{
    5255        static char helpfmt[] =
    53             "Usage:  %s <fstype> <mp> <dev> [<moptions>]\n";
     56            "Usage:  %s <fstype> <mp> [dev] [<moptions>]\n";
    5457        if (level == HELP_SHORT) {
    5558                printf("'%s' mounts a file system.\n", cmdname);
     
    6164}
    6265
     66static void print_mtab_list(void)
     67{
     68        LIST_INITIALIZE(mtab_list);
     69        get_mtab_list(&mtab_list);
     70
     71        mtab_ent_t *old_ent = NULL;
     72
     73        list_foreach(mtab_list, cur) {
     74                mtab_ent_t *mtab_ent = list_get_instance(cur, mtab_ent_t,
     75                    link);
     76
     77                if (old_ent)
     78                        free(old_ent);
     79
     80                old_ent = mtab_ent;
     81
     82                printf("%s", mtab_ent->fs_name);
     83                if (mtab_ent->instance)
     84                        printf("/%d", mtab_ent->instance);
     85                printf(" on %s ", mtab_ent->mp);
     86
     87                if (str_size(mtab_ent->opts) > 0)
     88                        printf("opts=%s ", mtab_ent->opts);
     89
     90                printf("(service=%" PRIun ")\n", mtab_ent->service_id);
     91        }
     92
     93        if (old_ent)
     94                free(old_ent);
     95}
     96
    6397/* Main entry point for mount, accepts an array of arguments */
    6498int cmd_mount(char **argv)
     
    66100        unsigned int argc;
    67101        const char *mopts = "";
     102        const char *dev = "";
    68103        int rc, c, opt_ind;
     104        unsigned int instance = 0;
     105        bool instance_set = false;
     106        char **t_argv;
    69107
    70108        argc = cli_count_args(argv);
    71109
    72110        for (c = 0, optind = 0, opt_ind = 0; c != -1;) {
    73                 c = getopt_long(argc, argv, "h", long_options, &opt_ind);
     111                c = getopt_long(argc, argv, "i:h", long_options, &opt_ind);
    74112                switch (c) {
    75113                case 'h':
    76114                        help_cmd_mount(HELP_LONG);
    77115                        return CMD_SUCCESS;
     116                case 'i':
     117                        instance = (unsigned int) strtol(optarg, NULL, 10);
     118                        instance_set = true;
     119                        break;
    78120                }
    79121        }
    80122
    81         if ((argc < 4) || (argc > 5)) {
     123        if (instance_set) {
     124                argc -= 2;
     125                t_argv = &argv[2];
     126        } else
     127                t_argv = &argv[0];
     128
     129        if ((argc == 2) || (argc > 5)) {
    82130                printf("%s: invalid number of arguments. Try `mount --help'\n",
    83131                    cmdname);
    84132                return CMD_FAILURE;
    85133        }
     134        if (argc == 1) {
     135                print_mtab_list();
     136                return CMD_SUCCESS;
     137        }
     138        if (argc > 3)
     139                dev = t_argv[3];
    86140        if (argc == 5)
    87                 mopts = argv[4];
     141                mopts = t_argv[4];
    88142
    89         rc = mount(argv[1], argv[2], argv[3], mopts, 0);
     143        rc = mount(t_argv[1], t_argv[2], dev, mopts, 0, instance);
    90144        if (rc != EOK) {
    91145                printf("Unable to mount %s filesystem to %s on %s (rc=%d)\n",
    92                     argv[1], argv[2], argv[3], rc);
     146                    t_argv[1], t_argv[2], t_argv[3], rc);
    93147                return CMD_FAILURE;
    94148        }
Note: See TracChangeset for help on using the changeset viewer.