delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2003/05/07/21:41:12

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
X-Authentication-Warning: slinky.cs.nyu.edu: pechtcha owned process doing -bs
Date: Wed, 7 May 2003 21:40:57 -0400 (EDT)
From: Igor Pechtchanski <pechtcha AT cs DOT nyu DOT edu>
Reply-To: cygwin AT cygwin DOT com
To: Charles Wilson <cwilson AT ece DOT gatech DOT edu>
cc: Jason Tishler <jason AT tishler DOT net>, <cygwin AT cygwin DOT com>
Subject: Re: cygipc (and PostgreSQL) XP problem resolved!
In-Reply-To: <3EB9A54B.8060500@ece.gatech.edu>
Message-ID: <Pine.GSO.4.44.0305072136040.3212-100000@slinky.cs.nyu.edu>
Importance: Normal
MIME-Version: 1.0

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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019