Imported Upstream version 3.25.0
[platform/upstream/cmake.git] / Utilities / cmcurl / lib / warnless.c
1 /***************************************************************************
2  *                                  _   _ ____  _
3  *  Project                     ___| | | |  _ \| |
4  *                             / __| | | | |_) | |
5  *                            | (__| |_| |  _ <| |___
6  *                             \___|\___/|_| \_\_____|
7  *
8  * Copyright (C) 1998 - 2022, 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 #define CURL_MASK_UCHAR   ((unsigned char)~0)
45 #define CURL_MASK_SCHAR   (CURL_MASK_UCHAR >> 1)
46
47 #define CURL_MASK_USHORT  ((unsigned short)~0)
48 #define CURL_MASK_SSHORT  (CURL_MASK_USHORT >> 1)
49
50 #define CURL_MASK_UINT    ((unsigned int)~0)
51 #define CURL_MASK_SINT    (CURL_MASK_UINT >> 1)
52
53 #define CURL_MASK_ULONG   ((unsigned long)~0)
54 #define CURL_MASK_SLONG   (CURL_MASK_ULONG >> 1)
55
56 #define CURL_MASK_UCOFFT  ((unsigned CURL_TYPEOF_CURL_OFF_T)~0)
57 #define CURL_MASK_SCOFFT  (CURL_MASK_UCOFFT >> 1)
58
59 #define CURL_MASK_USIZE_T ((size_t)~0)
60 #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 {
68 #ifdef __INTEL_COMPILER
69 #  pragma warning(push)
70 #  pragma warning(disable:810) /* conversion may lose significant bits */
71 #endif
72
73   DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_USHORT);
74   return (unsigned short)(ulnum & (unsigned long) CURL_MASK_USHORT);
75
76 #ifdef __INTEL_COMPILER
77 #  pragma warning(pop)
78 #endif
79 }
80
81 /*
82 ** unsigned long to unsigned char
83 */
84
85 unsigned char curlx_ultouc(unsigned long ulnum)
86 {
87 #ifdef __INTEL_COMPILER
88 #  pragma warning(push)
89 #  pragma warning(disable:810) /* conversion may lose significant bits */
90 #endif
91
92   DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_UCHAR);
93   return (unsigned char)(ulnum & (unsigned long) CURL_MASK_UCHAR);
94
95 #ifdef __INTEL_COMPILER
96 #  pragma warning(pop)
97 #endif
98 }
99
100 /*
101 ** unsigned size_t to signed curl_off_t
102 */
103
104 curl_off_t curlx_uztoso(size_t uznum)
105 {
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   DEBUGASSERT(uznum <= (size_t) CURL_MASK_SCOFFT);
115   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 }
121
122 /*
123 ** unsigned size_t to signed int
124 */
125
126 int curlx_uztosi(size_t uznum)
127 {
128 #ifdef __INTEL_COMPILER
129 #  pragma warning(push)
130 #  pragma warning(disable:810) /* conversion may lose significant bits */
131 #endif
132
133   DEBUGASSERT(uznum <= (size_t) CURL_MASK_SINT);
134   return (int)(uznum & (size_t) CURL_MASK_SINT);
135
136 #ifdef __INTEL_COMPILER
137 #  pragma warning(pop)
138 #endif
139 }
140
141 /*
142 ** unsigned size_t to unsigned long
143 */
144
145 unsigned long curlx_uztoul(size_t uznum)
146 {
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   return (unsigned long)(uznum & (size_t) CURL_MASK_ULONG);
156
157 #ifdef __INTEL_COMPILER
158 # pragma warning(pop)
159 #endif
160 }
161
162 /*
163 ** unsigned size_t to unsigned int
164 */
165
166 unsigned int curlx_uztoui(size_t uznum)
167 {
168 #ifdef __INTEL_COMPILER
169 # pragma warning(push)
170 # pragma warning(disable:810) /* conversion may lose significant bits */
171 #endif
172
173 #if UINT_MAX < SIZE_T_MAX
174   DEBUGASSERT(uznum <= (size_t) CURL_MASK_UINT);
175 #endif
176   return (unsigned int)(uznum & (size_t) CURL_MASK_UINT);
177
178 #ifdef __INTEL_COMPILER
179 # pragma warning(pop)
180 #endif
181 }
182
183 /*
184 ** signed long to signed int
185 */
186
187 int curlx_sltosi(long slnum)
188 {
189 #ifdef __INTEL_COMPILER
190 #  pragma warning(push)
191 #  pragma warning(disable:810) /* conversion may lose significant bits */
192 #endif
193
194   DEBUGASSERT(slnum >= 0);
195 #if INT_MAX < LONG_MAX
196   DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_SINT);
197 #endif
198   return (int)(slnum & (long) CURL_MASK_SINT);
199
200 #ifdef __INTEL_COMPILER
201 #  pragma warning(pop)
202 #endif
203 }
204
205 /*
206 ** signed long to unsigned int
207 */
208
209 unsigned int curlx_sltoui(long slnum)
210 {
211 #ifdef __INTEL_COMPILER
212 #  pragma warning(push)
213 #  pragma warning(disable:810) /* conversion may lose significant bits */
214 #endif
215
216   DEBUGASSERT(slnum >= 0);
217 #if UINT_MAX < LONG_MAX
218   DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_UINT);
219 #endif
220   return (unsigned int)(slnum & (long) CURL_MASK_UINT);
221
222 #ifdef __INTEL_COMPILER
223 #  pragma warning(pop)
224 #endif
225 }
226
227 /*
228 ** signed long to unsigned short
229 */
230
231 unsigned short curlx_sltous(long slnum)
232 {
233 #ifdef __INTEL_COMPILER
234 #  pragma warning(push)
235 #  pragma warning(disable:810) /* conversion may lose significant bits */
236 #endif
237
238   DEBUGASSERT(slnum >= 0);
239   DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_USHORT);
240   return (unsigned short)(slnum & (long) CURL_MASK_USHORT);
241
242 #ifdef __INTEL_COMPILER
243 #  pragma warning(pop)
244 #endif
245 }
246
247 /*
248 ** unsigned size_t to signed ssize_t
249 */
250
251 ssize_t curlx_uztosz(size_t uznum)
252 {
253 #ifdef __INTEL_COMPILER
254 #  pragma warning(push)
255 #  pragma warning(disable:810) /* conversion may lose significant bits */
256 #endif
257
258   DEBUGASSERT(uznum <= (size_t) CURL_MASK_SSIZE_T);
259   return (ssize_t)(uznum & (size_t) CURL_MASK_SSIZE_T);
260
261 #ifdef __INTEL_COMPILER
262 #  pragma warning(pop)
263 #endif
264 }
265
266 /*
267 ** signed curl_off_t to unsigned size_t
268 */
269
270 size_t curlx_sotouz(curl_off_t sonum)
271 {
272 #ifdef __INTEL_COMPILER
273 #  pragma warning(push)
274 #  pragma warning(disable:810) /* conversion may lose significant bits */
275 #endif
276
277   DEBUGASSERT(sonum >= 0);
278   return (size_t)(sonum & (curl_off_t) CURL_MASK_USIZE_T);
279
280 #ifdef __INTEL_COMPILER
281 #  pragma warning(pop)
282 #endif
283 }
284
285 /*
286 ** signed ssize_t to signed int
287 */
288
289 int curlx_sztosi(ssize_t sznum)
290 {
291 #ifdef __INTEL_COMPILER
292 #  pragma warning(push)
293 #  pragma warning(disable:810) /* conversion may lose significant bits */
294 #endif
295
296   DEBUGASSERT(sznum >= 0);
297 #if INT_MAX < SSIZE_T_MAX
298   DEBUGASSERT((size_t) sznum <= (size_t) CURL_MASK_SINT);
299 #endif
300   return (int)(sznum & (ssize_t) CURL_MASK_SINT);
301
302 #ifdef __INTEL_COMPILER
303 #  pragma warning(pop)
304 #endif
305 }
306
307 /*
308 ** unsigned int to unsigned short
309 */
310
311 unsigned short curlx_uitous(unsigned int uinum)
312 {
313 #ifdef __INTEL_COMPILER
314 #  pragma warning(push)
315 #  pragma warning(disable:810) /* conversion may lose significant bits */
316 #endif
317
318   DEBUGASSERT(uinum <= (unsigned int) CURL_MASK_USHORT);
319   return (unsigned short) (uinum & (unsigned int) CURL_MASK_USHORT);
320
321 #ifdef __INTEL_COMPILER
322 #  pragma warning(pop)
323 #endif
324 }
325
326 /*
327 ** signed int to unsigned size_t
328 */
329
330 size_t curlx_sitouz(int sinum)
331 {
332 #ifdef __INTEL_COMPILER
333 #  pragma warning(push)
334 #  pragma warning(disable:810) /* conversion may lose significant bits */
335 #endif
336
337   DEBUGASSERT(sinum >= 0);
338   return (size_t) sinum;
339
340 #ifdef __INTEL_COMPILER
341 #  pragma warning(pop)
342 #endif
343 }
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__ */