RH9 ucspi & qmail compile error

Miroslav Petricek mirek na petricek.cz
Čtvrtek Duben 3 16:42:08 CEST 2003


On Thu, Apr 03, 2003 at 02:04:33PM +0200, Ing. Pavel PaJaSoft Janousek wrote:
> > Je to novou verzi libc - errno uz neni promenna ale lze se
> > k ni dostat prez nejakou funkci - zajistuje to aby kazdy thread
> 
> 	To myslite vazne? Tak to muzeme zahodit 95% veskerych programu...:-(
> Vzdyt testovani errno bezprostredne alepson po I/O operaci byl zaklad...
>  Neni to dokonce i POSIXu - tedy nemyslim cisla, ale nazvy chybovych stavu? 
> 

Zas až tak horké to není.

Cituji z mail.qmail.general

The explanation is simple:  'errno' is not required nor guaranteed to
be an int, only a modifiable lvalue.  Many modern *nixes define it to
be an expression involving a function call in order to be threadsafe.
The <errno.h> header will do it all for you.

Most *nixes also have some kind of backwards compatibility for the
annoying historical practice of writing "extern int errno;" rather 
than including the header.  The most recent version of glibc removed 
that compatability. (C was standardized in 1989, you'd think 14 years 
would be enough time to catch up.)

****

Problém je tedy v tom, že qmail a další software od djb neincludoval
errno.h, tak jak by se to správně mělo dělat, ale deklaroval externí 
proměnnou takříkajíc na vlastní pěst. Náprava je tedy snadná. Odstranit
deklaraci errno a inkludovat errno.h.

-- 
/* Miroslav Petricek             mirek na petricek.cz
   UNIS COMPUTERS, spol. s r.o.  Systemovy inzenyr - UNIX
-- http://www.petricek.cz/ ------ ICQ: 56183467  ------


Další informace o konferenci Linux