On Thu, Dec 26, 2002 at 12:06:38PM +0100, Martin Schulze wrote: > > Please note that this software will, at some point in the future, fail > > to compile again. All this has done is buy some time. Please make sure > > your software fixes the broken usage of "extern int errno;" and replaces > > it with proper uses of the <errno.h> header.
> Err? Did the behavior change with this version and "extern int errno;" > became wrong suddenly? Section 7.5 of C99 says: It is unspecified whether errno is a macro or an identifier declared with external linkage. (I don't have older C standards handy, so I don't know if this is a change or not) Glibc's errno has been a macro for a while to accomidate thread-safety: /* When using threads, errno is a per-thread value. */ # define errno (*__errno_location ()) Using the `extern int errno;' was bypassing glibc's macro and using an internal variable - something which upstream is now using linker magic to prevent. As every "SOVERSION 6" (6.1, 0.3, etc. for non i386 archs) has had this as a macro, upstream doesn't provide any compatabilty with old apps like they would for other functions whose parameters have changed. Tks, Jeff Bailey

