]> www.infradead.org Git - mtd-utils.git/commitdiff
ubinfo: add -N option to get info by name of ubi volume
authorJon Ringle <jon@ringle.org>
Tue, 23 Mar 2010 15:16:12 +0000 (11:16 -0400)
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Thu, 8 Apr 2010 08:28:20 +0000 (11:28 +0300)
Signed-off-by: Jon Ringle <jon@ringle.org>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
ubi-utils/src/ubinfo.c

index 8c5a1a9a562f9c01218fb568eeeabaa5b1a80d00..cd011c5b84af2310fe13b8fd708ff77229dcdd71 100644 (file)
@@ -39,6 +39,7 @@ struct args {
        int vol_id;
        int all;
        const char *node;
+       const char *vol_name;
 };
 
 static struct args args = {
@@ -46,6 +47,7 @@ static struct args args = {
        .devn = -1,
        .all = 0,
        .node = NULL,
+       .vol_name = NULL,
 };
 
 static const char *doc = PROGRAM_NAME " version " PROGRAM_VERSION
@@ -87,7 +89,7 @@ static int parse_opt(int argc, char * const argv[])
                int key;
                char *endp;
 
-               key = getopt_long(argc, argv, "an:d:hV", long_options, NULL);
+               key = getopt_long(argc, argv, "an:N:d:hV", long_options, NULL);
                if (key == -1)
                        break;
 
@@ -102,6 +104,10 @@ static int parse_opt(int argc, char * const argv[])
                                return errmsg("bad volume ID: " "\"%s\"", optarg);
                        break;
 
+               case 'N':
+                       args.vol_name = optarg;
+                       break;
+
                case 'd':
                        args.devn = strtoul(optarg, &endp, 0);
                        if (*endp != '\0' || endp == optarg || args.devn < 0)
@@ -174,6 +180,20 @@ static int translate_dev(libubi_t libubi, const char *node)
        return 0;
 }
 
+static int get_vol_id_by_name(libubi_t libubi, int dev_num, const char *name)
+{
+       int err;
+       struct ubi_vol_info vol_info;
+
+       err = ubi_get_vol_info1_nm(libubi, dev_num, name, &vol_info);
+       if (err)
+               return sys_errmsg("cannot get information about volume \"%s\" on ubi%d\n", name, dev_num);
+
+       args.vol_id = vol_info.vol_id;
+
+       return 0;
+}
+
 static int print_vol_info(libubi_t libubi, int dev_num, int vol_id)
 {
        int err;
@@ -377,6 +397,12 @@ int main(int argc, char * const argv[])
                        goto out_libubi;
        }
 
+       if (args.vol_name) {
+               err = get_vol_id_by_name(libubi, args.devn, args.vol_name);
+               if (err)
+                       goto out_libubi;
+       }
+
        if (args.vol_id != -1 && args.devn == -1) {
                errmsg("volume ID is specified, but UBI device number is not "
                       "(use -h for help)\n");