1 | /*************************************************************************** |
2 | * _ _ ____ _ |
3 | * Project ___| | | | _ \| | |
4 | * / __| | | | |_) | | |
5 | * | (__| |_| | _ <| |___ |
6 | * \___|\___/|_| \_\_____| |
7 | * |
8 | * Copyright (C) 1998 - 2022, Daniel Stenberg, <[email protected]>, et al. |
9 | * |
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. |
13 | * |
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. |
17 | * |
18 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
19 | * KIND, either express or implied. |
20 | * |
21 | * SPDX-License-Identifier: curl |
22 | * |
23 | ***************************************************************************/ |
24 | |
25 | #include "curl_setup.h" |
26 | |
27 | #if defined(__INTEL_COMPILER) && defined(__unix__) |
28 | |
29 | #ifdef HAVE_NETINET_IN_H |
30 | # include <netinet/in.h> |
31 | #endif |
32 | #ifdef HAVE_ARPA_INET_H |
33 | # include <arpa/inet.h> |
34 | #endif |
35 | |
36 | #endif /* __INTEL_COMPILER && __unix__ */ |
37 | |
38 | #define BUILDING_WARNLESS_C 1 |
39 | |
40 | #include "warnless.h" |
41 | |
42 | #define CURL_MASK_UCHAR ((unsigned char)~0) |
43 | #define CURL_MASK_SCHAR (CURL_MASK_UCHAR >> 1) |
44 | |
45 | #define CURL_MASK_USHORT ((unsigned short)~0) |
46 | #define CURL_MASK_SSHORT (CURL_MASK_USHORT >> 1) |
47 | |
48 | #define CURL_MASK_UINT ((unsigned int)~0) |
49 | #define CURL_MASK_SINT (CURL_MASK_UINT >> 1) |
50 | |
51 | #define CURL_MASK_ULONG ((unsigned long)~0) |
52 | #define CURL_MASK_SLONG (CURL_MASK_ULONG >> 1) |
53 | |
54 | #define CURL_MASK_UCOFFT ((unsigned CURL_TYPEOF_CURL_OFF_T)~0) |
55 | #define CURL_MASK_SCOFFT (CURL_MASK_UCOFFT >> 1) |
56 | |
57 | #define CURL_MASK_USIZE_T ((size_t)~0) |
58 | #define CURL_MASK_SSIZE_T (CURL_MASK_USIZE_T >> 1) |
59 | |
60 | /* |
61 | ** unsigned long to unsigned short |
62 | */ |
63 | |
64 | unsigned short curlx_ultous(unsigned long ulnum) |
65 | { |
66 | #ifdef __INTEL_COMPILER |
67 | # pragma warning(push) |
68 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
69 | #endif |
70 | |
71 | DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_USHORT); |
72 | return (unsigned short)(ulnum & (unsigned long) CURL_MASK_USHORT); |
73 | |
74 | #ifdef __INTEL_COMPILER |
75 | # pragma warning(pop) |
76 | #endif |
77 | } |
78 | |
79 | /* |
80 | ** unsigned long to unsigned char |
81 | */ |
82 | |
83 | unsigned char curlx_ultouc(unsigned long ulnum) |
84 | { |
85 | #ifdef __INTEL_COMPILER |
86 | # pragma warning(push) |
87 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
88 | #endif |
89 | |
90 | DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_UCHAR); |
91 | return (unsigned char)(ulnum & (unsigned long) CURL_MASK_UCHAR); |
92 | |
93 | #ifdef __INTEL_COMPILER |
94 | # pragma warning(pop) |
95 | #endif |
96 | } |
97 | |
98 | /* |
99 | ** unsigned size_t to signed curl_off_t |
100 | */ |
101 | |
102 | curl_off_t curlx_uztoso(size_t uznum) |
103 | { |
104 | #ifdef __INTEL_COMPILER |
105 | # pragma warning(push) |
106 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
107 | #elif defined(_MSC_VER) |
108 | # pragma warning(push) |
109 | # pragma warning(disable:4310) /* cast truncates constant value */ |
110 | #endif |
111 | |
112 | DEBUGASSERT(uznum <= (size_t) CURL_MASK_SCOFFT); |
113 | return (curl_off_t)(uznum & (size_t) CURL_MASK_SCOFFT); |
114 | |
115 | #if defined(__INTEL_COMPILER) || defined(_MSC_VER) |
116 | # pragma warning(pop) |
117 | #endif |
118 | } |
119 | |
120 | /* |
121 | ** unsigned size_t to signed int |
122 | */ |
123 | |
124 | int curlx_uztosi(size_t uznum) |
125 | { |
126 | #ifdef __INTEL_COMPILER |
127 | # pragma warning(push) |
128 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
129 | #endif |
130 | |
131 | DEBUGASSERT(uznum <= (size_t) CURL_MASK_SINT); |
132 | return (int)(uznum & (size_t) CURL_MASK_SINT); |
133 | |
134 | #ifdef __INTEL_COMPILER |
135 | # pragma warning(pop) |
136 | #endif |
137 | } |
138 | |
139 | /* |
140 | ** unsigned size_t to unsigned long |
141 | */ |
142 | |
143 | unsigned long curlx_uztoul(size_t uznum) |
144 | { |
145 | #ifdef __INTEL_COMPILER |
146 | # pragma warning(push) |
147 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
148 | #endif |
149 | |
150 | #if ULONG_MAX < SIZE_T_MAX |
151 | DEBUGASSERT(uznum <= (size_t) CURL_MASK_ULONG); |
152 | #endif |
153 | return (unsigned long)(uznum & (size_t) CURL_MASK_ULONG); |
154 | |
155 | #ifdef __INTEL_COMPILER |
156 | # pragma warning(pop) |
157 | #endif |
158 | } |
159 | |
160 | /* |
161 | ** unsigned size_t to unsigned int |
162 | */ |
163 | |
164 | unsigned int curlx_uztoui(size_t uznum) |
165 | { |
166 | #ifdef __INTEL_COMPILER |
167 | # pragma warning(push) |
168 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
169 | #endif |
170 | |
171 | #if UINT_MAX < SIZE_T_MAX |
172 | DEBUGASSERT(uznum <= (size_t) CURL_MASK_UINT); |
173 | #endif |
174 | return (unsigned int)(uznum & (size_t) CURL_MASK_UINT); |
175 | |
176 | #ifdef __INTEL_COMPILER |
177 | # pragma warning(pop) |
178 | #endif |
179 | } |
180 | |
181 | /* |
182 | ** signed long to signed int |
183 | */ |
184 | |
185 | int curlx_sltosi(long slnum) |
186 | { |
187 | #ifdef __INTEL_COMPILER |
188 | # pragma warning(push) |
189 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
190 | #endif |
191 | |
192 | DEBUGASSERT(slnum >= 0); |
193 | #if INT_MAX < LONG_MAX |
194 | DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_SINT); |
195 | #endif |
196 | return (int)(slnum & (long) CURL_MASK_SINT); |
197 | |
198 | #ifdef __INTEL_COMPILER |
199 | # pragma warning(pop) |
200 | #endif |
201 | } |
202 | |
203 | /* |
204 | ** signed long to unsigned int |
205 | */ |
206 | |
207 | unsigned int curlx_sltoui(long slnum) |
208 | { |
209 | #ifdef __INTEL_COMPILER |
210 | # pragma warning(push) |
211 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
212 | #endif |
213 | |
214 | DEBUGASSERT(slnum >= 0); |
215 | #if UINT_MAX < LONG_MAX |
216 | DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_UINT); |
217 | #endif |
218 | return (unsigned int)(slnum & (long) CURL_MASK_UINT); |
219 | |
220 | #ifdef __INTEL_COMPILER |
221 | # pragma warning(pop) |
222 | #endif |
223 | } |
224 | |
225 | /* |
226 | ** signed long to unsigned short |
227 | */ |
228 | |
229 | unsigned short curlx_sltous(long slnum) |
230 | { |
231 | #ifdef __INTEL_COMPILER |
232 | # pragma warning(push) |
233 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
234 | #endif |
235 | |
236 | DEBUGASSERT(slnum >= 0); |
237 | DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_USHORT); |
238 | return (unsigned short)(slnum & (long) CURL_MASK_USHORT); |
239 | |
240 | #ifdef __INTEL_COMPILER |
241 | # pragma warning(pop) |
242 | #endif |
243 | } |
244 | |
245 | /* |
246 | ** unsigned size_t to signed ssize_t |
247 | */ |
248 | |
249 | ssize_t curlx_uztosz(size_t uznum) |
250 | { |
251 | #ifdef __INTEL_COMPILER |
252 | # pragma warning(push) |
253 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
254 | #endif |
255 | |
256 | DEBUGASSERT(uznum <= (size_t) CURL_MASK_SSIZE_T); |
257 | return (ssize_t)(uznum & (size_t) CURL_MASK_SSIZE_T); |
258 | |
259 | #ifdef __INTEL_COMPILER |
260 | # pragma warning(pop) |
261 | #endif |
262 | } |
263 | |
264 | /* |
265 | ** signed curl_off_t to unsigned size_t |
266 | */ |
267 | |
268 | size_t curlx_sotouz(curl_off_t sonum) |
269 | { |
270 | #ifdef __INTEL_COMPILER |
271 | # pragma warning(push) |
272 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
273 | #endif |
274 | |
275 | DEBUGASSERT(sonum >= 0); |
276 | return (size_t)(sonum & (curl_off_t) CURL_MASK_USIZE_T); |
277 | |
278 | #ifdef __INTEL_COMPILER |
279 | # pragma warning(pop) |
280 | #endif |
281 | } |
282 | |
283 | /* |
284 | ** signed ssize_t to signed int |
285 | */ |
286 | |
287 | int curlx_sztosi(ssize_t sznum) |
288 | { |
289 | #ifdef __INTEL_COMPILER |
290 | # pragma warning(push) |
291 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
292 | #endif |
293 | |
294 | DEBUGASSERT(sznum >= 0); |
295 | #if INT_MAX < SSIZE_T_MAX |
296 | DEBUGASSERT((size_t) sznum <= (size_t) CURL_MASK_SINT); |
297 | #endif |
298 | return (int)(sznum & (ssize_t) CURL_MASK_SINT); |
299 | |
300 | #ifdef __INTEL_COMPILER |
301 | # pragma warning(pop) |
302 | #endif |
303 | } |
304 | |
305 | /* |
306 | ** unsigned int to unsigned short |
307 | */ |
308 | |
309 | unsigned short curlx_uitous(unsigned int uinum) |
310 | { |
311 | #ifdef __INTEL_COMPILER |
312 | # pragma warning(push) |
313 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
314 | #endif |
315 | |
316 | DEBUGASSERT(uinum <= (unsigned int) CURL_MASK_USHORT); |
317 | return (unsigned short) (uinum & (unsigned int) CURL_MASK_USHORT); |
318 | |
319 | #ifdef __INTEL_COMPILER |
320 | # pragma warning(pop) |
321 | #endif |
322 | } |
323 | |
324 | /* |
325 | ** signed int to unsigned size_t |
326 | */ |
327 | |
328 | size_t curlx_sitouz(int sinum) |
329 | { |
330 | #ifdef __INTEL_COMPILER |
331 | # pragma warning(push) |
332 | # pragma warning(disable:810) /* conversion may lose significant bits */ |
333 | #endif |
334 | |
335 | DEBUGASSERT(sinum >= 0); |
336 | return (size_t) sinum; |
337 | |
338 | #ifdef __INTEL_COMPILER |
339 | # pragma warning(pop) |
340 | #endif |
341 | } |
342 | |
343 | #ifdef USE_WINSOCK |
344 | |
345 | /* |
346 | ** curl_socket_t to signed int |
347 | */ |
348 | |
349 | int curlx_sktosi(curl_socket_t s) |
350 | { |
351 | return (int)((ssize_t) s); |
352 | } |
353 | |
354 | /* |
355 | ** signed int to curl_socket_t |
356 | */ |
357 | |
358 | curl_socket_t curlx_sitosk(int i) |
359 | { |
360 | return (curl_socket_t)((ssize_t) i); |
361 | } |
362 | |
363 | #endif /* USE_WINSOCK */ |
364 | |
365 | #if defined(WIN32) |
366 | |
367 | ssize_t curlx_read(int fd, void *buf, size_t count) |
368 | { |
369 | return (ssize_t)read(fd, buf, curlx_uztoui(count)); |
370 | } |
371 | |
372 | ssize_t curlx_write(int fd, const void *buf, size_t count) |
373 | { |
374 | return (ssize_t)write(fd, buf, curlx_uztoui(count)); |
375 | } |
376 | |
377 | #endif /* WIN32 */ |
378 | |
379 | #if defined(__INTEL_COMPILER) && defined(__unix__) |
380 | |
381 | int curlx_FD_ISSET(int fd, fd_set *fdset) |
382 | { |
383 | #pragma warning(push) |
384 | #pragma warning(disable:1469) /* clobber ignored */ |
385 | return FD_ISSET(fd, fdset); |
386 | #pragma warning(pop) |
387 | } |
388 | |
389 | void curlx_FD_SET(int fd, fd_set *fdset) |
390 | { |
391 | #pragma warning(push) |
392 | #pragma warning(disable:1469) /* clobber ignored */ |
393 | FD_SET(fd, fdset); |
394 | #pragma warning(pop) |
395 | } |
396 | |
397 | void curlx_FD_ZERO(fd_set *fdset) |
398 | { |
399 | #pragma warning(push) |
400 | #pragma warning(disable:593) /* variable was set but never used */ |
401 | FD_ZERO(fdset); |
402 | #pragma warning(pop) |
403 | } |
404 | |
405 | unsigned short curlx_htons(unsigned short usnum) |
406 | { |
407 | #if (__INTEL_COMPILER == 910) && defined(__i386__) |
408 | return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); |
409 | #else |
410 | #pragma warning(push) |
411 | #pragma warning(disable:810) /* conversion may lose significant bits */ |
412 | return htons(usnum); |
413 | #pragma warning(pop) |
414 | #endif |
415 | } |
416 | |
417 | unsigned short curlx_ntohs(unsigned short usnum) |
418 | { |
419 | #if (__INTEL_COMPILER == 910) && defined(__i386__) |
420 | return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); |
421 | #else |
422 | #pragma warning(push) |
423 | #pragma warning(disable:810) /* conversion may lose significant bits */ |
424 | return ntohs(usnum); |
425 | #pragma warning(pop) |
426 | #endif |
427 | } |
428 | |
429 | #endif /* __INTEL_COMPILER && __unix__ */ |
430 | |