Coverage Report

Created: 2023-06-07 07:02

/src/curl/lib/warnless.c
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__ */