From 00d41faeca954189135be48adc060400b265be88 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 15 Nov 2023 00:09:03 -0800 Subject: [PATCH] striconveha: pacify gcc -Wcast-align * lib/striconveha.c (uniconv_register_autodetect): Rewrite to avoid the need to cast from char * to a pointer to a more strictly aligned type. Use decls after statements to avoid some repetition. --- ChangeLog | 7 +++++++ lib/striconveha.c | 25 ++++++++++--------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 31f49bef69..0edd1e7aed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2023-11-15 Paul Eggert + + striconveha: pacify gcc -Wcast-align + * lib/striconveha.c (uniconv_register_autodetect): Rewrite to + avoid the need to cast from char * to a pointer to a more strictly + aligned type. Use decls after statements to avoid some repetition. + 2023-11-11 Johannes Schindelin vasnprintf: Re-enable parsing of directive with I64 (regr. 2023-03-24). diff --git a/lib/striconveha.c b/lib/striconveha.c index f388c9f095..2bf0338e44 100644 --- a/lib/striconveha.c +++ b/lib/striconveha.c @@ -88,10 +88,6 @@ uniconv_register_autodetect (const char *name, size_t listlen; size_t memneed; size_t i; - char *memory; - struct autodetect_alias *new_alias; - char *new_name; - const char **new_try_in_order; /* The TRY_IN_ORDER list must not be empty. */ if (try_in_order[0] == NULL) @@ -108,25 +104,24 @@ uniconv_register_autodetect (const char *name, memneed += sizeof (char *) + strlen (try_in_order[i]) + 1; listlen = i; - memory = (char *) malloc (memneed); + void *memory = malloc (memneed); if (memory != NULL) { - new_alias = (struct autodetect_alias *) memory; - memory += sizeof (struct autodetect_alias); + struct autodetect_alias *new_alias = memory; + memory = new_alias + 1; - new_try_in_order = (const char **) memory; - memory += (listlen + 1) * sizeof (char *); + char const **new_try_in_order = memory; + memory = new_try_in_order + listlen + 1; - new_name = (char *) memory; - memcpy (new_name, name, namelen); - memory += namelen; + char *new_name = memcpy (memory, name, namelen); + memory = new_name + namelen; for (i = 0; i < listlen; i++) { size_t len = strlen (try_in_order[i]) + 1; - memcpy (memory, try_in_order[i], len); - new_try_in_order[i] = (const char *) memory; - memory += len; + char *copy = memcpy (memory, try_in_order[i], len); + new_try_in_order[i] = copy; + memory = copy + len; } new_try_in_order[i] = NULL; -- 2.39.5