From c3bc36d4d0b957bbb1ce8e71f6ff8c8ea54000bb Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Mon, 21 Apr 2025 23:04:18 -0400 Subject: [PATCH] Fix compiler warnings for flex array definitions. Instead of defining a struct that ends with a flex array member with `val[0]`, the compiler now balks at this since technically, the spec considers this unsanitary. As a result however, we can't memcpy to `struct->val` since that's a pointer and now we're writing something of a different length (u8's in our case) into something that's of pointer size. So there we have to do the opposite, and memcpy to &struct->val[0]. Signed-off-by: Auke Kok --- kmod/src/btree.c | 4 ++-- kmod/src/btree.h | 2 +- kmod/src/item.c | 8 ++++---- kmod/src/wkic.c | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/kmod/src/btree.c b/kmod/src/btree.c index 7a21afc7..c6baa3be 100644 --- a/kmod/src/btree.c +++ b/kmod/src/btree.c @@ -2042,7 +2042,7 @@ struct merged_item { u64 seq; u8 flags; unsigned int val_len; - u8 val[0]; + u8 val[]; }; static inline struct merged_item *mitem_container(struct rb_node *node) @@ -2208,7 +2208,7 @@ static int merge_read_item(struct super_block *sb, struct scoutfs_key *key, u64 mitem->flags = flags; mitem->val_len = val_len; if (val_len) - memcpy(mitem->val, val, val_len); + memcpy(&mitem->val[0], val, val_len); if (found) { replace_mitem(rng, found, mitem); diff --git a/kmod/src/btree.h b/kmod/src/btree.h index 8656dd65..065c190e 100644 --- a/kmod/src/btree.h +++ b/kmod/src/btree.h @@ -30,7 +30,7 @@ struct scoutfs_btree_item_list { u64 seq; u8 flags; int val_len; - u8 val[0]; + u8 val[]; }; int scoutfs_btree_lookup(struct super_block *sb, diff --git a/kmod/src/item.c b/kmod/src/item.c index 44357e6d..330f3f78 100644 --- a/kmod/src/item.c +++ b/kmod/src/item.c @@ -148,7 +148,7 @@ struct cached_item { unsigned int val_len; struct scoutfs_key key; u64 seq; - char val[0]; + char val[]; }; #define CACHED_ITEM_ALIGN 8 @@ -426,7 +426,7 @@ static struct cached_item *alloc_item(struct cached_page *pg, item->seq = seq; if (val_len) - memcpy(item->val, val, val_len); + memcpy(&item->val[0], val, val_len); update_pg_max_seq(pg, item); @@ -2053,7 +2053,7 @@ int scoutfs_item_update(struct super_block *sb, struct scoutfs_key *key, if (val_len <= found->val_len) { if (val_len) - memcpy(found->val, val, val_len); + memcpy(&found->val[0], val, val_len); if (val_len < found->val_len) pg->erased_bytes += item_val_bytes(found->val_len) - item_val_bytes(val_len); @@ -2370,7 +2370,7 @@ int scoutfs_item_write_dirty(struct super_block *sb) lst->seq = item->seq; lst->flags = item->deletion ? SCOUTFS_ITEM_FLAG_DELETION : 0; lst->val_len = item->val_len; - memcpy(lst->val, item->val, item->val_len); + memcpy(&lst->val[0], item->val, item->val_len); } spin_lock(&cinf->dirty_lock); diff --git a/kmod/src/wkic.c b/kmod/src/wkic.c index 44eef494..0dc476f4 100644 --- a/kmod/src/wkic.c +++ b/kmod/src/wkic.c @@ -171,7 +171,7 @@ struct wkic_item { u64 seq; unsigned int val_len; u8 flags; - u8 val[0] __aligned(ARCH_KMALLOC_MINALIGN); /* totls have native structs */ + u8 val[] __aligned(ARCH_KMALLOC_MINALIGN); /* totls have native structs */ }; static struct wkic_item *witem_container(struct rb_node *node) @@ -763,7 +763,7 @@ static void fill_page_items(struct super_block *sb, struct wkic_page *wpage, str pg_item->val_len = witem->val_len; pg_item->flags = witem->flags; if (witem->val_len) - memcpy(pg_item->val, witem->val, witem->val_len); + memcpy(&pg_item->val[0], witem->val, witem->val_len); /* always inserting greatest item into page */ rb_link_node(&pg_item->node, parent, node);