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 * SPDX-License-Identifier: curl
23 ***************************************************************************/
25 #include "curl_setup.h"
27 #if defined(__INTEL_COMPILER) && defined(__unix__)
29 #ifdef HAVE_NETINET_IN_H
30 # include <netinet/in.h>
32 #ifdef HAVE_ARPA_INET_H
33 # include <arpa/inet.h>
36 #endif /* __INTEL_COMPILER && __unix__ */
38 #define BUILDING_WARNLESS_C 1
44 #define CURL_MASK_UCHAR ((unsigned char)~0)
45 #define CURL_MASK_SCHAR (CURL_MASK_UCHAR >> 1)
47 #define CURL_MASK_USHORT ((unsigned short)~0)
48 #define CURL_MASK_SSHORT (CURL_MASK_USHORT >> 1)
50 #define CURL_MASK_UINT ((unsigned int)~0)
51 #define CURL_MASK_SINT (CURL_MASK_UINT >> 1)
53 #define CURL_MASK_ULONG ((unsigned long)~0)
54 #define CURL_MASK_SLONG (CURL_MASK_ULONG >> 1)
56 #define CURL_MASK_UCOFFT ((unsigned CURL_TYPEOF_CURL_OFF_T)~0)
57 #define CURL_MASK_SCOFFT (CURL_MASK_UCOFFT >> 1)
59 #define CURL_MASK_USIZE_T ((size_t)~0)
60 #define CURL_MASK_SSIZE_T (CURL_MASK_USIZE_T >> 1)
63 ** unsigned long to unsigned short
66 unsigned short curlx_ultous(unsigned long ulnum)
68 #ifdef __INTEL_COMPILER
69 # pragma warning(push)
70 # pragma warning(disable:810) /* conversion may lose significant bits */
73 DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_USHORT);
74 return (unsigned short)(ulnum & (unsigned long) CURL_MASK_USHORT);
76 #ifdef __INTEL_COMPILER
82 ** unsigned long to unsigned char
85 unsigned char curlx_ultouc(unsigned long ulnum)
87 #ifdef __INTEL_COMPILER
88 # pragma warning(push)
89 # pragma warning(disable:810) /* conversion may lose significant bits */
92 DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_UCHAR);
93 return (unsigned char)(ulnum & (unsigned long) CURL_MASK_UCHAR);
95 #ifdef __INTEL_COMPILER
101 ** unsigned size_t to signed curl_off_t
104 curl_off_t curlx_uztoso(size_t uznum)
106 #ifdef __INTEL_COMPILER
107 # pragma warning(push)
108 # pragma warning(disable:810) /* conversion may lose significant bits */
109 #elif defined(_MSC_VER)
110 # pragma warning(push)
111 # pragma warning(disable:4310) /* cast truncates constant value */
114 DEBUGASSERT(uznum <= (size_t) CURL_MASK_SCOFFT);
115 return (curl_off_t)(uznum & (size_t) CURL_MASK_SCOFFT);
117 #if defined(__INTEL_COMPILER) || defined(_MSC_VER)
118 # pragma warning(pop)
123 ** unsigned size_t to signed int
126 int curlx_uztosi(size_t uznum)
128 #ifdef __INTEL_COMPILER
129 # pragma warning(push)
130 # pragma warning(disable:810) /* conversion may lose significant bits */
133 DEBUGASSERT(uznum <= (size_t) CURL_MASK_SINT);
134 return (int)(uznum & (size_t) CURL_MASK_SINT);
136 #ifdef __INTEL_COMPILER
137 # pragma warning(pop)
142 ** unsigned size_t to unsigned long
145 unsigned long curlx_uztoul(size_t uznum)
147 #ifdef __INTEL_COMPILER
148 # pragma warning(push)
149 # pragma warning(disable:810) /* conversion may lose significant bits */
152 #if ULONG_MAX < SIZE_T_MAX
153 DEBUGASSERT(uznum <= (size_t) CURL_MASK_ULONG);
155 return (unsigned long)(uznum & (size_t) CURL_MASK_ULONG);
157 #ifdef __INTEL_COMPILER
158 # pragma warning(pop)
163 ** unsigned size_t to unsigned int
166 unsigned int curlx_uztoui(size_t uznum)
168 #ifdef __INTEL_COMPILER
169 # pragma warning(push)
170 # pragma warning(disable:810) /* conversion may lose significant bits */
173 #if UINT_MAX < SIZE_T_MAX
174 DEBUGASSERT(uznum <= (size_t) CURL_MASK_UINT);
176 return (unsigned int)(uznum & (size_t) CURL_MASK_UINT);
178 #ifdef __INTEL_COMPILER
179 # pragma warning(pop)
184 ** signed long to signed int
187 int curlx_sltosi(long slnum)
189 #ifdef __INTEL_COMPILER
190 # pragma warning(push)
191 # pragma warning(disable:810) /* conversion may lose significant bits */
194 DEBUGASSERT(slnum >= 0);
195 #if INT_MAX < LONG_MAX
196 DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_SINT);
198 return (int)(slnum & (long) CURL_MASK_SINT);
200 #ifdef __INTEL_COMPILER
201 # pragma warning(pop)
206 ** signed long to unsigned int
209 unsigned int curlx_sltoui(long slnum)
211 #ifdef __INTEL_COMPILER
212 # pragma warning(push)
213 # pragma warning(disable:810) /* conversion may lose significant bits */
216 DEBUGASSERT(slnum >= 0);
217 #if UINT_MAX < LONG_MAX
218 DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_UINT);
220 return (unsigned int)(slnum & (long) CURL_MASK_UINT);
222 #ifdef __INTEL_COMPILER
223 # pragma warning(pop)
228 ** signed long to unsigned short
231 unsigned short curlx_sltous(long slnum)
233 #ifdef __INTEL_COMPILER
234 # pragma warning(push)
235 # pragma warning(disable:810) /* conversion may lose significant bits */
238 DEBUGASSERT(slnum >= 0);
239 DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_USHORT);
240 return (unsigned short)(slnum & (long) CURL_MASK_USHORT);
242 #ifdef __INTEL_COMPILER
243 # pragma warning(pop)
248 ** unsigned size_t to signed ssize_t
251 ssize_t curlx_uztosz(size_t uznum)
253 #ifdef __INTEL_COMPILER
254 # pragma warning(push)
255 # pragma warning(disable:810) /* conversion may lose significant bits */
258 DEBUGASSERT(uznum <= (size_t) CURL_MASK_SSIZE_T);
259 return (ssize_t)(uznum & (size_t) CURL_MASK_SSIZE_T);
261 #ifdef __INTEL_COMPILER
262 # pragma warning(pop)
267 ** signed curl_off_t to unsigned size_t
270 size_t curlx_sotouz(curl_off_t sonum)
272 #ifdef __INTEL_COMPILER
273 # pragma warning(push)
274 # pragma warning(disable:810) /* conversion may lose significant bits */
277 DEBUGASSERT(sonum >= 0);
278 return (size_t)(sonum & (curl_off_t) CURL_MASK_USIZE_T);
280 #ifdef __INTEL_COMPILER
281 # pragma warning(pop)
286 ** signed ssize_t to signed int
289 int curlx_sztosi(ssize_t sznum)
291 #ifdef __INTEL_COMPILER
292 # pragma warning(push)
293 # pragma warning(disable:810) /* conversion may lose significant bits */
296 DEBUGASSERT(sznum >= 0);
297 #if INT_MAX < SSIZE_T_MAX
298 DEBUGASSERT((size_t) sznum <= (size_t) CURL_MASK_SINT);
300 return (int)(sznum & (ssize_t) CURL_MASK_SINT);
302 #ifdef __INTEL_COMPILER
303 # pragma warning(pop)
308 ** unsigned int to unsigned short
311 unsigned short curlx_uitous(unsigned int uinum)
313 #ifdef __INTEL_COMPILER
314 # pragma warning(push)
315 # pragma warning(disable:810) /* conversion may lose significant bits */
318 DEBUGASSERT(uinum <= (unsigned int) CURL_MASK_USHORT);
319 return (unsigned short) (uinum & (unsigned int) CURL_MASK_USHORT);
321 #ifdef __INTEL_COMPILER
322 # pragma warning(pop)
327 ** signed int to unsigned size_t
330 size_t curlx_sitouz(int sinum)
332 #ifdef __INTEL_COMPILER
333 # pragma warning(push)
334 # pragma warning(disable:810) /* conversion may lose significant bits */
337 DEBUGASSERT(sinum >= 0);
338 return (size_t) sinum;
340 #ifdef __INTEL_COMPILER
341 # pragma warning(pop)
348 ** curl_socket_t to signed int
351 int curlx_sktosi(curl_socket_t s)
353 return (int)((ssize_t) s);
357 ** signed int to curl_socket_t
360 curl_socket_t curlx_sitosk(int i)
362 return (curl_socket_t)((ssize_t) i);
365 #endif /* USE_WINSOCK */
369 ssize_t curlx_read(int fd, void *buf, size_t count)
371 return (ssize_t)read(fd, buf, curlx_uztoui(count));
374 ssize_t curlx_write(int fd, const void *buf, size_t count)
376 return (ssize_t)write(fd, buf, curlx_uztoui(count));
381 #if defined(__INTEL_COMPILER) && defined(__unix__)
383 int curlx_FD_ISSET(int fd, fd_set *fdset)
385 #pragma warning(push)
386 #pragma warning(disable:1469) /* clobber ignored */
387 return FD_ISSET(fd, fdset);
391 void curlx_FD_SET(int fd, fd_set *fdset)
393 #pragma warning(push)
394 #pragma warning(disable:1469) /* clobber ignored */
399 void curlx_FD_ZERO(fd_set *fdset)
401 #pragma warning(push)
402 #pragma warning(disable:593) /* variable was set but never used */
407 unsigned short curlx_htons(unsigned short usnum)
409 #if (__INTEL_COMPILER == 910) && defined(__i386__)
410 return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
412 #pragma warning(push)
413 #pragma warning(disable:810) /* conversion may lose significant bits */
419 unsigned short curlx_ntohs(unsigned short usnum)
421 #if (__INTEL_COMPILER == 910) && defined(__i386__)
422 return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
424 #pragma warning(push)
425 #pragma warning(disable:810) /* conversion may lose significant bits */
431 #endif /* __INTEL_COMPILER && __unix__ */