[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RE: errno variable on the Hurd (was: Re: Postgresql question)



> On Fri, Jan 28, 2000 at 09:36:30AM -0800, Brent Fulgham wrote:
> > Errno seems problematic on the Hurd for some reason.  I've seen
> > a few cases where the header has needed to be added to source
> > files for a clean compile, whereas it was not needed on other
> > environments (such as Linux).
> 
> Of course, using errno without including <errno.h> is the 
> Wrong Thing (tm).
> 
> There is a good reason, too:
> 
> /* Declare the `errno' variable, unless it's defined as a macro by
>    bits/errno.h.  This is the case in GNU, where it is a per-thread
>    variable.  This redeclaration using the macro still works, but it
>    will be a function declaration without a prototype and may trigger
>    a -Wstrict-prototypes warning.  */
> #ifndef errno
> extern int errno;
> #endif
>  
> and in bits/errno.h:
> 
> /* errno is a per-thread variable.  */
> #include <hurd/threadvar.h>
> #define errno   (*__hurd_errno_location ())
> #define __set_errno(val) errno = (val)
> 
> So it is a macro and not an extern int variable, which is why 
> the linker can't see it.
> 
Ahh -- this makes  a lot of sense now.  So we should probably file
bugs upstream against software that makes use of errno without including
the errno header file in a particular module/source file.  I think
there's a lot of stuff out there that relies on the belief that it's
an `extern int`, which is (as we now know) not always the case.

-Brent


Reply to: