[Exim] Exim 4.30 on IRIX 6.5.19m: conflicting types for `ine…

Top Page
Delete this message
Reply to this message
Author: Bernhard Erdmann
Date:  
To: exim-users
Subject: [Exim] Exim 4.30 on IRIX 6.5.19m: conflicting types for `inet_ntoa'
Hi,

compiling Exim 4.30 on IRIX 6.5.19m using gcc 3.3 (SGI Freeware) I get
an error message:


[...]
gcc -c -O2 -DUSE_INET_NTOA_FIX -I.    header.c
gcc -c -O2 -DUSE_INET_NTOA_FIX -I.    host.c
host.c:46: error: conflicting types for `inet_ntoa'
/usr/include/arpa/inet.h:74: error: previous declaration of `inet_ntoa'
gmake[1]: *** [host.o] Error 1
gmake[1]: Leaving directory `/usr/local/src/exim-4.30/build-IRIX6-mips'
gmake: *** [go] Error 2



How to work around?


src/host.c reads:


#ifdef USE_INET_NTOA_FIX
/*************************************************
*         Replacement for broken inet_ntoa()     *
*************************************************/


/* On IRIX systems, gcc uses a different structure passing convention to the
native libraries. This causes inet_ntoa() to always yield 0.0.0.0 or
255.255.255.255. To get round this, we provide a private version of the
function here. It is used only if USE_INET_NTOA_FIX is set, which should
happen
only when gcc is in use on an IRIX system. Code send to me by J.T. Breitner,
with these comments:

code by Stuart Levy
as seen in comp.sys.sgi.admin

Arguments:  sa  an in_addr structure
Returns:        pointer to static text string
*/


uschar *
inet_ntoa(struct in_addr sa)
{
static uschar addr[20];
sprintf(addr, "%d.%d.%d.%d",
         (US &sa.s_addr)[0],
         (US &sa.s_addr)[1],
         (US &sa.s_addr)[2],
         (US &sa.s_addr)[3]);
   return addr;
}
#endif