[sane-devel] [PATCH v2 04/14] bldchn, checking for socklen_t more safe
Ruediger Meier
sweet_f_a at gmx.de
Tue Jan 24 23:07:58 UTC 2012
On Tuesday 24 January 2012, Chris Bagwell wrote:
> On Mon, Jan 23, 2012 at 5:05 PM, Ruediger Meier <sweet_f_a at gmx.de>
wrote:
> > From: Ruediger Meier <ruediger.meier at ga-group.nl>
> >
> > Here I just want to fix conflicts for win32 systems. Generally I'd
> > say that we should never "#define socklen_t int" within config.h.
> > But this may decide somebody else.
> >
> > Note this patch may break the build on systems where socklen_t is
> > available now but the right headers are not included yet. For
> > example for win32 you need to add
> > #ifdef HAVE_WS2TCPIP_H
> > #include <ws2tcpip.h>
> > #endif
> > wherever socklen_t is used.
> > ---
> > configure | 14 +++++++++++---
> > configure.in | 12 ++++++++++--
> > 2 files changed, 21 insertions(+), 5 deletions(-)
> >
> > diff --git a/configure b/configure
> > index 5da8db8..ba1df33 100755
> > --- a/configure
> > +++ b/configure
> > @@ -8257,12 +8257,20 @@ rm -f core conftest.err conftest.$ac_objext
> > conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result:
> > $have_long_long" >&5 $as_echo "$have_long_long" >&6; }
> >
> > -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t in
> > <sys/socket.h>" >&5 -$as_echo_n "checking for socklen_t in
> > <sys/socket.h>... " >&6; } +{ $as_echo
> > "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5
> > +$as_echo_n "checking for socklen_t... " >&6; }
> > cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> > /* end confdefs.h. */
> >
> > -#include <sys/socket.h>
> > +#ifdef HAVE_SYS_SOCKET_H
> > +# include <sys/socket.h>
> > +#endif
> > +#ifdef HAVE_WINSOCK2_H
> > +# include <winsock2.h>
> > +#endif
> > +#ifdef HAVE_WS2TCPIP_H
> > +# include <ws2tcpip.h>
> > +#endif"
> >
> > int
> > main ()
> > diff --git a/configure.in b/configure.in
> > index 060b8b6..b30dd92 100644
> > --- a/configure.in
> > +++ b/configure.in
> > @@ -232,9 +232,17 @@ have_long_long=no
> > AC_TRY_COMPILE([], [long long x; x = (long long)0;],
> > AC_DEFINE(HAVE_LONG_LONG, 1, [Define if the long long type is
> > available.]) have_long_long=yes) AC_MSG_RESULT($have_long_long)
> >
> > -AC_MSG_CHECKING([for socklen_t in <sys/socket.h>])
> > +AC_MSG_CHECKING([for socklen_t])
> > AC_TRY_COMPILE([
> > -#include <sys/socket.h>
> > +#ifdef HAVE_SYS_SOCKET_H
> > +# include <sys/socket.h>
> > +#endif
> > +#ifdef HAVE_WINSOCK2_H
> > +# include <winsock2.h>
> > +#endif
> > +#ifdef HAVE_WS2TCPIP_H
> > +# include <ws2tcpip.h>
> > +#endif"
> > ],[socklen_t len],AC_MSG_RESULT(yes),
> > [AC_MSG_RESULT(no); AC_DEFINE(socklen_t,int,
> > [Define socklen_t as \'int\' if necessary.])])
>
> Since we are changing this, maybe we should change to more proper
> AC_CHECK_TYPES as well? That would require adding an "#ifndef
> HAVE_SOCKELEN_T" towards bottom of acinclude.m4 to match it.
Fine, but then I'd go even a step further like I've mentioned in my
commit message above - never _define_ such types in config.h. Better
only using
AC_CHECK_TYPES([socklen_t],,,[some includes];
This will replace
#define socklen_t int
by
#undef HAVE_SOCKLEN_T
Then we'd need to do
#ifdef HAVE_SOCKLEN_T
typedef int socklen_t;
#endif
wherever we use it or even better within a central header "sane_types.h
(maybe we have such header yet!?). In the long term I would do this for
all types we are currently defining in config.h (*).
Actually we are using socklen_t only within 5 files
backend/dell1600n_net.c
backend/net.c
backend/pixma_bjnp.c
frontend/saned.c
sanei/sanei_udp.c
So I'd like to post that "AC_CHECK_TYPES([socklen_t])" patch separately
from this win32/net series and you as a global maintainer may decide
wheather and where to put the missing typedefs.
(*) see also
http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.68/html_node/Obsolete-Macros.html#Obsolete-Macros
18.4 Obsolete Macros
— Macro: AC_CHECK_TYPE (type, default)
cu Rudi
More information about the sane-devel
mailing list