On 27/09/2021 12:00, Ævar Arnfjörð Bjarmason wrote:
On Mon, Sep 27 2021, Phillip Wood wrote:
Hi Ævar
On 27/09/2021 01:39, Ævar Arnfjörð Bjarmason wrote:
Use the same pattern for cb_init() as the one established in the
recent refactoring of other such patterns in
5726a6b4012 (*.c *_init(): define in terms of corresponding *_INIT
macro, 2021-07-01).
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx>
---
cbtree.h | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/cbtree.h b/cbtree.h
index a04a312c3f5..dedbb8e2a45 100644
--- a/cbtree.h
+++ b/cbtree.h
@@ -37,11 +37,12 @@ enum cb_next {
CB_BREAK = 1
};
-#define CBTREE_INIT { .root = NULL }
+#define CBTREE_INIT { 0 }
static inline void cb_init(struct cb_tree *t)
{
- t->root = NULL;
+ struct cb_tree blank = CBTREE_INIT;
+ memcpy(t, &blank, sizeof(*t));
}
Slightly off topic but would this be a good site for a compound
literal test balloon?
*t = (struct cb_tree){ 0 };
Compound literals are in C99 and seem to have been supported by MSVC
since 2013 [1].
I think that's a good thing to test out, FWIW I've also tested it on the
IBM xlc, Oracle SunCC and HP/UX's aCC, they all seem to accept it.
Thanks for taking the time to test those other systems, it's good to
know they support compound literals
But I'd prefer just doing that in some general follow-up to bd4232fac33
(Merge branch 'ab/struct-init', 2021-07-16), i.e. let's just use the
init pattern it established here.
I agree it makes sense to introduce it as a separate series. I'm not
sure if there is a pressing need for them but it is the sort of thing
that is occasionally useful.
Best Wishes
Phillip