From: | darrenk(at)insightdist(dot)com (Darren King) |
---|---|
To: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: [PORTS] (void)NULL in macros and aix |
Date: | 1998-01-05 14:13:30 |
Message-ID: | 9801051413.AA67202@ceodev |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
> >
> > 2. This is more like a C issue rather than aix-specific. The aix compiler complains
> > about assigning the (void)NULL to isnull in the heap_getattr macro. Changing the
> > (void) to (bool) works and seems like it should be (bool) to match the type of isnull,
> > shouldn't it?
> >
> > *** include/access/heapam.h.org Sun Jan 4 23:52:05 1998
> > --- include/access/heapam.h Sun Jan 4 23:52:11 1998
> > ***************
> > *** 101,110 ****
> > #define heap_getattr(tup, b, attnum, tupleDesc, isnull) \
> > (AssertMacro((tup) != NULL) ? \
> > ((attnum) > (int) (tup)->t_natts) ? \
> > ! (((isnull) ? (*(isnull) = true) : (void)NULL), (Datum)NULL) : \
> > ((attnum) > 0) ? \
> > fastgetattr((tup), (attnum), (tupleDesc), (isnull)) : \
> > ! (((isnull) ? (*(isnull) = false) : (void)NULL), heap_getsysattr((tup), (b), (attnum))) : \
> > (Datum)NULL)
> >
> > extern HeapAccessStatistics heap_access_stats; /* in stats.c */
> > --- 101,110 ----
> > #define heap_getattr(tup, b, attnum, tupleDesc, isnull) \
> > (AssertMacro((tup) != NULL) ? \
> > ((attnum) > (int) (tup)->t_natts) ? \
> > ! (((isnull) ? (*(isnull) = true) : (bool)NULL), (Datum)NULL) : \
> > ((attnum) > 0) ? \
> > fastgetattr((tup), (attnum), (tupleDesc), (isnull)) : \
> > ! (((isnull) ? (*(isnull) = false) : (bool)NULL), heap_getsysattr((tup), (b), (attnum))) : \
> > (Datum)NULL)
> >
> > extern HeapAccessStatistics heap_access_stats; /* in stats.c */
>
> We made if void so that we would stop getting gcc warnings about 'unused
> left-hand side of conditional' messages. Does aix complain or stop. If
> it just complains, I think we have to leave it alone, because everyone
> else will complain about bool.
But this is then trying to assign a (void)NULL to isnull, which is a bool (really a char).
IMHO gcc should complain. Aix gives a severe error since the types don't match.
Maybe better to have a warning than fix it by causing an error. Gcc just happens to be in
a forgiving mood. What does the C standard say about casting (void) ptrs to other types?
Why not make this a _little_ more legible and compiler-friendly by making it into an
if-then-else block? Is the ?: operator really saving any ops?
---------
Re: the StrNCpy macro...
The aix compiler complains about trying to assign a (void)NULL to (len > 0). Can this be
fixed with another set of parens separating the returned dest from the ?: operator?
Like...
(((strncpy((dst),(src),(len)),(len > 0)) ? *((dst)+(len)-1)='\0' : ((char)NULL)),(dst)))
^ ^
This gets the return value back doesn't it? And changing to a (char)NULL makes the
compiler happy again too. Is this acceptable?
darrenk
From | Date | Subject | |
---|---|---|---|
Next Message | Peter T Mount | 1998-01-05 15:10:35 | Re: [HACKERS] Re: development |
Previous Message | Goran Thyni | 1998-01-05 13:28:25 | Re: [HACKERS] subselect |