libdm: free strings This patch frees strings in dm_task before assigning them. With this patch it is possible to reuse one dm_task for multiple ioctls. Signed-off-by: Mikulas Patocka --- libdm/ioctl/libdm-iface.c | 3 +++ libdm/libdm-common.c | 1 + 2 files changed, 4 insertions(+) Index: lvm2-copy/libdm/ioctl/libdm-iface.c =================================================================== --- lvm2-copy.orig/libdm/ioctl/libdm-iface.c 2013-03-04 14:42:27.000000000 +0100 +++ lvm2-copy/libdm/ioctl/libdm-iface.c 2013-07-13 02:49:38.000000000 +0200 @@ -762,6 +762,7 @@ int dm_task_set_newuuid(struct dm_task * newuuid = mangled_uuid; } + dm_free(dmt->newname); if (!(dmt->newname = dm_strdup(newuuid))) { log_error("dm_task_set_newuuid: strdup(%s) failed", newuuid); return 0; @@ -773,6 +774,7 @@ int dm_task_set_newuuid(struct dm_task * int dm_task_set_message(struct dm_task *dmt, const char *message) { + dm_free(dmt->message); if (!(dmt->message = dm_strdup(message))) { log_error("dm_task_set_message: strdup failed"); return 0; @@ -791,6 +793,7 @@ int dm_task_set_sector(struct dm_task *d int dm_task_set_geometry(struct dm_task *dmt, const char *cylinders, const char *heads, const char *sectors, const char *start) { + dm_free(dmt->geometry); if (dm_asprintf(&(dmt->geometry), "%s %s %s %s", cylinders, heads, sectors, start) < 0) { log_error("dm_task_set_geometry: sprintf failed"); Index: lvm2-copy/libdm/libdm-common.c =================================================================== --- lvm2-copy.orig/libdm/libdm-common.c 2013-07-05 01:31:53.000000000 +0200 +++ lvm2-copy/libdm/libdm-common.c 2013-07-13 02:49:38.000000000 +0200 @@ -711,6 +711,7 @@ int dm_task_set_newname(struct dm_task * newname = mangled_name; } + dm_free(dmt->newname); if (!(dmt->newname = dm_strdup(newname))) { log_error("dm_task_set_newname: strdup(%s) failed", newname); return 0;