-/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#include "nsswitch.h"
/* Type of the lookup function we need here. */
-typedef int (*lookup_function) (ADD_PARAMS, LOOKUP_TYPE *, char *, int
+typedef int (*lookup_function) (ADD_PARAMS, LOOKUP_TYPE *, char *, size_t
H_ERRNO_PARM);
/* Some usages of this file might use this variable. */
-LOOKUP_TYPE *
-INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *result, char *buffer,
- int buflen H_ERRNO_PARM)
+int
+INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
+ size_t buflen, LOOKUP_TYPE **result H_ERRNO_PARM)
{
static service_user *startp = NULL;
static lookup_function start_fct;
int no_more;
enum nss_status status = NSS_STATUS_UNAVAIL;
+#ifdef HANDLE_DIGITS_DOTS
+# define resbuf (*resbuf)
+# include "digits_dots.c"
+# undef resbuf
+#endif
+
if (startp == NULL)
{
no_more = DB_LOOKUP_FCT (&nip, REENTRANT_NAME_STRING, (void **) &fct);
if (no_more)
- startp = (service_user *) -1;
+ startp = (service_user *) -1l;
else
{
startp = nip;
if ((_res.options & RES_INIT) == 0 && res_init () == -1)
{
*h_errnop = NETDB_INTERNAL;
- return NULL;
+ *result = NULL;
+ return -1;
}
#endif /* need _res */
}
else
{
fct = start_fct;
- no_more = (nip = startp) == (service_user *) -1;
+ no_more = (nip = startp) == (service_user *) -1l;
}
while (no_more == 0)
{
- status = (*fct) (ADD_VARIABLES, result, buffer, buflen H_ERRNO_VAR);
+ status = (*fct) (ADD_VARIABLES, resbuf, buffer, buflen H_ERRNO_VAR);
no_more = __nss_next (&nip, REENTRANT_NAME_STRING,
(void **) &fct, status, 0);
}
- return status == NSS_STATUS_SUCCESS ? result : NULL;
+#ifdef HANDLE_DIGITS_DOTS
+done:
+#endif
+ *result = status == NSS_STATUS_SUCCESS ? resbuf : NULL;
+ return status == NSS_STATUS_SUCCESS ? 0 : -1;
}
-#define do_weak_alias(n1, n2) weak_alias ((n1), (n2))
+#define do_weak_alias(n1, n2) weak_alias (n1, (n2))
do_weak_alias (INTERNAL (REENTRANT_NAME), REENTRANT_NAME)