Proposal: API for thread-safe time zone functions

Clive D.W. Feather clive at demon.net
Fri Jun 8 15:10:59 UTC 2001


Garrett Wollman said:
>>     struct timezone;                      // Opaque structure
>>     typedef struct timezone timezone_t;   // Opaque typedef
> 
> Not at all.  That typedef is not opaque, it is entirely transparent,
> and simply resolves to an incomplete structure.  Consider the
> following two-line compilation unit:
> 
> struct timezone *foo;		// Compiles fine...
> timezone_t foo;			// Syntax error!

Not a syntax error, a declaration error. Try:

clive at finch-staff-1> cat xx.c
struct timezone;
typedef struct timezone timezone_t;

struct timezone s;
struct timezone *sp;
extern struct timezone es;
extern struct timezone *esp;
timezone_t t;
timezone_t *tp;
extern timezone_t et;
extern timezone_t *etp;
clive at finch-staff-1> cc xx.c
xx.c:4: storage size of `s' isn't known
xx.c:8: storage size of `t' isn't known
clive at finch-staff-1>

Nothing to do with typedef or not, just to do with the rules for
declarations.

>> You *are* using public and private headers, aren't you ? That is, users
>> of your library include <timezone.h>
> 
> No, users of my library include <foo.h>.  It defines some interfaces
> which take a timezone parameter.

So in foo.h write the one line:

    typedef struct timezone timezone_t;

End of story.

-- 
Clive D.W. Feather  | Work:  <clive at demon.net>   | Tel:  +44 20 8371 1138
Internet Expert     | Home:  <clive at davros.org>  | Fax:  +44 20 8371 1037
Demon Internet      | WWW: http://www.davros.org | DFax: +44 20 8371 4037
Thus plc            |                            | Mobile: +44 7973 377646 



More information about the tz mailing list