dm_task_get_name might return a zero-length string, which also
seem to indicate an invalid mapname. Fix dm_mapname() to always
return NULL if either no mapname or an zero-length mapname
was returned.
Signed-off-by: Hannes Reinecke <hare@suse.de>
dm_mapname(int major, int minor)
{
struct dm_task *dmt;
- const char *mapname;
+ const char *mapname = NULL, *map;
if (!(dmt = dm_task_create(DM_DEVICE_INFO)))
return NULL;
if (!dm_task_run(dmt))
goto out;
- mapname = strdup(dm_task_get_name(dmt));
+ map = dm_task_get_name(dmt);
+ if (map && strlen(map))
+ mapname = strdup(map);
+
out:
dm_task_destroy(dmt);
return mapname;
char *
dm_mapname(int major, int minor)
{
- char * response;
+ char * response = NULL, *map;
struct dm_task *dmt;
int r;
int loop = MAX_WAIT * LOOPS_PER_SEC;
goto bad;
}
- response = STRDUP((char *)dm_task_get_name(dmt));
+ map = dm_task_get_name(dmt);
+ if (map && strlen(map))
+ response = STRDUP((char *)dm_task_get_name(dmt));
+
dm_task_destroy(dmt);
return response;
bad: