Macro: ac_raf_func_which_getservbyname_r

Back to the Main Page. | Download the M4 Source.

# ac_raf_func_which_getservbyname_r

## Synopsis

`AC_raf_FUNC_WHICH_GETSERVBYNAME_R`

## Version

1.1 (2001/08/25) Miscellaneous @ ac-archive-0.5.32

## Author

raf <raf@raf.org>

## Description

Provides a test to determine the correct way to call getservbyname_r:

`- defines HAVE_FUNC_GETSERVBYNAME_R_6 if it needs 6 arguments (e.g linux)`
`- defines HAVE_FUNC_GETSERVBYNAME_R_5 if it needs 5 arguments (e.g. solaris)`
`- defines HAVE_FUNC_GETSERVBYNAME_R_4 if it needs 4 arguments (e.g. osf/1)`

An example use can be found at http://raf.org/autoconf/net_getservbyname.c

Based on Caolan McNamara's gethostbyname_r macro. Based on David Arnold's autoconf suggestion in the threads faq.

## M4 Source Code

    AC_DEFUN([AC_raf_FUNC_WHICH_GETSERVBYNAME_R],
    [AC_CACHE_CHECK(for getservbyname_r, ac_cv_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>
      ], [
            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_cv_func_which_getservbyname_r=no)

      ]

      )
                            ]
                    )]
            ,ac_cv_func_which_getservbyname_r=no)])

    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

    ])