blkid: new applet. We almost had everything needed for it already

function                                             old     new   delta
display_uuid_cache                                     -      89     +89
blkid_main                                             -       8      +8
applet_names                                        1871    1877      +6
applet_main                                         1140    1144      +4
applet_nameofs                                       570     572      +2
packed_usage                                       24737   24735      -2
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 3/1 up/down: 109/-2)            Total: 107 bytes

diff --git a/include/applets.h b/include/applets.h
index 35649d3..828900e 100644
--- a/include/applets.h
+++ b/include/applets.h
@@ -80,6 +80,7 @@
 USE_BASENAME(APPLET_NOFORK(basename, basename, _BB_DIR_USR_BIN, _BB_SUID_NEVER, basename))
 USE_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_NEVER))
 //USE_BBSH(APPLET(bbsh, _BB_DIR_BIN, _BB_SUID_NEVER))
+USE_BLKID(APPLET(blkid, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_BRCTL(APPLET(brctl, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
 USE_BUNZIP2(APPLET(bunzip2, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_BUNZIP2(APPLET_ODDNAME(bzcat, bunzip2, _BB_DIR_USR_BIN, _BB_SUID_NEVER, bzcat))
diff --git a/include/usage.h b/include/usage.h
index d247864..3c11013 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -1098,6 +1098,11 @@
      "\n	-z		Delete messages on server" \
      "\n	prog		Run 'prog <message_file>' on message delivery" \
 
+#define blkid_trivial_usage \
+       ""
+#define blkid_full_usage "\n\n" \
+       "Print UUIDs of all filesystems."
+
 #define findfs_trivial_usage \
        "LABEL=label or UUID=uuid"
 #define findfs_full_usage "\n\n" \
diff --git a/include/volume_id.h b/include/volume_id.h
index 99cb11f..bba32c0 100644
--- a/include/volume_id.h
+++ b/include/volume_id.h
@@ -20,3 +20,4 @@
 
 char *get_devname_from_label(const char *spec);
 char *get_devname_from_uuid(const char *spec);
+void display_uuid_cache(void);
diff --git a/util-linux/Config.in b/util-linux/Config.in
index 2ba9f01..ba0916a 100644
--- a/util-linux/Config.in
+++ b/util-linux/Config.in
@@ -5,6 +5,15 @@
 
 menu "Linux System Utilities"
 
+config BLKID
+	bool "blkid"
+	default n
+	select VOLUMEID
+	help
+	  Lists labels and UUIDs of all filesystems.
+	  WARNING:
+	  With all submodules selected, it will add ~8k to busybox.
+
 config DMESG
 	bool "dmesg"
 	default n
@@ -156,9 +165,7 @@
 	default n
 	select VOLUMEID
 	help
-	  This is similar to the findfs program that is part of the e2fsprogs
-	  package. However, the e2fsprogs version only support ext2/3. This
-	  version supports those in addition to FAT, swap, and ReiserFS.
+	  Prints the name of a filesystem with given laver or UUID.
 	  WARNING:
 	  With all submodules selected, it will add ~8k to busybox.
 
@@ -651,7 +658,7 @@
 	select VOLUMEID
 	help
 	  This allows for specifying a device by label or uuid, rather than by
-	  name. This feature utilizes the same functionality as findfs.
+	  name. This feature utilizes the same functionality as blkid/findfs.
 
 config FEATURE_MOUNT_NFS
 	bool "Support mounting NFS file systems"
diff --git a/util-linux/Kbuild b/util-linux/Kbuild
index 38569c6..2d0fc49 100644
--- a/util-linux/Kbuild
+++ b/util-linux/Kbuild
@@ -5,6 +5,7 @@
 # Licensed under the GPL v2, see the file LICENSE in this tarball.
 
 lib-y:=
+lib-$(CONFIG_BLKID)             += blkid.o
 lib-$(CONFIG_DMESG)             += dmesg.o
 lib-$(CONFIG_FBSET)             += fbset.o
 lib-$(CONFIG_FDFLUSH)           += freeramdisk.o
diff --git a/util-linux/volume_id/Kbuild b/util-linux/volume_id/Kbuild
index 54b95f0..d78e4ad 100644
--- a/util-linux/volume_id/Kbuild
+++ b/util-linux/volume_id/Kbuild
@@ -6,6 +6,7 @@
 
 lib-y:=
 
+lib-$(CONFIG_BLKID)                             += get_devname.o
 lib-$(CONFIG_FINDFS)                            += get_devname.o
 lib-$(CONFIG_FEATURE_MOUNT_LABEL)               += get_devname.o
 
diff --git a/util-linux/volume_id/get_devname.c b/util-linux/volume_id/get_devname.c
index f9a2c90..83c0856 100644
--- a/util-linux/volume_id/get_devname.c
+++ b/util-linux/volume_id/get_devname.c
@@ -374,24 +374,25 @@
 {
 	return get_spec_by_x(VOL, s, major, minor);
 }
-
-static int display_uuid_cache(void)
-{
-	struct uuidCache_s *u;
-	size_t i;
-
-	uuidcache_init();
-
-	u = uuidCache;
-	while (u) {
-		printf("%s %s %s\n", u->device, u->label, u->uc_uuid);
-		u = u->next;
-	}
-
-	return 0;
-}
 #endif // UNUSED
 
+/* Used by blkid */
+void display_uuid_cache(void)
+{
+	struct uuidCache_s *u;
+
+	uuidcache_init();
+	u = uuidCache;
+	while (u) {
+		printf("%s:", u->device);
+		if (u->label[0])
+			printf(" LABEL=\"%s\"", u->label);
+		if (u->uc_uuid[0])
+			printf(" UUID=\"%s\"", u->uc_uuid);
+		bb_putchar('\n');
+		u = u->next;
+	}
+}
 
 /* Used by mount and findfs */