Re: [PATCH] Re: [ipchains] logging tcp/udp port numbers

Brandon S. Allbery KF8NH (allbery@kf8nh.apk.net)
Thu, 19 Nov 1998 18:06:10 -0500


In message <730l68$95r$1@palladium.transmeta.com>, H. Peter Anvin writes:
+-----
| The error occurs on bigendian machines because you're effectively
| doing the moral equivalent of:
|
| foo = *(short *)(&args[n--]);
|
| instead of
|
| foo = (short) *(int *)(&args[n--]);
|
| ... which is the same of littleendian boxen but not bigendian.
+--->8

The actual expression is more like

__internal_argp = (void *) &args;
foo = *((short *) __internal_argp)++;

so while you get the correct value on little-endian, the next value will be
taken from the wrong address.

-- 
brandon s. allbery	[os/2][linux][solaris][japh]	 allbery@kf8nh.apk.net
system administrator	     [WAY too many hats]	   allbery@ece.cmu.edu
carnegie mellon / electrical and computer engineering			 KF8NH
			  Kiss my bits, Billy-boy.

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/