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 
aresx_uztosi(size_t uznum)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 
aresx_sltosi(long slnum)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 
aresx_sztosi(ssize_t sznum)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 
aresx_sztoui(ssize_t sznum)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 
aresx_FD_ISSET(int fd,fd_set * fdset)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 
aresx_FD_SET(int fd,fd_set * fdset)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 
aresx_FD_ZERO(fd_set * fdset)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 
aresx_htons(unsigned short usnum)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 
aresx_ntohs(unsigned short usnum)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