Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Thu, 6 Jun 2013 21:13:48 -0400
From: Rich Felker <dalias@...ifal.cx>
To: musl@...ts.openwall.com
Subject: Re: apr and time.h

On Thu, Jun 06, 2013 at 10:38:37PM +0200, Szabolcs Nagy wrote:
> * Jens <jensl@...s.mine.nu> [2013-06-06 19:42:39 +0200]:
> > apr wont build (for me) with the following part of time.h (musl-0.9.10):
> > 
> > #if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
> > #define tm_gmtoff __tm_gmtoff
> > #define tm_zone __tm_zone
> > #endif
> > 
> > apr implements a struct with a member named tm_gmtoff.
> > 
> 
> you gotta love "portability runtime" libraries..
> 
> tm_ is in the reserved namespace of posix,
> but time.h is specified by iso c as well
> which does not have such restriction
> so in this case they are not strictly wrong
> 
> the correct behaviour of musl would be
> to only expose iso c interfaces by default
> but then all the codes in the world break..
> (including apr most likely)
> 
> an ugly workaround that does less namespace
> pollution (no tm_* macro):
> 
> #if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
> #define __tm_gmtoff tm_gmtoff
> #define __tm_zone tm_zone
> #define _FIX(x) x
> #else
> #define _FIX(x) __##x
> #endif
> 
> struct tm {
> 	/*...*/
> 	long _FIX(tm_gmtoff);
> 	const char *_FIX(tm_zone);
> };
> 
> either this or fix apr so it does not collide
> with the posix namespace..

This is ugly. I would just put the #if right inside the struct
definition. Any objections to this change? If I'm not mistaken it's
the way glibc and other libraries do it.

Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.