util-linux/mount/fsprobe_blkid.c

83 lines
1.4 KiB
C

#include <stdio.h>
#include <blkid/blkid.h>
#include "fsprobe.h"
#define BLKID_EMPTY_CACHE "/dev/null"
static blkid_cache blkid;
void
fsprobe_init(void)
{
blkid = NULL;
}
void
fsprobe_exit(void)
{
if (blkid)
blkid_put_cache(blkid);
}
const char *
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)
{
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)
{
if (!blkid)
blkid_get_cache(&blkid, NULL);
return blkid_get_devname(blkid, "UUID", uuid);
}
const char *
fsprobe_get_devname_by_label(const char *label)
{
if (!blkid)
blkid_get_cache(&blkid, NULL);
return blkid_get_devname(blkid, "LABEL", label);
}
int
fsprobe_known_fstype(const char *fstype)
{
return blkid_known_fstype(fstype);
}
const char *
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;
}