1 2/* Copyright (C) 2010-2011 by Daniel Stenberg 3 * 4 * Permission to use, copy, modify, and distribute this 5 * software and its documentation for any purpose and without 6 * fee is hereby granted, provided that the above copyright 7 * notice appear in all copies and that both that copyright 8 * notice and this permission notice appear in supporting 9 * documentation, and that the name of M.I.T. not be used in 10 * advertising or publicity pertaining to distribution of the 11 * software without specific, written prior permission. 12 * M.I.T. makes no representations about the suitability of 13 * this software for any purpose. It is provided "as is" 14 * without express or implied warranty. 15 */ 16 17 18#include "ares_setup.h" 19 20#ifdef HAVE_ASSERT_H 21# include <assert.h> 22#endif 23 24#ifdef HAVE_LIMITS_H 25# include <limits.h> 26#endif 27 28#if defined(__INTEL_COMPILER) && defined(__unix__) 29 30#ifdef HAVE_SYS_SOCKET_H 31# include <sys/socket.h> 32#endif 33#ifdef HAVE_NETINET_IN_H 34# include <netinet/in.h> 35#endif 36#ifdef HAVE_ARPA_INET_H 37# include <arpa/inet.h> 38#endif 39 40#endif /* __INTEL_COMPILER && __unix__ */ 41 42#define BUILDING_ARES_NOWARN_C 1 43 44#include "ares_nowarn.h" 45 46#if (SIZEOF_INT == 2) 47# define CARES_MASK_SINT 0x7FFF 48# define CARES_MASK_UINT 0xFFFF 49#elif (SIZEOF_INT == 4) 50# define CARES_MASK_SINT 0x7FFFFFFF 51# define CARES_MASK_UINT 0xFFFFFFFF 52#elif (SIZEOF_INT == 8) 53# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFF 54# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFF 55#elif (SIZEOF_INT == 16) 56# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 57# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 58#elif defined(HAVE_LIMITS_H) 59# define CARES_MASK_SINT INT_MAX 60# define CARES_MASK_UINT UINT_MAX 61#endif 62 63/* 64** unsigned size_t to signed int 65*/ 66 67int aresx_uztosi(size_t uznum) 68{ 69#ifdef __INTEL_COMPILER 70# pragma warning(push) 71# pragma warning(disable:810) /* conversion may lose significant bits */ 72#endif 73 74 return (int)(uznum & (size_t) CARES_MASK_SINT); 75 76#ifdef __INTEL_COMPILER 77# pragma warning(pop) 78#endif 79} 80 81/* 82** signed long to signed int 83*/ 84 85int aresx_sltosi(long slnum) 86{ 87#ifdef __INTEL_COMPILER 88# pragma warning(push) 89# pragma warning(disable:810) /* conversion may lose significant bits */ 90#endif 91 92 DEBUGASSERT(slnum >= 0); 93 return (int)(slnum & (long) CARES_MASK_SINT); 94 95#ifdef __INTEL_COMPILER 96# pragma warning(pop) 97#endif 98} 99 100/* 101** signed ssize_t to signed int 102*/ 103 104int aresx_sztosi(ssize_t sznum) 105{ 106#ifdef __INTEL_COMPILER 107# pragma warning(push) 108# pragma warning(disable:810) /* conversion may lose significant bits */ 109#endif 110 111 DEBUGASSERT(sznum >= 0); 112 return (int)(sznum & (ssize_t) CARES_MASK_SINT); 113 114#ifdef __INTEL_COMPILER 115# pragma warning(pop) 116#endif 117} 118 119/* 120** signed ssize_t to unsigned int 121*/ 122 123unsigned int aresx_sztoui(ssize_t sznum) 124{ 125#ifdef __INTEL_COMPILER 126# pragma warning(push) 127# pragma warning(disable:810) /* conversion may lose significant bits */ 128#endif 129 130 DEBUGASSERT(sznum >= 0); 131 return (unsigned int)(sznum & (ssize_t) CARES_MASK_UINT); 132 133#ifdef __INTEL_COMPILER 134# pragma warning(pop) 135#endif 136} 137 138#if defined(__INTEL_COMPILER) && defined(__unix__) 139 140int aresx_FD_ISSET(int fd, fd_set *fdset) 141{ 142 #pragma warning(push) 143 #pragma warning(disable:1469) /* clobber ignored */ 144 return FD_ISSET(fd, fdset); 145 #pragma warning(pop) 146} 147 148void aresx_FD_SET(int fd, fd_set *fdset) 149{ 150 #pragma warning(push) 151 #pragma warning(disable:1469) /* clobber ignored */ 152 FD_SET(fd, fdset); 153 #pragma warning(pop) 154} 155 156void aresx_FD_ZERO(fd_set *fdset) 157{ 158 #pragma warning(push) 159 #pragma warning(disable:593) /* variable was set but never used */ 160 FD_ZERO(fdset); 161 #pragma warning(pop) 162} 163 164unsigned short aresx_htons(unsigned short usnum) 165{ 166#if (__INTEL_COMPILER == 910) && defined(__i386__) 167 return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); 168#else 169 #pragma warning(push) 170 #pragma warning(disable:810) /* conversion may lose significant bits */ 171 return htons(usnum); 172 #pragma warning(pop) 173#endif 174} 175 176unsigned short aresx_ntohs(unsigned short usnum) 177{ 178#if (__INTEL_COMPILER == 910) && defined(__i386__) 179 return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); 180#else 181 #pragma warning(push) 182 #pragma warning(disable:810) /* conversion may lose significant bits */ 183 return ntohs(usnum); 184 #pragma warning(pop) 185#endif 186} 187 188#endif /* __INTEL_COMPILER && __unix__ */ 189