Coverage Report

Created: 2025-06-09 07:42

/src/gdal/curl/lib/curlx/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 "warnless.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
#ifdef _WIN32
39
#undef read
40
#undef write
41
#endif
42
43
#include <limits.h>
44
45
0
#define CURL_MASK_UCHAR   ((unsigned char)~0)
46
47
0
#define CURL_MASK_USHORT  ((unsigned short)~0)
48
49
74.8k
#define CURL_MASK_UINT    ((unsigned int)~0)
50
74.8k
#define CURL_MASK_SINT    (CURL_MASK_UINT >> 1)
51
52
0
#define CURL_MASK_ULONG   ((unsigned long)~0)
53
54
0
#define CURL_MASK_USIZE_T ((size_t)~0)
55
0
#define CURL_MASK_SSIZE_T (CURL_MASK_USIZE_T >> 1)
56
57
/*
58
** unsigned long to unsigned char
59
*/
60
61
unsigned char curlx_ultouc(unsigned long ulnum)
62
0
{
63
#ifdef __INTEL_COMPILER
64
#  pragma warning(push)
65
#  pragma warning(disable:810) /* conversion may lose significant bits */
66
#endif
67
68
0
  DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_UCHAR);
69
0
  return (unsigned char)(ulnum & (unsigned long) CURL_MASK_UCHAR);
70
71
#ifdef __INTEL_COMPILER
72
#  pragma warning(pop)
73
#endif
74
0
}
75
76
/*
77
** unsigned size_t to signed int
78
*/
79
80
int curlx_uztosi(size_t uznum)
81
71.3k
{
82
#ifdef __INTEL_COMPILER
83
#  pragma warning(push)
84
#  pragma warning(disable:810) /* conversion may lose significant bits */
85
#endif
86
87
71.3k
  DEBUGASSERT(uznum <= (size_t) CURL_MASK_SINT);
88
71.3k
  return (int)(uznum & (size_t) CURL_MASK_SINT);
89
90
#ifdef __INTEL_COMPILER
91
#  pragma warning(pop)
92
#endif
93
71.3k
}
94
95
/*
96
** unsigned size_t to unsigned long
97
*/
98
99
unsigned long curlx_uztoul(size_t uznum)
100
0
{
101
#ifdef __INTEL_COMPILER
102
#  pragma warning(push)
103
#  pragma warning(disable:810) /* conversion may lose significant bits */
104
#endif
105
106
#if ULONG_MAX < SIZE_T_MAX
107
  DEBUGASSERT(uznum <= (size_t) CURL_MASK_ULONG);
108
#endif
109
0
  return (unsigned long)(uznum & (size_t) CURL_MASK_ULONG);
110
111
#ifdef __INTEL_COMPILER
112
#  pragma warning(pop)
113
#endif
114
0
}
115
116
/*
117
** unsigned size_t to unsigned int
118
*/
119
120
unsigned int curlx_uztoui(size_t uznum)
121
0
{
122
#ifdef __INTEL_COMPILER
123
#  pragma warning(push)
124
#  pragma warning(disable:810) /* conversion may lose significant bits */
125
#endif
126
127
0
#if UINT_MAX < SIZE_T_MAX
128
0
  DEBUGASSERT(uznum <= (size_t) CURL_MASK_UINT);
129
0
#endif
130
0
  return (unsigned int)(uznum & (size_t) CURL_MASK_UINT);
131
132
#ifdef __INTEL_COMPILER
133
#  pragma warning(pop)
134
#endif
135
0
}
136
137
/*
138
** signed long to signed int
139
*/
140
141
int curlx_sltosi(long slnum)
142
3.48k
{
143
#ifdef __INTEL_COMPILER
144
#  pragma warning(push)
145
#  pragma warning(disable:810) /* conversion may lose significant bits */
146
#endif
147
148
3.48k
  DEBUGASSERT(slnum >= 0);
149
3.48k
#if INT_MAX < LONG_MAX
150
3.48k
  DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_SINT);
151
3.48k
#endif
152
3.48k
  return (int)(slnum & (long) CURL_MASK_SINT);
153
154
#ifdef __INTEL_COMPILER
155
#  pragma warning(pop)
156
#endif
157
3.48k
}
158
159
/*
160
** signed long to unsigned int
161
*/
162
163
unsigned int curlx_sltoui(long slnum)
164
0
{
165
#ifdef __INTEL_COMPILER
166
#  pragma warning(push)
167
#  pragma warning(disable:810) /* conversion may lose significant bits */
168
#endif
169
170
0
  DEBUGASSERT(slnum >= 0);
171
0
#if UINT_MAX < LONG_MAX
172
0
  DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_UINT);
