1 /***************************************************************************
3 * Project ___| | | | _ \| |
5 * | (__| |_| | _ <| |___
6 * \___|\___/|_| \_\_____|
8 * Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
10 * This software is licensed as described in the file COPYING, which
11 * you should have received as part of this distribution. The terms
12 * are also available at https://curl.se/docs/copyright.html.
14 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15 * copies of the Software, and permit persons to whom the Software is
16 * furnished to do so, under the terms of the COPYING file.
18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 * KIND, either express or implied.
21 ***************************************************************************/
23 #include "curl_setup.h"
25 #if defined(__INTEL_COMPILER) && defined(__unix__)
27 #ifdef HAVE_NETINET_IN_H
28 # include <netinet/in.h>
30 #ifdef HAVE_ARPA_INET_H
31 # include <arpa/inet.h>
34 #endif /* __INTEL_COMPILER && __unix__ */
36 #define BUILDING_WARNLESS_C 1
40 #define CURL_MASK_UCHAR ((unsigned char)~0)
41 #define CURL_MASK_SCHAR (CURL_MASK_UCHAR >> 1)
43 #define CURL_MASK_USHORT ((unsigned short)~0)
44 #define CURL_MASK_SSHORT (CURL_MASK_USHORT >> 1)
46 #define CURL_MASK_UINT ((unsigned int)~0)
47 #define CURL_MASK_SINT (CURL_MASK_UINT >> 1)
49 #define CURL_MASK_ULONG ((unsigned long)~0)
50 #define CURL_MASK_SLONG (CURL_MASK_ULONG >> 1)
52 #define CURL_MASK_UCOFFT ((unsigned CURL_TYPEOF_CURL_OFF_T)~0)
53 #define CURL_MASK_SCOFFT (CURL_MASK_UCOFFT >> 1)
55 #define CURL_MASK_USIZE_T ((size_t)~0)
56 #define CURL_MASK_SSIZE_T (CURL_MASK_USIZE_T >> 1)
59 ** unsigned long to unsigned short
62 unsigned short curlx_ultous(unsigned long ulnum)
64 #ifdef __INTEL_COMPILER
65 # pragma warning(push)
66 # pragma warning(disable:810) /* conversion may lose significant bits */
69 DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_USHORT);
70 return (unsigned short)(ulnum & (unsigned long) CURL_MASK_USHORT);
72 #ifdef __INTEL_COMPILER
78 ** unsigned long to unsigned char
81 unsigned char curlx_ultouc(unsigned long ulnum)
83 #ifdef __INTEL_COMPILER
84 # pragma warning(push)
85 # pragma warning(disable:810) /* conversion may lose significant bits */
88 DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_UCHAR);
89 return (unsigned char)(ulnum & (unsigned long) CURL_MASK_UCHAR);
91 #ifdef __INTEL_COMPILER
97 ** unsigned size_t to signed curl_off_t
100 curl_off_t curlx_uztoso(size_t uznum)
102 #ifdef __INTEL_COMPILER
103 # pragma warning(push)
104 # pragma warning(disable:810) /* conversion may lose significant bits */
105 #elif defined(_MSC_VER)
106 # pragma warning(push)
107 # pragma warning(disable:4310) /* cast truncates constant value */
110 DEBUGASSERT(uznum <= (size_t) CURL_MASK_SCOFFT);
111 return (curl_off_t)(uznum & (size_t) CURL_MASK_SCOFFT);
113 #if defined(__INTEL_COMPILER) || defined(_MSC_VER)
114 # pragma warning(pop)
119 ** unsigned size_t to signed int
122 int curlx_uztosi(size_t uznum)
124 #ifdef __INTEL_COMPILER
125 # pragma warning(push)
126 # pragma warning(disable:810) /* conversion may lose significant bits */
129 DEBUGASSERT(uznum <= (size_t) CURL_MASK_SINT);
130 return (int)(uznum & (size_t) CURL_MASK_SINT);
132 #ifdef __INTEL_COMPILER
133 # pragma warning(pop)
138 ** unsigned size_t to unsigned long
141 unsigned long curlx_uztoul(size_t uznum)
143 #ifdef __INTEL_COMPILER
144 # pragma warning(push)
145 # pragma warning(disable:810) /* conversion may lose significant bits */
148 #if ULONG_MAX < SIZE_T_MAX
149 DEBUGASSERT(uznum <= (size_t) CURL_MASK_ULONG);
151 return (unsigned long)(uznum & (size_t) CURL_MASK_ULONG);
153 #ifdef __INTEL_COMPILER
154 # pragma warning(pop)
159 ** unsigned size_t to unsigned int
162 unsigned int curlx_uztoui(size_t uznum)
164 #ifdef __INTEL_COMPILER
165 # pragma warning(push)
166 # pragma warning(disable:810) /* conversion may lose significant bits */
169 #if UINT_MAX < SIZE_T_MAX
170 DEBUGASSERT(uznum <= (size_t) CURL_MASK_UINT);
172 return (unsigned int)(uznum & (size_t) CURL_MASK_UINT);
174 #ifdef __INTEL_COMPILER
175 # pragma warning(pop)
180 ** signed long to signed int
183 int curlx_sltosi(long slnum)
185 #ifdef __INTEL_COMPILER
186 # pragma warning(push)
187 # pragma warning(disable:810) /* conversion may lose significant bits */
190 DEBUGASSERT(slnum >= 0);
191 #if INT_MAX < LONG_MAX
192 DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_SINT);
194 return (int)(slnum & (long) CURL_MASK_SINT);
196 #ifdef __INTEL_COMPILER
197 # pragma warning(pop)
202 ** signed long to unsigned int
205 unsigned int curlx_sltoui(long slnum)
207 #ifdef __INTEL_COMPILER
208 # pragma warning(push)
209 # pragma warning(disable:810) /* conversion may lose significant bits */
212 DEBUGASSERT(slnum >= 0);
213 #if UINT_MAX < LONG_MAX
214 DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_UINT);
216 return (unsigned int)(slnum & (long) CURL_MASK_UINT);
218 #ifdef __INTEL_COMPILER
219 # pragma warning(pop)
224 ** signed long to unsigned short
227 unsigned short curlx_sltous(long slnum)
229 #ifdef __INTEL_COMPILER
230 # pragma warning(push)
231 # pragma warning(disable:810) /* conversion may lose significant bits */
234 DEBUGASSERT(slnum >= 0);
235 DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_USHORT);
236 return (unsigned short)(slnum & (long) CURL_MASK_USHORT);
238 #ifdef __INTEL_COMPILER
239 # pragma warning(pop)
244 ** unsigned size_t to signed ssize_t
247 ssize_t curlx_uztosz(size_t uznum)
249 #ifdef __INTEL_COMPILER
250 # pragma warning(push)
251 # pragma warning(disable:810) /* conversion may lose significant bits */
254 DEBUGASSERT(uznum <= (size_t) CURL_MASK_SSIZE_T);
255 return (ssize_t)(uznum & (size_t) CURL_MASK_SSIZE_T);
257 #ifdef __INTEL_COMPILER
258 # pragma warning(pop)
263 ** signed curl_off_t to unsigned size_t
266 size_t curlx_sotouz(curl_off_t sonum)
268 #ifdef __INTEL_COMPILER
269 # pragma warning(push)
270 # pragma warning(disable:810) /* conversion may lose significant bits */
273 DEBUGASSERT(sonum >= 0);
274 return (size_t)(sonum & (curl_off_t) CURL_MASK_USIZE_T);
276 #ifdef __INTEL_COMPILER
277 # pragma warning(pop)
282 ** signed ssize_t to signed int
285 int curlx_sztosi(ssize_t sznum)
287 #ifdef __INTEL_COMPILER
288 # pragma warning(push)
289 # pragma warning(disable:810) /* conversion may lose significant bits */
292 DEBUGASSERT(sznum >= 0);
293 #if INT_MAX < SSIZE_T_MAX
294 DEBUGASSERT((size_t) sznum <= (size_t) CURL_MASK_SINT);
296 return (int)(sznum & (ssize_t) CURL_MASK_SINT);
298 #ifdef __INTEL_COMPILER
299 # pragma warning(pop)
304 ** unsigned int to unsigned short
307 unsigned short curlx_uitous(unsigned int uinum)
309 #ifdef __INTEL_COMPILER
310 # pragma warning(push)
311 # pragma warning(disable:810) /* conversion may lose significant bits */
314 DEBUGASSERT(uinum <= (unsigned int) CURL_MASK_USHORT);
315 return (unsigned short) (uinum & (unsigned int) CURL_MASK_USHORT);
317 #ifdef __INTEL_COMPILER
318 # pragma warning(pop)
323 ** signed int to unsigned size_t
326 size_t curlx_sitouz(int sinum)
328 #ifdef __INTEL_COMPILER
329 # pragma warning(push)
330 # pragma warning(disable:810) /* conversion may lose significant bits */
333 DEBUGASSERT(sinum >= 0);
334 return (size_t) sinum;
336 #ifdef __INTEL_COMPILER
337 # pragma warning(pop)
344 ** curl_socket_t to signed int
347 int curlx_sktosi(curl_socket_t s)
349 return (int)((ssize_t) s);
353 ** signed int to curl_socket_t
356 curl_socket_t curlx_sitosk(int i)
358 return (curl_socket_t)((ssize_t) i);
361 #endif /* USE_WINSOCK */
365 ssize_t curlx_read(int fd, void *buf, size_t count)
367 return (ssize_t)read(fd, buf, curlx_uztoui(count));
370 ssize_t curlx_write(int fd, const void *buf, size_t count)
372 return (ssize_t)write(fd, buf, curlx_uztoui(count));
377 #if defined(__INTEL_COMPILER) && defined(__unix__)
379 int curlx_FD_ISSET(int fd, fd_set *fdset)
381 #pragma warning(push)
382 #pragma warning(disable:1469) /* clobber ignored */
383 return FD_ISSET(fd, fdset);
387 void curlx_FD_SET(int fd, fd_set *fdset)
389 #pragma warning(push)
390 #pragma warning(disable:1469) /* clobber ignored */
395 void curlx_FD_ZERO(fd_set *fdset)
397 #pragma warning(push)
398 #pragma warning(disable:593) /* variable was set but never used */
403 unsigned short curlx_htons(unsigned short usnum)
405 #if (__INTEL_COMPILER == 910) && defined(__i386__)
406 return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
408 #pragma warning(push)
409 #pragma warning(disable:810) /* conversion may lose significant bits */
415 unsigned short curlx_ntohs(unsigned short usnum)
417 #if (__INTEL_COMPILER == 910) && defined(__i386__)
418 return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
420 #pragma warning(push)
421 #pragma warning(disable:810) /* conversion may lose significant bits */
427 #endif /* __INTEL_COMPILER && __unix__ */