summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2012-03-03 14:09:07 (GMT)
committer Denys Vlasenko <vda.linux@googlemail.com>2012-03-03 14:09:07 (GMT)
commite8cfc3f693e8a0cbfc489564c76e00c074f63066 (patch)
tree6b89cd91d9fc4b8138b3c5ea08c7c619f1bc0017
parent97e528164183c9a9b4768b0d078b3039a1a6ae36 (diff)
downloadbusybox-e8cfc3f693e8a0cbfc489564c76e00c074f63066.tar.gz
busybox-e8cfc3f693e8a0cbfc489564c76e00c074f63066.tar.bz2
blkid: if parameters are given, do not scan /dev
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--include/volume_id.h2
-rw-r--r--util-linux/blkid.c5
-rw-r--r--util-linux/volume_id/get_devname.c24
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) {