1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

libdm: add mangling support for dm_task_set_uuid

Also, add a new field to struct dm_task called "mangled_uuid" that
will store mangled form of uuid if it differs from original uuid.
This commit is contained in:
Peter Rajnoha 2012-10-10 17:00:41 +02:00
parent 12f5c3f726
commit a621795a3c
3 changed files with 34 additions and 0 deletions

View File

@ -455,6 +455,7 @@ void dm_task_destroy(struct dm_task *dmt)
dm_free(dmt->message);
dm_free(dmt->geometry);
dm_free(dmt->uuid);
dm_free(dmt->mangled_uuid);
dm_free(dmt);
}
@ -1317,6 +1318,8 @@ static int _create_and_load_v4(struct dm_task *dmt)
dmt->type = DM_DEVICE_RESUME;
dm_free(dmt->uuid);
dmt->uuid = NULL;
dm_free(dmt->mangled_uuid);
dmt->mangled_uuid = NULL;
if (dm_task_run(dmt))
return 1;
@ -1325,6 +1328,8 @@ static int _create_and_load_v4(struct dm_task *dmt)
dmt->type = DM_DEVICE_REMOVE;
dm_free(dmt->uuid);
dmt->uuid = NULL;
dm_free(dmt->mangled_uuid);
dmt->mangled_uuid = NULL;
/*
* Also udev-synchronize "remove" dm task that is a part of this revert!

View File

@ -69,6 +69,7 @@ struct dm_task {
int expected_errno;
char *uuid;
char *mangled_uuid;
};
struct cmd_data {

View File

@ -717,7 +717,35 @@ int dm_task_set_newname(struct dm_task *dmt, const char *newname)
int dm_task_set_uuid(struct dm_task *dmt, const char *uuid)
{
char mangled_uuid[DM_UUID_LEN];
dm_string_mangling_t mangling_mode = dm_get_name_mangling_mode();
int r = 0;
dm_free(dmt->uuid);
dmt->uuid = NULL;
dm_free(dmt->mangled_uuid);
dmt->mangled_uuid = NULL;
if (!check_multiple_mangled_string_allowed(uuid, "UUID", mangling_mode))
return_0;
if (mangling_mode != DM_STRING_MANGLING_NONE &&
(r = mangle_string(uuid, "UUID", strlen(uuid), mangled_uuid,
sizeof(mangled_uuid), mangling_mode)) < 0) {
log_error("Failed to mangle device uuid \"%s\".", uuid);
return 0;
}
if (r) {
log_debug("Device uuid mangled [%s]: %s --> %s",
mangling_mode == DM_STRING_MANGLING_AUTO ? "auto" : "hex",
uuid, mangled_uuid);
if (!(dmt->mangled_uuid = dm_strdup(mangled_uuid))) {
log_error("dm_task_set_uuid: dm_strdup(%s) failed", mangled_uuid);
return 0;
}
}
if (!(dmt->uuid = dm_strdup(uuid))) {
log_error("dm_task_set_uuid: strdup(%s) failed", uuid);