aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Carlo Marcelo Arenas Belón <carenas@gmail.com> 2021-08-08 18:38:31 -0700
committerGravatar Junio C Hamano <gitster@pobox.com> 2021-08-09 09:01:30 -0700
commit14825944d7c57b6acd7e1a05a4c6046965efc6a5 (patch)
tree2f2bc32f1bbc37aea6ebf24d9cf8fca9ce9c2848
parent92d8ed8ac101d62183d51f280b90efb1de1bda5c (diff)
downloadgit-14825944d7c57b6acd7e1a05a4c6046965efc6a5.tar.gz
git-14825944d7c57b6acd7e1a05a4c6046965efc6a5.zip
oidtree: avoid nested struct oidtree_node
92d8ed8ac1 (oidtree: a crit-bit tree for odb_loose_cache, 2021-07-07) adds a struct oidtree_node that contains only an n field with a struct cb_node. unfortunately, while building in pedantic mode witch clang 12 (as well as a similar error from gcc 11) it will show: oidtree.c:11:17: error: 'n' may not be nested in a struct due to flexible array member [-Werror,-Wflexible-array-extensions] struct cb_node n; ^ because of a constrain coded in ISO C 11 6.7.2.1¶3 that forbids using structs that contain a flexible array as part of another struct. use a strict cb_node directly instead. Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--oidtree.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/oidtree.c b/oidtree.c
index 7eb0e9ba05..580cab8ae2 100644
--- a/oidtree.c
+++ b/oidtree.c
@@ -6,11 +6,6 @@
#include "alloc.h"
#include "hash.h"
-struct oidtree_node {
- /* n.k[] is used to store "struct object_id" */
- struct cb_node n;
-};
-
struct oidtree_iter_data {
oidtree_iter fn;
void *arg;
@@ -35,13 +30,13 @@ void oidtree_clear(struct oidtree *ot)
void oidtree_insert(struct oidtree *ot, const struct object_id *oid)
{
- struct oidtree_node *on;
+ struct cb_node *on;
if (!oid->algo)
BUG("oidtree_insert requires oid->algo");
on = mem_pool_alloc(&ot->mem_pool, sizeof(*on) + sizeof(*oid));
- oidcpy_with_padding((struct object_id *)on->n.k, oid);
+ oidcpy_with_padding((struct object_id *)on->k, oid);
/*
* n.b. Current callers won't get us duplicates, here. If a
@@ -49,7 +44,7 @@ void oidtree_insert(struct oidtree *ot, const struct object_id *oid)
* that won't be freed until oidtree_clear. Currently it's not
* worth maintaining a free list
*/
- cb_insert(&ot->tree, &on->n, sizeof(*oid));
+ cb_insert(&ot->tree, on, sizeof(*oid));
}