[releng_6 tinderbox] failure on sparc64/sparc64

Giorgos Keramidas keramida at ceid.upatras.gr
Mon Feb 13 00:48:38 PST 2006


On 2006-02-13 00:34, Colin Percival <cperciva at freebsd.org> wrote:
>Giorgos Keramidas wrote:
>> On 2006-02-13 00:23, "M. Warner Losh" <imp at bsdimp.com> wrote:
>>> 	struct foo foo;
>>> 	uint32_t value[sizeof(foo) / sizeof(uint32_t)];
>>>
>>> 	memcpy(value, &foo);
>>> 	// write out value one 32-bit word at a time
>>>
>>> Is that right?  Or at least 'proper' here means defined.
>>
>> AFAIK, yes.
>
> I agree that the behaviour of the above code is defined, but
> I'd be much happier if value[] was defined to be an array of
> length ((sizeof(foo) - 1) / sizeof(uint32_t) + 1), just in
> case sizeof(foo) happens to not be a multiple of 4.  :-)

Good thinking.  It's probably a good idea to avoid copying random
garbage, and using something like:

    struct foo foo;
    uint32_t value[sizeof(uint32_t) * (sizeof(foo) / sizeof(uint32_t) + 1)];

and then copying only sizeof(foo) bytes.  This is probably defined too
and won't allow overflowing of value[], but I don't really want to know
what it does on machines of varying endianess :-)

- Giorgos



More information about the freebsd-arch mailing list