]> sourceware.org Git - lvm2.git/commitdiff
libdm: add mangling support for dm_task_set_uuid
authorPeter Rajnoha <prajnoha@redhat.com>
Wed, 10 Oct 2012 15:00:41 +0000 (17:00 +0200)
committerPeter Rajnoha <prajnoha@redhat.com>
Wed, 10 Oct 2012 15:16:13 +0000 (17:16 +0200)
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.

libdm/ioctl/libdm-iface.c
libdm/ioctl/libdm-targets.h
libdm/libdm-common.c

index 3166c06f4f6c41714db762cd131a2a97fbaa735a..0dd25ef34702d4a1e5f1396453765e4fdc9e5781 100644 (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!
index c004d3e8fb9a8eb0677d32b9023e83e736eaa031..8fc87389717676cc27ff0f5e2239552007ee8f63 100644 (file)
@@ -69,6 +69,7 @@ struct dm_task {
        int expected_errno;
 
        char *uuid;
+       char *mangled_uuid;
 };
 
 struct cmd_data {
index b990ded3cb8b96ca67346e72f2d8a8733430cae2..b8533ed6d81ae2b15fd0353b5cd715ff47de920d 100644 (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);
This page took 0.044083 seconds and 5 git commands to generate.