Mail Archives: cygwin/2003/05/07/21:41:12
On Wed, 7 May 2003, Charles Wilson wrote:
> Jason Tishler wrote:
>
> > +#define NAMESPACE_PREFIX "Global\\"
> > +#define FULL_NAMESPACE_PATH(name) \
> > + ((LOBYTE(LOWORD(GetVersion())) >= 5 && \
> > + HIBYTE(LOWORD(GetVersion())) >= 1) ? NAMESPACE_PREFIX name : name) \
> > +
> > +#define CYGWIN_IPCNT_SEMCTL FULL_NAMESPACE_PATH(CYGWIN_IPCNT_SEMCTL_BASE)
> > +#define CYGWIN_IPCNT_SEMSEM FULL_NAMESPACE_PATH(CYGWIN_IPCNT_SEMSEM_BASE)
> > +#define CYGWIN_IPCNT_SEMSHM FULL_NAMESPACE_PATH(CYGWIN_IPCNT_SEMSHM_BASE)
> > +#define CYGWIN_IPCNT_SEMMSG FULL_NAMESPACE_PATH(CYGWIN_IPCNT_SEMMSG_BASE)
>
> Wait, aren't #define macros resolved at compile time? This would then
> define these names as "foo" or "Global\\foo" depending on which machine
> the package was BUILT on.
>
> Worse, if the cygipc library itself were built on WinXP, but you build a
> client app on W98 -- then your code thinks "foo" but the daemon things
> "Global\\foo". Or vice versa.
>
> I think this needs to be a runtime function, not a compiletime macro.
> --Chuck
Umm, Chuck, GetVersion() is a run-time function...
For example, the CYGWIN_IPCNT_SEMCTL macro will resolve to :
((LOBYTE(LOWORD(GetVersion())) >= 5 && HIBYTE(LOWORD(GetVersion())) >= 1) ?
"Global\\" "MultiSemCtl2_" : "MultiSemCtl2_")
which will be evaluated at run-time (the two strings between '?' and ':'
will be concatenated at compile-time, though).
Igor
--
http://cs.nyu.edu/~pechtcha/
|\ _,,,---,,_ pechtcha AT cs DOT nyu DOT edu
ZZZzz /,`.-'`' -. ;-;;,_ igor AT watson DOT ibm DOT com
|,4- ) )-,_. ,\ ( `'-' Igor Pechtchanski
'---''(_/--' `-'\_) fL a.k.a JaguaR-R-R-r-r-r-.-.-. Meow!
Knowledge is an unending adventure at the edge of uncertainty.
-- Leto II
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -