[comp.lang.c] Typecasting NULL to far FULL.

venkat@matrix.UUCP (D Venkatrangan) (08/21/90)

Greetings, programmers.

I have run into what appears to be a minor problem, but in reality is turning
into a nightmare...

I am writing a library containing interface routines into a driver.  These
interface routines are compiled into small, medium and large model libraries.
Since the driver code has its own data segment, these interface routines
convert a model-dependent pointer of the linked program into a far pointer 
and then call the driver.

The specific problem is with pointers that are NULL.  If I have 

	char *p;
	char far *farp;

and if p is NULL, the following assignment

	farp = (char far *)p;

produces a farp with FP_SEG(farp) == current DS and FP_OFF(farp) == 0.
Instead, I want FP_SEG(farp) == 0 and FP_OFF(farp) == 0, because the driver
checks for a (long)0 for NULL pointer and a DS:0 will not be considered to be
NULL by the driver.

Of course, the following assignement produces the correct result.

	farp = p ? (char far *)p : (char far *)0L;

But since this is being done many times over, I am interested in a simpler
solution that will avoid the code overhead.

I am using Microsoft C 5.1

Thanks.