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