-static char *get_partition_devname(const char *label)
-{
- blkid_dev_iterate dev_iter;
- blkid_tag_iterate tag_iter;
- blkid_dev dev;
- blkid_cache cache = NULL;
- const char *type, *value;
- int ret;
-
- ret = blkid_get_cache(&cache, NULL);
- if (ret < 0)
- return NULL;
-
- blkid_probe_all(cache);
-
- dev_iter = blkid_dev_iterate_begin(cache);
- blkid_dev_set_search(dev_iter, NULL, NULL);
- while (blkid_dev_next(dev_iter, &dev) == 0) {
- dev = blkid_verify(cache, dev);
- if (!dev)
- continue;
-
- tag_iter = blkid_tag_iterate_begin(dev);
- while (blkid_tag_next(tag_iter, &type, &value) == 0) {
- if (!strncmp(type, "LABEL", 5) && !strncmp(value, label, strlen(label))) {
- char *devname = strdup(blkid_dev_devname(dev));
-
- /*
- * To distinguish physical partition and ram mounted partition,
- * continue to search the next entry if the devname includes
- * 'ram'(eg. /dev/ram0).
- */
- if (strstr(devname, "ram")) {
- free(devname);
- continue;
- }
-
- blkid_tag_iterate_end(tag_iter);
- blkid_dev_iterate_end(dev_iter);
- blkid_put_cache(cache);
- return devname;
- }
- }
- blkid_tag_iterate_end(tag_iter);
- }
- blkid_dev_iterate_end(dev_iter);
- blkid_put_cache(cache);
-
- return NULL;
-}
-