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>
This commit is contained in:
parent
92d8ed8ac1
commit
14825944d7
11
oidtree.c
11
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));
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user