cvs commit: src/sys/netinet/libalias alias_util.c
Bruce Evans
brde at optusnet.com.au
Tue Dec 4 20:35:39 PST 2007
On Tue, 4 Dec 2007, Max Laier wrote:
> On Tuesday 04 December 2007, Alexey Dokuchaev wrote:
>> On Mon, Dec 03, 2007 at 04:57:33PM -0500, John Baldwin wrote:
>>> On Monday 03 December 2007 10:24:52 am Dag-Erling Sm??rgrav wrote:
>>>> John Birrell <jb at FreeBSD.org> writes:
>>>>> Log:
>>>>> Fix strict alias warnings.
>>>>
>>>> A much simpler solution (relative to the previous revision):
>>>>
>>>> @@ -131,10 +131,10 @@
>>>> sum += oddbyte;
>>>> }
>>>> /* "Pseudo-header" data */
>>>> - ptr = (u_short *) & (pip->ip_dst);
>>>> + ptr = (void *)&pip->ip_dst;
>>>> sum += *ptr++;
>>>> sum += *ptr;
>>>> - ptr = (u_short *) & (pip->ip_src);
>>>> + ptr = (void *)&pip->ip_src;
>>>> sum += *ptr++;
>>>> sum += *ptr;
>>>> sum += htons((u_short) ntcp);
>>>
>>> *ptr++ would choke since pointer arith on (void *) is undefined
>>> AFAIK.
Um, ptr has type `u_short *', not `void *'. The original cast was
used to break a warning (and to add 3 style bugs). With stricter type
checking, it stopped "working". Now the warning is broken by casting
to `void *' which removes all knowledge of alignment restrictions and
I suppose must relax aliasing rules (else `void *' couldn't be used
for anything).
>> I've been under impression that ++ on void * whould simply increase it
>> by one.
This is a gcc bugfeature. It is disabled by -Wpointer-arith for FreeBSD
kernels.
> wasn't that the reason why caddr_t exists? i.e. pointer arithmetic on
> void * is bad, but on caddr_t it's kinda okay.
caddr_t is just an old mistake in this area. The kernel still hasn't
caught up with the post K&R-1 (1978) changes which introduced `void *'.
(A few places might need to represent "core" addresses that can't be
represented by `void *' due to separate address spaces or things like
PAE, but that problem is now handed by vm_^Woffset_t, vm_paddr_t and
vm_ooffset_t. caddr_t = `char *' has never been able to handle it.
"core" mostly means "mapped", so the problem doesn't affect most uses
of caddr_t.)
Bruce
More information about the cvs-src
mailing list