#ifndef HEADER_CARES_NOWARN_H
#define HEADER_CARES_NOWARN_H


/* Copyright (C) 2010-2011 by Daniel Stenberg
 *
 * Permission to use, copy, modify, and distribute this
 * software and its documentation for any purpose and without
 * fee is hereby granted, provided that the above copyright
 * notice appear in all copies and that both that copyright
 * notice and this permission notice appear in supporting
 * documentation, and that the name of M.I.T. not be used in
 * advertising or publicity pertaining to distribution of the
 * software without specific, written prior permission.
 * M.I.T. makes no representations about the suitability of
 * this software for any purpose.  It is provided "as is"
 * without express or implied warranty.
 */

int aresx_uztosi(size_t uznum);

int aresx_sltosi(long slnum);

int aresx_sztosi(ssize_t sznum);

unsigned int aresx_sztoui(ssize_t sznum);

#if defined(__INTEL_COMPILER) && defined(__unix__)

int aresx_FD_ISSET(int fd, fd_set *fdset);

void aresx_FD_SET(int fd, fd_set *fdset);

void aresx_FD_ZERO(fd_set *fdset);

unsigned short aresx_htons(unsigned short usnum);

unsigned short aresx_ntohs(unsigned short usnum);

#ifndef BUILDING_ARES_NOWARN_C
#  undef  FD_ISSET
#  define FD_ISSET(a,b) aresx_FD_ISSET((a),(b))
#  undef  FD_SET
#  define FD_SET(a,b)   aresx_FD_SET((a),(b))
#  undef  FD_ZERO
#  define FD_ZERO(a)    aresx_FD_ZERO((a))
#  undef  htons
#  define htons(a)      aresx_htons((a))
#  undef  ntohs
#  define ntohs(a)      aresx_ntohs((a))
#endif

#endif /* __INTEL_COMPILER && __unix__ */

#endif /* HEADER_CARES_NOWARN_H */
