/* Copyright (C) 2004-2018 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   Contributed by Ulrich Drepper <drepper@cygnus.com>, 2004.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published
   by the Free Software Foundation; version 2 of the License, or
   (at your option) any later version.

   This program 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 General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, see <http://www.gnu.org/licenses/>.  */

#include <alloca.h>

/* This file uses the getaddrinfo code but it compiles it without NSCD
   support.  We just need a few symbol renames.  */
#define __inet_aton inet_aton
#define __ioctl ioctl
#define __getsockname getsockname
#define __socket socket
#define __recvmsg recvmsg
#define __bind bind
#define __sendto sendto
#define __strchrnul strchrnul
#define __getline getline
#define __qsort_r qsort_r
/* nscd uses 1MB or 2MB thread stacks.  */
#define __libc_use_alloca(size) (size <= __MAX_ALLOCA_CUTOFF)
#define __getifaddrs getifaddrs
#define __freeifaddrs freeifaddrs

/* We are nscd, so we don't want to be talking to ourselves.  */
#undef  USE_NSCD

#include <getaddrinfo.c>

/* Support code.  */
#include <check_pf.c>
#include <check_native.c>
#ifdef HAVE_LIBIDN
# include <libidn/idn-stub.c>
#endif

/* Some variables normally defined in libc.  */
service_user *__nss_hosts_database attribute_hidden;
