[Swan-dev] pointer initialization and fcfcde7422a4805a56a3a4a175271c56fbbbab12
D. Hugh Redelmeier
hugh at mimosa.com
Sun Jun 26 02:24:15 UTC 2016
This commit is technically wrong. I admit that the problem will not show
up on most machines.
The C standard does not require that the binary representation of a NULL
pointer be 0. Initializing a struct by zeroing bytes does not guarantee
that pointer fields are initialized to NULL.
On the other hand, the C standard requires a static object be
initialized by default in such a way that pointers are initialized to
NULL. (The rule gets more intricate for unions: the first alternative is
initialized.)
That's why the original code was written the way it was.
That's why many calls the zero() note the issue of NULL.
commit fcfcde7422a4805a56a3a4a175271c56fbbbab12
Author: Andrew Cagney <cagney at gnu.org>
Date: Thu Feb 11 20:05:00 2016 -0500
pluto: allocate empty "struct state" using alloc_thing()
diff --git a/programs/pluto/state.c b/programs/pluto/state.c
index 1b8b538..ee3884d 100644
--- a/programs/pluto/state.c
+++ b/programs/pluto/state.c
@@ -460,13 +460,10 @@ static struct state_hash_table statetable = {
*/
struct state *new_state(void)
{
- /* initialized all to zero & NULL */
- static const struct state blank_state;
-
static so_serial_t next_so = SOS_FIRST;
struct state *st;
- st = clone_thing(blank_state, "struct state in new_state()");
+ st = alloc_thing(struct state, "struct state in new_state()");
st->st_serialno = next_so++;
passert(next_so > SOS_FIRST); /* overflow can't happen! */
st->st_whack_sock = NULL_FD;
More information about the Swan-dev
mailing list