{
blkid_probe pr;
size_t i, ntags = 0;
+ int rc;
const char *tags[] = { "LABEL", "UUID", "TYPE", "PARTUUID", "PARTLABEL" };
const char *blktags[] = { "LABEL", "UUID", "TYPE", "PART_ENTRY_UUID", "PART_ENTRY_NAME" };
blkid_probe_enable_partitions(pr, 1);
blkid_probe_set_partitions_flags(pr, BLKID_PARTS_ENTRY_DETAILS);
- if (blkid_do_safeprobe(pr))
+ rc = blkid_do_safeprobe(pr);
+ if (rc)
goto error;
DBG(CACHE, mnt_debug_h(cache, "reading tags for: %s", devname));
return ntags ? 0 : 1;
error:
blkid_free_probe(pr);
- return -1;
+ return rc < 0 ? rc : -1;
}
/**
return 0;
}
+static int __mnt_cache_find_tag_value(struct libmnt_cache *cache,
+ const char *devname, const char *token, char **data)
+{
+ int rc = 0;
+
+ if (!cache || !devname || !token || !data)
+ return -EINVAL;
+
+ rc = mnt_cache_read_tags(cache, devname);
+ if (rc)
+ return rc;
+
+ *data = cache_find_tag_value(cache, devname, token);
+ return data ? 0 : -1;
+}
+
/**
* mnt_cache_find_tag_value:
* @cache: cache for results
char *mnt_cache_find_tag_value(struct libmnt_cache *cache,
const char *devname, const char *token)
{
- if (!cache || !devname || !token)
- return NULL;
-
- if (mnt_cache_read_tags(cache, devname) != 0)
- return NULL;
+ char *data = NULL;
- return cache_find_tag_value(cache, devname, token);
+ if (__mnt_cache_find_tag_value(cache, devname, token, &data) == 0)
+ return data;
+ return NULL;
}
/**
DBG(CACHE, mnt_debug_h(cache, "get %s FS type", devname));
- if (cache)
- return mnt_cache_find_tag_value(cache, devname, "TYPE");
+ if (cache) {
+ char *val = NULL;
+ rc = __mnt_cache_find_tag_value(cache, devname, "TYPE", &val);
+ if (ambi)
+ *ambi = rc == -2 ? TRUE : FALSE;
+ return rc ? NULL : val;
+ }
/*
* no cache, probe directly
return NULL;
blkid_probe_enable_superblocks(pr, 1);
-
blkid_probe_set_superblocks_flags(pr, BLKID_SUBLKS_TYPE);
rc = blkid_do_safeprobe(pr);
+ DBG(CACHE, mnt_debug_h(cache, "liblkid rc=%d", rc));
+
if (!rc && !blkid_probe_lookup_value(pr, "TYPE", &data, NULL))
type = strdup(data);
cxt->fs = NULL;
cxt->mtab = NULL;
- cxt->ambi = 0;
cxt->helper = NULL;
cxt->orig_user = NULL;
cxt->mountflags = 0;
if (access(dev, F_OK) == 0) {
struct libmnt_cache *cache = mnt_context_get_cache(cxt);
+ int ambi = 0;
- type = mnt_get_fstype(dev, &cxt->ambi, cache);
+ type = mnt_get_fstype(dev, &ambi, cache);
if (type) {
rc = mnt_fs_set_fstype(cxt->fs, type);
if (!cache)
free(type); /* type is not cached */
}
+ if (ambi)
+ rc = -MNT_ERR_AMBIFS;
} else {
if (strchr(dev, ':') != NULL)
rc = mnt_fs_set_fstype(cxt->fs, "nfs");
}
done:
- DBG(CXT, mnt_debug_h(cxt, "FS type: %s", mnt_fs_get_fstype(cxt->fs)));
+ DBG(CXT, mnt_debug_h(cxt, "FS type: %s [rc=%d]",
+ mnt_fs_get_fstype(cxt->fs), rc));
return rc;
none:
return mnt_fs_set_fstype(cxt->fs, "none");