dnl @synopsis AC_raf_FUNC_WHICH_GETSERVBYNAME_R dnl dnl Provides a test to determine the correct way to call dnl getservbyname_r: dnl dnl - defines HAVE_FUNC_GETSERVBYNAME_R_6 if it needs 6 arguments (e.g. linux) 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 dnl @version 2001-08-20 dnl @license GPLWithACException AC_DEFUN([AC_raf_FUNC_WHICH_GETSERVBYNAME_R], [ AC_CACHE_CHECK(how many arguments getservbyname_r() takes, ac_cv_func_which_getservbyname_r, [ dnl we need to use C++ to detect missing prototypes AC_LANG_PUSH(C++) AC_TRY_COMPILE([#include ], [ 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 ], [ 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 ], [ 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 ) ] ) ] ) AC_LANG_POP() ] ) 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 ])