2005-11-27 12:46:39 -05:00
|
|
|
dnl @synopsis AC_raf_FUNC_WHICH_GETSERVBYNAME_R
|
|
|
|
dnl
|
|
|
|
dnl Provides a test to determine the correct way to call
|
|
|
|
dnl getservbyname_r:
|
|
|
|
dnl
|
2011-04-03 16:31:32 -04:00
|
|
|
dnl - defines HAVE_FUNC_GETSERVBYNAME_R_6 if it needs 6 arguments (e.g. linux)
|
2005-11-27 12:46:39 -05:00
|
|
|
dnl - defines HAVE_FUNC_GETSERVBYNAME_R_5 if it needs 5 arguments (e.g. solaris)
|
|
|
|
dnl - defines HAVE_FUNC_GETSERVBYNAME_R_4 if it needs 4 arguments (e.g. osf/1)
|
|
|
|
dnl
|
|
|
|
dnl An example use can be found at
|
|
|
|
dnl http://raf.org/autoconf/net_getservbyname.c
|
|
|
|
dnl
|
|
|
|
dnl Based on Caolan McNamara's gethostbyname_r macro. Based on David
|
|
|
|
dnl Arnold's autoconf suggestion in the threads faq.
|
|
|
|
dnl
|
|
|
|
dnl @category Misc
|
|
|
|
dnl @author raf <raf@raf.org>
|
|
|
|
dnl @version 2001-08-20
|
|
|
|
dnl @license GPLWithACException
|
|
|
|
|
|
|
|
AC_DEFUN([AC_raf_FUNC_WHICH_GETSERVBYNAME_R],
|
2006-09-28 20:03:27 -04:00
|
|
|
[
|
|
|
|
AC_CACHE_CHECK(how many arguments getservbyname_r() takes,
|
|
|
|
ac_cv_func_which_getservbyname_r,
|
|
|
|
[
|
2006-11-09 10:30:37 -05:00
|
|
|
dnl we need to use C++ to detect missing prototypes
|
|
|
|
AC_LANG_PUSH(C++)
|
|
|
|
|
2006-09-28 20:03:27 -04:00
|
|
|
AC_TRY_COMPILE([#include <netdb.h>],
|
|
|
|
[
|
|
|
|
char *name;
|
|
|
|
char *proto;
|
|
|
|
struct servent *se, *res;
|
|
|
|
char buffer[2048];
|
|
|
|
int buflen = 2048;
|
|
|
|
(void) getservbyname_r(name, proto, se, buffer, buflen, &res)
|
|
|
|
],
|
|
|
|
ac_cv_func_which_getservbyname_r=six,
|
|
|
|
[
|
|
|
|
AC_TRY_COMPILE([#include <netdb.h>],
|
|
|
|
[
|
|
|
|
char *name;
|
|
|
|
char *proto;
|
|
|
|
struct servent *se;
|
|
|
|
char buffer[2048];
|
|
|
|
int buflen = 2048;
|
|
|
|
(void) getservbyname_r(name, proto, se, buffer, buflen)
|
|
|
|
],
|
|
|
|
ac_cv_func_which_getservbyname_r=five,
|
|
|
|
[
|
|
|
|
AC_TRY_COMPILE([#include <netdb.h>],
|
|
|
|
[
|
|
|
|
char *name;
|
|
|
|
char *proto;
|
|
|
|
struct servent *se;
|
|
|
|
struct servent_data data;
|
|
|
|
(void) getservbyname_r(name, proto, se, &data);
|
|
|
|
],
|
|
|
|
ac_cv_func_which_getservbyname_r=four,
|
|
|
|
ac_cv_func_which_getservbyname_r=no
|
|
|
|
)
|
|
|
|
]
|
|
|
|
)
|
|
|
|
]
|
|
|
|
)
|
2006-11-09 10:30:37 -05:00
|
|
|
AC_LANG_POP()
|
2006-09-28 20:03:27 -04:00
|
|
|
]
|
|
|
|
)
|
2005-11-27 12:46:39 -05:00
|
|
|
|
|
|
|
if test $ac_cv_func_which_getservbyname_r = six; then
|
|
|
|
AC_DEFINE(HAVE_FUNC_GETSERVBYNAME_R_6)
|
|
|
|
elif test $ac_cv_func_which_getservbyname_r = five; then
|
|
|
|
AC_DEFINE(HAVE_FUNC_GETSERVBYNAME_R_5)
|
|
|
|
elif test $ac_cv_func_which_getservbyname_r = four; then
|
|
|
|
AC_DEFINE(HAVE_FUNC_GETSERVBYNAME_R_4)
|
|
|
|
fi
|
|
|
|
|
|
|
|
])
|