Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Jan 1998 18:19:47 +0000 (GMT)
From:      Terry Lambert <tlambert@primenet.com>
To:        asami@cs.berkeley.edu (Satoshi Asami)
Cc:        tlambert@primenet.com, jamie@itribe.net, jdevale@ece.cmu.edu, hackers@FreeBSD.ORG
Subject:   Re: FreeBSD Netcards
Message-ID:  <199801121819.LAA24153@usr04.primenet.com>
In-Reply-To: <199801100346.TAA04537@silvia.HIP.Berkeley.EDU> from "Satoshi Asami" at Jan 9, 98 07:46:29 pm

next in thread | previous in thread | raw e-mail | index | archive | help
>  * 1)	Map a zero filled page to page zero.  This causes the NULL
>  * 	to be treated, incorrectly, as a NULL valued string instead
>  * 	of a NULL.  A process which is still running can be examined
>  * 	via /proc for the address space mappings to see if it has
>  * 	triggered the page 0 mapping.
> 
> What the bleep is a "NULL valued string"?  Are you aware that the
> so-called NULL pointer (or rather "0 in a pointer context") is not
> necessarily equal to a bit string of all zero's?  (What was that
> example of this not being true, hmm, was it a PDP-11?)

If you map a zero filled page to page zero, then a dereference of
page zero (ie: a NULL pointer) returns a string of zeros.

The PDP/11 had a string that was non-NULL mapped at page zero because
the process mapping started at page 0, and so the PDP/11 "magic" was
referenced instead of a bit string of all zeros (0177555, if my
memory is not failing -- that's an octal short.).

Also, you're right that the standard allows for a non-zero value
for NULL.  I don't know of anyone who uses this; it's pretty much
in there to cause problems, like a lot of other "features", ie: the
assumption that certain optimizations are allowable unless they are
explicitly disallowed, etc..


> Oh, you mean an empty string?  Oh, ok.  That has nothing to do with
> NULL though.  (And there is no such thing as "NULL byte"...try "null
> character' instead.)

Heh.  I expected SEF to stomp in my cheerios here first.  8-).

If you:

	#include <stdio.h>

	main()
	{
		char    c = NULL;

		printf( "The value of a NULL character is %d\n", c);

		exit( 0);
	}

The program, when compiled, does not bitch about the "loss of precision"
in the assignment in the declaration of 'c'.  8-).

The program, when run, displays:

	The value of a NULL character is 0

I'd say the compiler says that 'c' is a "NULL character", until it
bitches, properly, about the assignment.

The useful thing about thinking about it this way is that wchar_t
types keep working, whereas if I defined a "null character" on a
non-two's complement architecture, it would be damaged to a non-zero
valued wchar_t on sign extension.

Heh.


So pretty much until you fix the compiler, I'm going to keep my
terminology as fuzzy as the compiler's enforcement.


					Regards,
					Terry Lambert
					terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199801121819.LAA24153>