-
- while((entry = readdir(dir))) {
- if (entry->d_name[0] == '.' ||
- !strncmp(entry->d_name, "..", 2))
- continue;
-
- strncpy(ptr, entry->d_name, space);
- if (stat(path, &st) < 0)
- continue;
-
- if (S_ISDIR(st.st_mode)) {
- result = __lookup_dev(path, dev, dir_level + 1, max_level);
- if (result)
- break;
- } else if (S_ISBLK(st.st_mode)) {
- /* workaround: ignore dm-X devices, these are internal kernel names */
- if (dir_level == 0 && !strncmp(entry->d_name, "dm-", 3))
- continue;
- if (st.st_rdev == dev) {
- result = strdup(path);
- break;
- }
- }
- }
-
- closedir(dir);
- return result;
-}
-
-static char *lookup_dev(const char *dev_id)
-{
- uint32_t major, minor;
- dev_t dev;
- char *result = NULL, buf[PATH_MAX + 1];
-
- if (sscanf(dev_id, "%" PRIu32 ":%" PRIu32, &major, &minor) != 2)
+ if (!dm_task_set_minor(dmt, minor) ||
+ !dm_task_set_major(dmt, major) ||
+ !dm_task_run(dmt) ||
+ !(name = dm_task_get_name(dmt))) {
+ dm_task_destroy(dmt);