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