From: Ruediger Meier <ruediger.meier@xxxxxxxxxxx> 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@xxxxxxxxxxx> --- libfdisk/src/gpt.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c index 249feb74d..40d0912ec 100644 --- a/libfdisk/src/gpt.c +++ b/libfdisk/src/gpt.c @@ -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: -- 2.12.3 -- To unsubscribe from this list: send the line "unsubscribe util-linux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html