173
0
#endif
174
0
  return (unsigned int)(slnum & (long) CURL_MASK_UINT);
175
176
#ifdef __INTEL_COMPILER
177
#  pragma warning(pop)
178
#endif
179
0
}
180
181
/*
182
** signed long to unsigned short
183
*/
184
185
unsigned short curlx_sltous(long slnum)
186
0
{
187
#ifdef __INTEL_COMPILER
188
#  pragma warning(push)
189
#  pragma warning(disable:810) /* conversion may lose significant bits */
190
#endif
191
192
0
  DEBUGASSERT(slnum >= 0);
193
0
  DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_USHORT);
194
0
  return (unsigned short)(slnum & (long) CURL_MASK_USHORT);
195
196
#ifdef __INTEL_COMPILER
197
#  pragma warning(pop)
198
#endif
199
0
}
200
201
/*
202
** unsigned size_t to signed ssize_t
203
*/
204
205
ssize_t curlx_uztosz(size_t uznum)
206
0
{
207
#ifdef __INTEL_COMPILER
208
#  pragma warning(push)
209
#  pragma warning(disable:810) /* conversion may lose significant bits */
210
#endif
211
212
0
  DEBUGASSERT(uznum <= (size_t) CURL_MASK_SSIZE_T);
213
0
  return (ssize_t)(uznum & (size_t) CURL_MASK_SSIZE_T);
214
215
#ifdef __INTEL_COMPILER
216
#  pragma warning(pop)
217
#endif
218
0
}
219
220
/*
221
** signed curl_off_t to unsigned size_t
222
*/
223
224
size_t curlx_sotouz(curl_off_t sonum)
225
0
{
226
#ifdef __INTEL_COMPILER
227
#  pragma warning(push)
228
#  pragma warning(disable:810) /* conversion may lose significant bits */
229
#endif
230
231
0
  DEBUGASSERT(sonum >= 0);
232
0
  return (size_t)(sonum & (curl_off_t) CURL_MASK_USIZE_T);
233
234
#ifdef __INTEL_COMPILER
235
#  pragma warning(pop)
236
#endif
237
0
}
238
239
/*
240
** signed ssize_t to signed int
241
*/
242
243
int curlx_sztosi(ssize_t sznum)
244
0
{
245
#ifdef __INTEL_COMPILER
246
#  pragma warning(push)
247
#  pragma warning(disable:810) /* conversion may lose significant bits */
248
#endif
249
250
0
  DEBUGASSERT(sznum >= 0);
251
0
#if INT_MAX < SSIZE_T_MAX
252
0
  DEBUGASSERT((size_t) sznum <= (size_t) CURL_MASK_SINT);
253
0
#endif
254
0
  return (int)(sznum & (ssize_t) CURL_MASK_SINT);
255
256
#ifdef __INTEL_COMPILER
257
#  pragma warning(pop)
258
#endif
259
0
}
260
261
/*
262
** unsigned int to unsigned short
263
*/
264
265
unsigned short curlx_uitous(unsigned int uinum)
266
0
{
267
#ifdef __INTEL_COMPILER
268
#  pragma warning(push)
269
#  pragma warning(disable:810) /* conversion may lose significant bits */
270
#endif
271
272
0
  DEBUGASSERT(uinum <= (unsigned int) CURL_MASK_USHORT);
273
0
  return (unsigned short) (uinum & (unsigned int) CURL_MASK_USHORT);
274
275
#ifdef __INTEL_COMPILER
276
#  pragma warning(pop)
277
#endif
278
0
}
279
280
/*
281
** signed int to unsigned size_t
282
*/
283
284
size_t curlx_sitouz(int sinum)
285
0
{
286
#ifdef __INTEL_COMPILER
287
#  pragma warning(push)
288
#  pragma warning(disable:810) /* conversion may lose significant bits */
289
#endif
290
291
0
  DEBUGASSERT(sinum >= 0);
292
0
  return (size_t) sinum;
293
294
#ifdef __INTEL_COMPILER
295
#  pragma warning(pop)
296
#endif
297
0
}
298
299
#ifdef _WIN32
300
301
ssize_t curlx_read(int fd, void *buf, size_t count)
302
{
303
  return (ssize_t)read(fd, buf, curlx_uztoui(count));
304
}
305
306
ssize_t curlx_write(int fd, const void *buf, size_t count)
307
{
308
  return (ssize_t)write(fd, buf, curlx_uztoui(count));
309
}
310
311
#endif /* _WIN32 */
312
313
/* Ensure that warnless.h redefinitions continue to have an effect
314
   in "unity" builds. */
315
#undef HEADER_CURL_WARNLESS_H_REDEFS