union bit (trunk only)

I'm pretty sure that some pre-standard compilers don't know how to
apply an initializer to a variable of type union.  Unfortunately, I don't
have access to one to check.  Fortunately, there's no need to explicitly
initialize `zeroany' since the default value is what we want--the first
field will be set to zero or null as appropriate (null in this case).

     Strictly speaking, this isn't adequate; what if long is wider than a
pointer rather than narrower?  Using `= {DUMMY}' didn't handle that case
either; the ordering of the union's fields controls which bits get stored.
As a practical matter, it should make no difference.  As long as the code
reading a union accesses the same field as the code writing that union set
up in it, anything in extraneous bits should be irrelevant--except perhaps
when a debugger tries to format things.  The whole issue has always been
implicitly based on the assumption that null pointers have all bits zero
in the first place; that's typical but not guaranteed.
This commit is contained in:
nethack.rankin
2006-07-11 04:08:24 +00:00
parent 0abece54c1
commit 65e12e0362
2 changed files with 4 additions and 4 deletions

View File

@@ -61,7 +61,7 @@ void
zero_anything(any)
anything *any;
{
(void) memset((genericptr_t)any, 0, sizeof(anything));
*any = zeroany;
}
boolean