Blob Blame History Raw
# SYNOPSIS
#
#   AMANDA_SOCKLEN_T_EQUIV
#
# OVERVIEW
#
#   Find a type which will work like socklen_t should.  Unfortunately, 
#   HP/UX systems define socklen_t, but use int * as the result parameter
#   for socket functions returning a socket length.
#
#   This check defines a type socklen_t_equiv which is of the appropriate
#   size to be used with socket functions.
#
AC_DEFUN([AMANDA_SOCKLEN_T_EQUIV],
[
      ## lifted from config/gnulib/socklen.m4
      AC_REQUIRE([gl_HEADER_SYS_SOCKET])dnl
      AC_MSG_CHECKING([for socklen_t equivalent])
      AC_CACHE_VAL([gl_cv_socklen_t_equiv],
	[# Systems have either "struct sockaddr *" or
	 # "void *" as the second argument to getpeername
	 gl_cv_socklen_t_equiv=
	 for arg2 in "struct sockaddr" void; do
	   for t in socklen_t int size_t "unsigned int" "long int" "unsigned long int"; do
	     AC_TRY_COMPILE(
	       [#include <sys/types.h>
		#include <sys/socket.h>

		int getpeername (int, $arg2 *, $t *);],
	       [$t len;
		getpeername (0, 0, &len);],
	       [gl_cv_socklen_t_equiv="$t"])
	     test "$gl_cv_socklen_t_equiv" != "" && break
	   done
	   test "$gl_cv_socklen_t_equiv" != "" && break
	 done
      ])
      ## end lifting from config/gnulib/socklen.m4
      # fallback if the check fails
      if test "$gl_cv_socklen_t_equiv" = ""; then
	gl_cv_socklen_t_equiv=socklen_t
      fi
      AC_MSG_RESULT([$gl_cv_socklen_t_equiv])

      AC_DEFINE_UNQUOTED([socklen_t_equiv], [$gl_cv_socklen_t_equiv],
	[type to use for socket length parameters; use instead of socklen_t])
])