blkid: if parameters are given, do not scan /dev
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 3 Mar 2012 14:09:07 +0000 (15:09 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 3 Mar 2012 14:09:07 +0000 (15:09 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
include/volume_id.h
util-linux/blkid.c
util-linux/volume_id/get_devname.c

index 4a78cd1e462f699baabbbdcaff41179285f3b680..a83da899e43422ee6e227f6e96796d13e84e264a 100644 (file)
@@ -20,7 +20,7 @@
 
 char *get_devname_from_label(const char *spec);
 char *get_devname_from_uuid(const char *spec);
-void display_uuid_cache(void);
+void display_uuid_cache(int scan_devices);
 
 /* Returns:
  * 0: no UUID= or LABEL= prefix found
index a9fd9f361f312d99a2c8bfe6224720536858594c..1bbc80311224ccc2706c3f4da200cdc3a171ef22 100644 (file)
 int blkid_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int blkid_main(int argc UNUSED_PARAM, char **argv)
 {
+       int scan_devices = 1;
+
        while (*++argv) {
                /* Note: bogus device names don't cause any error messages */
                add_to_uuid_cache(*argv);
+               scan_devices = 0;
        }
 
-       display_uuid_cache();
+       display_uuid_cache(scan_devices);
        return 0;
 }
index d81e244387f6d82475a67cdce58dfc5bb2aa99d8..230102d892d5dd5800279daac382e50b33bc517f 100644 (file)
@@ -115,7 +115,7 @@ uuidcache_check_device(const char *device,
 }
 
 static struct uuidCache_s*
-uuidcache_init(void)
+uuidcache_init(int scan_devices)
 {
        dbg("DBG: uuidCache=%x, uuidCache");
        if (uuidCache)
@@ -131,12 +131,12 @@ uuidcache_init(void)
         * This is unacceptably complex. Let's just scan /dev.
         * (Maybe add scanning of /sys/block/XXX/dev for devices
         * somehow not having their /dev/XXX entries created?) */
-
-       recursive_action("/dev", ACTION_RECURSE,
-               uuidcache_check_device, /* file_action */
-               NULL, /* dir_action */
-               NULL, /* userData */
-               0 /* depth */);
+       if (scan_devices)
+               recursive_action("/dev", ACTION_RECURSE,
+                       uuidcache_check_device, /* file_action */
+                       NULL, /* dir_action */
+                       NULL, /* userData */
+                       0 /* depth */);
 
        return uuidCache;
 }
@@ -150,7 +150,7 @@ get_spec_by_x(int n, const char *t, int *majorPtr, int *minorPtr)
 {
        struct uuidCache_s *uc;
 
-       uc = uuidcache_init();
+       uc = uuidcache_init(/*scan_devices:*/ 1);
        while (uc) {
                switch (n) {
                case UUID:
@@ -215,11 +215,11 @@ get_spec_by_volume_label(const char *s, int *major, int *minor)
 #endif // UNUSED
 
 /* Used by blkid */
-void display_uuid_cache(void)
+void display_uuid_cache(int scan_devices)
 {
        struct uuidCache_s *uc;
 
-       uc = uuidcache_init();
+       uc = uuidcache_init(scan_devices);
        while (uc) {
                printf("%s:", uc->device);
                if (uc->label[0])
@@ -264,7 +264,7 @@ char *get_devname_from_label(const char *spec)
 {
        struct uuidCache_s *uc;
 
-       uc = uuidcache_init();
+       uc = uuidcache_init(/*scan_devices:*/ 1);
        while (uc) {
                if (uc->label[0] && strcmp(spec, uc->label) == 0) {
                        return xstrdup(uc->device);
@@ -278,7 +278,7 @@ char *get_devname_from_uuid(const char *spec)
 {
        struct uuidCache_s *uc;
 
-       uc = uuidcache_init();
+       uc = uuidcache_init(/*scan_devices:*/ 1);
        while (uc) {
                /* case of hex numbers doesn't matter */
                if (strcasecmp(spec, uc->uc_uuid) == 0) {