libfdisk: fix guid usage of packed struct gpt_entry

clang issued warnings like this:

../libfdisk/src/gpt.c:371:18: warning: taking address of packed member 'type' of class or structure 'gpt_entry' may result in an unaligned pointer value [-Waddress-of-packed-member]
        guid_to_string(&e->type, str);
                        ^~~~~~~

Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
This commit is contained in:
Ruediger Meier 2017-06-13 10:09:45 +02:00
parent 7f387c5c21
commit 92e486f80e
1 changed files with 27 additions and 10 deletions

View File

@ -367,8 +367,9 @@ static struct fdisk_parttype *gpt_partition_parttype(
{
struct fdisk_parttype *t;
char str[37];
struct gpt_guid guid = e->type;
guid_to_string(&e->type, str);
guid_to_string(&guid, str);
t = fdisk_label_get_parttype_from_string(cxt->label, str);
return t ? : fdisk_new_unknown_parttype(0, str);
}
@ -376,7 +377,7 @@ static struct fdisk_parttype *gpt_partition_parttype(
static void gpt_entry_set_type(struct gpt_entry *e, struct gpt_guid *uuid)
{
e->type = *uuid;
DBG(LABEL, gpt_debug_uuid("new type", &(e->type)));
DBG(LABEL, gpt_debug_uuid("new type", uuid));
}
static void gpt_entry_set_name(struct gpt_entry *e, char *str)
@ -480,8 +481,9 @@ static inline int gpt_sizeof_ents(struct gpt_header *hdr, size_t *sz)
static char *gpt_get_header_id(struct gpt_header *header)
{
char str[37];
struct gpt_guid guid = header->disk_guid;
guid_to_string(&header->disk_guid, str);
guid_to_string(&guid, str);
return strdup(str);
}
@ -742,13 +744,18 @@ static int gpt_mknew_header(struct fdisk_context *cxt,
if (cxt->script) {
const char *id = fdisk_script_get_header(cxt->script, "label-id");
if (id && string_to_guid(id, &header->disk_guid) == 0)
struct gpt_guid guid = header->disk_guid;
if (id && string_to_guid(id, &guid) == 0)
has_id = 1;
header->disk_guid = guid;
}
if (!has_id) {
struct gpt_guid guid;
uuid_generate_random((unsigned char *) &header->disk_guid);
swap_efi_guid(&header->disk_guid);
guid = header->disk_guid;
swap_efi_guid(&guid);
}
return 0;
}
@ -1727,6 +1734,7 @@ static int gpt_get_partition(struct fdisk_context *cxt, size_t n,
struct gpt_entry *e;
char u_str[37];
int rc = 0;
struct gpt_guid guid;
assert(cxt);
assert(cxt->label);
@ -1748,7 +1756,8 @@ static int gpt_get_partition(struct fdisk_context *cxt, size_t n,
pa->size = gpt_partition_size(e);
pa->type = gpt_partition_parttype(cxt, e);
if (guid_to_string(&e->partition_guid, u_str)) {
guid = e->partition_guid;
if (guid_to_string(&guid, u_str)) {
pa->uuid = strdup(u_str);
if (!pa->uuid) {
rc = -errno;
@ -1794,12 +1803,15 @@ static int gpt_set_partition(struct fdisk_context *cxt, size_t n,
if (pa->uuid) {
char new_u[37], old_u[37];
struct gpt_guid guid;
guid_to_string(&e->partition_guid, old_u);
guid = e->partition_guid;
guid_to_string(&guid, old_u);
rc = gpt_entry_set_uuid(e, pa->uuid);
if (rc)
return rc;
guid_to_string(&e->partition_guid, new_u);
guid = e->partition_guid;
guid_to_string(&guid, new_u);
fdisk_info(cxt, _("Partition UUID changed from %s to %s."),
old_u, new_u);
}
@ -2404,8 +2416,11 @@ static int gpt_add_partition(
* generated for that partition, and every partition is guaranteed
* to have a unique GUID.
*/
struct gpt_guid guid;
uuid_generate_random((unsigned char *) &e->partition_guid);
swap_efi_guid(&e->partition_guid);
guid = e->partition_guid;
swap_efi_guid(&guid);
}
if (pa && pa->name && *pa->name)
@ -2451,6 +2466,7 @@ static int gpt_create_disklabel(struct fdisk_context *cxt)
size_t esz = 0;
char str[37];
struct fdisk_gpt_label *gpt;
struct gpt_guid guid;
assert(cxt);
assert(cxt->label);
@ -2508,7 +2524,8 @@ static int gpt_create_disklabel(struct fdisk_context *cxt)
cxt->label->nparts_max = gpt_get_nentries(gpt);
cxt->label->nparts_cur = 0;
guid_to_string(&gpt->pheader->disk_guid, str);
guid = gpt->pheader->disk_guid;
guid_to_string(&guid, str);
fdisk_label_set_changed(cxt->label, 1);
fdisk_info(cxt, _("Created a new GPT disklabel (GUID: %s)."), str);
done: