[git commit] blkid: if parameters are given, do not scan /dev

Denys Vlasenko vda.linux at googlemail.com
Sat Mar 3 14:09:07 UTC 2012


commit: http://git.busybox.net/busybox/commit/?id=e8cfc3f693e8a0cbfc489564c76e00c074f63066
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 include/volume_id.h                |    2 +-
 util-linux/blkid.c                 |    5 ++++-
 util-linux/volume_id/get_devname.c |   24 ++++++++++++------------
 3 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/include/volume_id.h b/include/volume_id.h
index 4a78cd1..a83da89 100644
--- a/include/volume_id.h
+++ b/include/volume_id.h
@@ -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
diff --git a/util-linux/blkid.c b/util-linux/blkid.c
index a9fd9f3..1bbc803 100644
--- a/util-linux/blkid.c
+++ b/util-linux/blkid.c
@@ -18,11 +18,14 @@
 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;
 }
diff --git a/util-linux/volume_id/get_devname.c b/util-linux/volume_id/get_devname.c
index d81e244..230102d 100644
--- a/util-linux/volume_id/get_devname.c
+++ b/util-linux/volume_id/get_devname.c
@@ -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) {


More information about the busybox-cvs mailing list