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