Ignore:
Timestamp:
2012-02-18T16:47:38Z (13 years ago)
Author:
Jakub Jermar <jakub@…>
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.
Message:

Merge mainline changes.

File:
1 edited

Legend:

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

    rbd5f3b7 r00aece0  
    2727 */
    2828
     29#include <loc.h>
    2930#include <stdio.h>
    3031#include <stdlib.h>
    3132#include <vfs/vfs.h>
     33#include <adt/list.h>
    3234#include <errno.h>
    3335#include <getopt.h>
     36#include <inttypes.h>
    3437#include "config.h"
    3538#include "util.h"
     
    4346static struct option const long_options[] = {
    4447        { "help", no_argument, 0, 'h' },
     48        { "instance", required_argument, 0, 'i' },
    4549        { 0, 0, 0, 0 }
    4650};
     
    6165}
    6266
     67static 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
    63109/* Main entry point for mount, accepts an array of arguments */
    64110int cmd_mount(char **argv)
     
    68114        const char *dev = "";
    69115        int rc, c, opt_ind;
     116        unsigned int instance = 0;
     117        bool instance_set = false;
     118        char **t_argv;
    70119
    71120        argc = cli_count_args(argv);
    72121
    73122        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);
    75124                switch (c) {
    76125                case 'h':
    77126                        help_cmd_mount(HELP_LONG);
    78127                        return CMD_SUCCESS;
     128                case 'i':
     129                        instance = (unsigned int) strtol(optarg, NULL, 10);
     130                        instance_set = true;
     131                        break;
    79132                }
    80133        }
    81134
    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)) {
    83142                printf("%s: invalid number of arguments. Try `mount --help'\n",
    84143                    cmdname);
    85144                return CMD_FAILURE;
    86145        }
     146        if (argc == 1) {
     147                print_mtab_list();
     148                return CMD_SUCCESS;
     149        }
    87150        if (argc > 3)
    88                 dev = argv[3];
     151                dev = t_argv[3];
    89152        if (argc == 5)
    90                 mopts = argv[4];
     153                mopts = t_argv[4];
    91154
    92         rc = mount(argv[1], argv[2], dev, mopts, 0);
     155        rc = mount(t_argv[1], t_argv[2], dev, mopts, 0, instance);
    93156        if (rc != EOK) {
    94157                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);
    96159                return CMD_FAILURE;
    97160        }
Note: See TracChangeset for help on using the changeset viewer.