Home | History | Annotate | Download | only in c-ares
      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 
     67 int 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 
     85 int 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 
    104 int 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 
    123 unsigned 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 
    140 int 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 
    148 void 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 
    156 void 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 
    164 unsigned 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 
    176 unsigned 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