From 1f0fc69d60637d49914930a3453ee6889533763d Mon Sep 17 00:00:00 2001 From: Gerhard Rieger Date: Thu, 2 Apr 2015 17:21:45 +0200 Subject: [PATCH] Red Hat issue: socat 1.7.2.4 build failure missing linux/errqueue.h --- CHANGES | 6 ++++++ config.h.in | 3 +++ configure.in | 19 ++++++++++++++++++- xio-ip.c | 4 ++-- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 0c1826b..f935777 100644 --- a/CHANGES +++ b/CHANGES @@ -325,6 +325,12 @@ porting: Lauri Tirkkonen contributed a patch regarding netinet/if_ether.h on Illumos + Red Hat issue 1182005: socat 1.7.2.4 build failure missing + linux/errqueue.h + Socat failed to compile on on PPC due to new requirements for + including and a weakness in the conditional code. + Thanks to Michel Normand for reporting this issue. + new features: added option max-children that limits the number of concurrent child processes. Thanks to Sam Liddicott for providing the patch. diff --git a/config.h.in b/config.h.in index 0dcf90f..b94e5f2 100644 --- a/config.h.in +++ b/config.h.in @@ -317,6 +317,9 @@ /* define if your struct sigaction has sa_sigaction */ #undef HAVE_STRUCT_SIGACTION_SA_SIGACTION +/* define if you have struct sock_extended_err */ +#undef HAVE_STRUCT_SOCK_EXTENDED_ERR + /* Define if your struct termios has component c_ispeed */ #undef HAVE_TERMIOS_ISPEED diff --git a/configure.in b/configure.in index 8e59df0..cd4a5c5 100644 --- a/configure.in +++ b/configure.in @@ -81,7 +81,8 @@ AC_HEADER_RESOLV() AC_CHECK_HEADERS(termios.h linux/if_tun.h) AC_CHECK_HEADERS(net/if_dl.h) AC_CHECK_HEADERS(linux/types.h) -AC_CHECK_HEADER(linux/errqueue.h, AC_DEFINE(HAVE_LINUX_ERRQUEUE_H), [], [#include ]) +AC_CHECK_HEADER(linux/errqueue.h, AC_DEFINE(HAVE_LINUX_ERRQUEUE_H), [], [#include +#include ]) AC_CHECK_HEADERS(sys/utsname.h sys/select.h sys/file.h) AC_CHECK_HEADERS(util.h bsd/libutil.h libutil.h sys/stropts.h regex.h) AC_CHECK_HEADERS(linux/fs.h linux/ext2_fs.h) @@ -952,6 +953,22 @@ if test $sc_cv_type_sa_family_t = yes; then fi AC_MSG_RESULT($sc_cv_type_sa_family_t) +AC_MSG_CHECKING(for struct sock_extended_err) +AC_CACHE_VAL(sc_cv_struct_sock_extended_err, +[AC_TRY_COMPILE([#include +#if TIME_WITH_SYS_TIME +#include +#endif +#if HAVE_LINUX_ERRQUEUE_H +#include +#endif],[struct sock_extended_err s;], +[sc_cv_struct_sock_extended_err=yes], +[sc_cv_struct_sock_extended_err=no])]) +if test $sc_cv_struct_sock_extended_err = yes; then + AC_DEFINE(HAVE_STRUCT_SOCK_EXTENDED_ERR) +fi +AC_MSG_RESULT($sc_cv_struct_sock_extended_err) + AC_MSG_CHECKING(for struct sigaction.sa_sigaction) AC_CACHE_VAL(sc_cv_struct_sigaction_sa_sigaction, [AC_TRY_COMPILE([#include ],[struct sigaction s;s.sa_sigaction=0;], diff --git a/xio-ip.c b/xio-ip.c index bc870d2..0c9141d 100644 --- a/xio-ip.c +++ b/xio-ip.c @@ -506,7 +506,7 @@ int xiolog_ancillary_ip(struct cmsghdr *cmsg, int *num, return STAT_OK; #endif /* defined(IP_PKTINFO) && HAVE_STRUCT_IN_PKTINFO */ #endif /* WITH_IP4 */ -#ifdef IP_RECVERR +#if defined(IP_RECVERR) && HAVE_STRUCT_SOCK_EXTENDED_ERR case IP_RECVERR: { struct sock_extended_err *err = (struct sock_extended_err *)CMSG_DATA(cmsg); @@ -524,7 +524,7 @@ int xiolog_ancillary_ip(struct cmsghdr *cmsg, int *num, err->ee_code, '\0', err->ee_info, '\0', err->ee_data); return STAT_OK; } -#endif /* IP_RECVERR */ +#endif /* defined(IP_RECVERR) && HAVE_STRUCT_SOCK_EXTENDED_ERR */ #ifdef IP_RECVIF case IP_RECVIF: { /* spec in FreeBSD: /usr/include/net/if_dl.h */