+2023-11-15 Paul Eggert <eggert@cs.ucla.edu>
+
+ 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-10 Bruno Haible <bruno@clisp.org>
tests: In multithreaded tests, use random() instead of rand().
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)
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;