On Dec 1 11:13, Christopher Faylor wrote: > On Sat, Dec 01, 2007 at 11:31:55AM +0100, Corinna Vinschen wrote: > >On Nov 30 16:36, Christopher Faylor wrote: > >> But we do have a fairly transparent way of dealing with this problem which > >> will allow any ancient apps to continue to work. We used it for the > >> transition > >> from 32 -> 64 bit file I/O. > > > >Unfortunately it doesn't work for variables. We can hide the timezone > >function, but how do we alias timezone to _timezone in libcygwin.a? > > Why do you say that? It should just be a simple aliasing.
Because it doesn't work, AFAICS. Actual aliasing in localtime.cc as in extern long timezone __attribute__ ((alias("_timezone"))); doesn't work because it breaks generating cygdll.a due to multiple definitions of timezone, the function in times.cc, the variable in localtime.cc. Using the NEW_FUNCTIONS mechanism in Makefile.in doesn't work either. Apply this patch: Index: Makefile.in =================================================================== RCS file: /cvs/src/src/winsup/cygwin/Makefile.in,v retrieving revision 1.202 diff -u -p -r1.202 Makefile.in --- Makefile.in 1 Dec 2007 13:04:43 -0000 1.202 +++ Makefile.in 1 Dec 2007 17:01:32 -0000 @@ -214,7 +214,8 @@ NEW_FUNCTIONS:=regcomp posix_regcomp \ stat _stat64 \ telldir _telldir64 \ tmpfile _tmpfile64 \ - truncate _truncate64 + truncate _truncate64 \ + timezone _timezone API_VER:=$(srcdir)/include/cygwin/version.h Index: include/cygwin/time.h =================================================================== RCS file: /cvs/src/src/winsup/cygwin/include/cygwin/time.h,v retrieving revision 1.7 diff -u -p -r1.7 time.h --- include/cygwin/time.h 1 Dec 2007 13:49:45 -0000 1.7 +++ include/cygwin/time.h 1 Dec 2007 17:01:32 -0000 @@ -29,7 +29,7 @@ time_t __cdecl timegm (struct tm *); extern int daylight __asm__ ("__daylight"); #ifndef __timezonefunc__ -extern long timezone __asm__ ("__timezone"); +extern long timezone; #endif #endif When you build this application: #include <sys/time.h> int main () { printf ("&timezone = %p\n", &timezone); printf ("&_timezone = %p\n", &_timezone); return 0; } The result will be something like this: $ ./test-timezone &timezone = 0x401170 &_timezone = 0x611942c0 So timezone is not the same as _timezone in the application and only _timezone will be handled inside of Cygwin. Am I missing something? Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat -- 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/