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.39

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

      ])