#include <blkid/blkid.h>
#include "fsprobe.h"
+#define BLKID_EMPTY_CACHE "/dev/null"
static blkid_cache blkid;
void
-fsprobe_init(void) {
- blkid_get_cache(&blkid, NULL);
+fsprobe_init(void)
+{
+ blkid = NULL;
}
void
-fsprobe_exit(void) {
- blkid_put_cache(blkid);
+fsprobe_exit(void)
+{
+ if (blkid)
+ blkid_put_cache(blkid);
}
const char *
-fsprobe_get_label_by_devname(const char *devname) {
+fsprobe_get_label_by_devname(const char *devname)
+{
+ if (!blkid)
+ blkid_get_cache(&blkid, NULL);
+
return blkid_get_tag_value(blkid, "LABEL", devname);
}
const char *
-fsprobe_get_uuid_by_devname(const char *devname) {
+fsprobe_get_uuid_by_devname(const char *devname)
+{
+ if (!blkid)
+ blkid_get_cache(&blkid, NULL);
+
return blkid_get_tag_value(blkid, "UUID", devname);
}
const char *
-fsprobe_get_devname_by_uuid(const char *uuid) {
+fsprobe_get_devname_by_uuid(const char *uuid)
+{
+ if (!blkid)
+ blkid_get_cache(&blkid, NULL);
+
return blkid_get_devname(blkid, "UUID", uuid);
}
const char *
-fsprobe_get_devname_by_label(const char *label) {
+fsprobe_get_devname_by_label(const char *label)
+{
+ if (!blkid)
+ blkid_get_cache(&blkid, NULL);
+
return blkid_get_devname(blkid, "LABEL", label);
}
}
const char *
-fsprobe_get_fstype_by_devname(const char *devname) {
- return blkid_get_tag_value(blkid, "TYPE", devname);
+fsprobe_get_fstype_by_devname(const char *devname)
+{
+ blkid_cache c;
+ const char *tp;
+
+ if (blkid)
+ return blkid_get_tag_value(blkid, "TYPE", devname);
+
+ /* The cache is not initialized yet. Use empty cache rather than waste
+ * time with /etc/blkid.tab. It seems that probe FS is faster than
+ * parse the cache file. -- kzak (17-May-2007)
+ */
+ blkid_get_cache(&c, BLKID_EMPTY_CACHE);
+ tp = blkid_get_tag_value(c, "TYPE", devname);
+ blkid_put_cache(c);
+
+ return tp;
}