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_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 @license GPLWithACException
AC_DEFUN([AC_raf_FUNC_WHICH_GETSERVBYNAME_R],
-[AC_CHECK_FUNC(getservbyname_r,
- [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_TRY_COMPILE([#include <netdb.h>],
+[
+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 <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);
+ (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_cv_func_which_getservbyname_r=no
- )]
- )]
- )],
- ac_cv_func_which_getservbyname_r=no)
+ [
+ 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
+ )
+ ]
+ )
+ ]
+ )
+ AC_LANG_POP()
+ ]
+)
if test $ac_cv_func_which_getservbyname_r = six; then
AC_DEFINE(HAVE_FUNC_GETSERVBYNAME_R_6)