Annotation of embedaddon/curl/lib/warnless.c, revision 1.1.1.1
1.1 misho 1: /***************************************************************************
2: * _ _ ____ _
3: * Project ___| | | | _ \| |
4: * / __| | | | |_) | |
5: * | (__| |_| | _ <| |___
6: * \___|\___/|_| \_\_____|
7: *
8: * Copyright (C) 1998 - 2019, 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.haxx.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: ***************************************************************************/
22:
23: #include "curl_setup.h"
24:
25: #if defined(__INTEL_COMPILER) && defined(__unix__)
26:
27: #ifdef HAVE_NETINET_IN_H
28: # include <netinet/in.h>
29: #endif
30: #ifdef HAVE_ARPA_INET_H
31: # include <arpa/inet.h>
32: #endif
33:
34: #endif /* __INTEL_COMPILER && __unix__ */
35:
36: #define BUILDING_WARNLESS_C 1
37:
38: #include "warnless.h"
39:
40: #define CURL_MASK_SCHAR 0x7F
41: #define CURL_MASK_UCHAR 0xFF
42:
43: #if (SIZEOF_SHORT == 2)
44: # define CURL_MASK_SSHORT 0x7FFF
45: # define CURL_MASK_USHORT 0xFFFF
46: #elif (SIZEOF_SHORT == 4)
47: # define CURL_MASK_SSHORT 0x7FFFFFFF
48: # define CURL_MASK_USHORT 0xFFFFFFFF
49: #elif (SIZEOF_SHORT == 8)
50: # define CURL_MASK_SSHORT 0x7FFFFFFFFFFFFFFF
51: # define CURL_MASK_USHORT 0xFFFFFFFFFFFFFFFF
52: #else
53: # error "SIZEOF_SHORT not defined"
54: #endif
55:
56: #if (SIZEOF_INT == 2)
57: # define CURL_MASK_SINT 0x7FFF
58: # define CURL_MASK_UINT 0xFFFF
59: #elif (SIZEOF_INT == 4)
60: # define CURL_MASK_SINT 0x7FFFFFFF
61: # define CURL_MASK_UINT 0xFFFFFFFF
62: #elif (SIZEOF_INT == 8)
63: # define CURL_MASK_SINT 0x7FFFFFFFFFFFFFFF
64: # define CURL_MASK_UINT 0xFFFFFFFFFFFFFFFF
65: #elif (SIZEOF_INT == 16)
66: # define CURL_MASK_SINT 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
67: # define CURL_MASK_UINT 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
68: #else
69: # error "SIZEOF_INT not defined"
70: #endif
71:
72: #if (SIZEOF_LONG == 2)
73: # define CURL_MASK_SLONG 0x7FFFL
74: # define CURL_MASK_ULONG 0xFFFFUL
75: #elif (SIZEOF_LONG == 4)
76: # define CURL_MASK_SLONG 0x7FFFFFFFL
77: # define CURL_MASK_ULONG 0xFFFFFFFFUL
78: #elif (SIZEOF_LONG == 8)
79: # define CURL_MASK_SLONG 0x7FFFFFFFFFFFFFFFL
80: # define CURL_MASK_ULONG 0xFFFFFFFFFFFFFFFFUL
81: #elif (SIZEOF_LONG == 16)
82: # define CURL_MASK_SLONG 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL
83: # define CURL_MASK_ULONG 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFUL
84: #else
85: # error "SIZEOF_LONG not defined"
86: #endif
87:
88: #if (SIZEOF_CURL_OFF_T == 2)
89: # define CURL_MASK_SCOFFT CURL_OFF_T_C(0x7FFF)
90: # define CURL_MASK_UCOFFT CURL_OFF_TU_C(0xFFFF)
91: #elif (SIZEOF_CURL_OFF_T == 4)
92: # define CURL_MASK_SCOFFT CURL_OFF_T_C(0x7FFFFFFF)
93: # define CURL_MASK_UCOFFT CURL_OFF_TU_C(0xFFFFFFFF)
94: #elif (SIZEOF_CURL_OFF_T == 8)
95: # define CURL_MASK_SCOFFT CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
96: # define CURL_MASK_UCOFFT CURL_OFF_TU_C(0xFFFFFFFFFFFFFFFF)
97: #elif (SIZEOF_CURL_OFF_T == 16)
98: # define CURL_MASK_SCOFFT CURL_OFF_T_C(0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
99: # define CURL_MASK_UCOFFT CURL_OFF_TU_C(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
100: #else
101: # error "SIZEOF_CURL_OFF_T not defined"
102: #endif
103:
104: #if (SIZEOF_SIZE_T == SIZEOF_SHORT)
105: # define CURL_MASK_SSIZE_T CURL_MASK_SSHORT
106: # define CURL_MASK_USIZE_T CURL_MASK_USHORT
107: #elif (SIZEOF_SIZE_T == SIZEOF_INT)
108: # define CURL_MASK_SSIZE_T CURL_MASK_SINT
109: # define CURL_MASK_USIZE_T CURL_MASK_UINT
110: #elif (SIZEOF_SIZE_T == SIZEOF_LONG)
111: # define CURL_MASK_SSIZE_T CURL_MASK_SLONG
112: # define CURL_MASK_USIZE_T CURL_MASK_ULONG
113: #elif (SIZEOF_SIZE_T == SIZEOF_CURL_OFF_T)
114: # define CURL_MASK_SSIZE_T CURL_MASK_SCOFFT
115: # define CURL_MASK_USIZE_T CURL_MASK_UCOFFT
116: #else
117: # error "SIZEOF_SIZE_T not defined"
118: #endif
119:
120: /*
121: ** unsigned long to unsigned short
122: */
123:
124: unsigned short curlx_ultous(unsigned long ulnum)
125: {
126: #ifdef __INTEL_COMPILER
127: # pragma warning(push)
128: # pragma warning(disable:810) /* conversion may lose significant bits */
129: #endif
130:
131: DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_USHORT);
132: return (unsigned short)(ulnum & (unsigned long) CURL_MASK_USHORT);
133:
134: #ifdef __INTEL_COMPILER
135: # pragma warning(pop)
136: #endif
137: }
138:
139: /*
140: ** unsigned long to unsigned char
141: */
142:
143: unsigned char curlx_ultouc(unsigned long ulnum)
144: {
145: #ifdef __INTEL_COMPILER
146: # pragma warning(push)
147: # pragma warning(disable:810) /* conversion may lose significant bits */
148: #endif
149:
150: DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_UCHAR);
151: return (unsigned char)(ulnum & (unsigned long) CURL_MASK_UCHAR);
152:
153: #ifdef __INTEL_COMPILER
154: # pragma warning(pop)
155: #endif
156: }
157:
158: /*
159: ** unsigned long to signed int
160: */
161:
162: int curlx_ultosi(unsigned long ulnum)
163: {
164: #ifdef __INTEL_COMPILER
165: # pragma warning(push)
166: # pragma warning(disable:810) /* conversion may lose significant bits */
167: #endif
168:
169: DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_SINT);
170: return (int)(ulnum & (unsigned long) CURL_MASK_SINT);
171:
172: #ifdef __INTEL_COMPILER
173: # pragma warning(pop)
174: #endif
175: }
176:
177: /*
178: ** unsigned size_t to signed curl_off_t
179: */
180:
181: curl_off_t curlx_uztoso(size_t uznum)
182: {
183: #ifdef __INTEL_COMPILER
184: # pragma warning(push)
185: # pragma warning(disable:810) /* conversion may lose significant bits */
186: #elif defined(_MSC_VER)
187: # pragma warning(push)
188: # pragma warning(disable:4310) /* cast truncates constant value */
189: #endif
190:
191: DEBUGASSERT(uznum <= (size_t) CURL_MASK_SCOFFT);
192: return (curl_off_t)(uznum & (size_t) CURL_MASK_SCOFFT);
193:
194: #if defined(__INTEL_COMPILER) || defined(_MSC_VER)
195: # pragma warning(pop)
196: #endif
197: }
198:
199: /*
200: ** unsigned size_t to signed int
201: */
202:
203: int curlx_uztosi(size_t uznum)
204: {
205: #ifdef __INTEL_COMPILER
206: # pragma warning(push)
207: # pragma warning(disable:810) /* conversion may lose significant bits */
208: #endif
209:
210: DEBUGASSERT(uznum <= (size_t) CURL_MASK_SINT);
211: return (int)(uznum & (size_t) CURL_MASK_SINT);
212:
213: #ifdef __INTEL_COMPILER
214: # pragma warning(pop)
215: #endif
216: }
217:
218: /*
219: ** unsigned size_t to unsigned long
220: */
221:
222: unsigned long curlx_uztoul(size_t uznum)
223: {
224: #ifdef __INTEL_COMPILER
225: # pragma warning(push)
226: # pragma warning(disable:810) /* conversion may lose significant bits */
227: #endif
228:
229: #if (SIZEOF_LONG < SIZEOF_SIZE_T)
230: DEBUGASSERT(uznum <= (size_t) CURL_MASK_ULONG);
231: #endif
232: return (unsigned long)(uznum & (size_t) CURL_MASK_ULONG);
233:
234: #ifdef __INTEL_COMPILER
235: # pragma warning(pop)
236: #endif
237: }
238:
239: /*
240: ** unsigned size_t to unsigned int
241: */
242:
243: unsigned int curlx_uztoui(size_t uznum)
244: {
245: #ifdef __INTEL_COMPILER
246: # pragma warning(push)
247: # pragma warning(disable:810) /* conversion may lose significant bits */
248: #endif
249:
250: #if (SIZEOF_INT < SIZEOF_SIZE_T)
251: DEBUGASSERT(uznum <= (size_t) CURL_MASK_UINT);
252: #endif
253: return (unsigned int)(uznum & (size_t) CURL_MASK_UINT);
254:
255: #ifdef __INTEL_COMPILER
256: # pragma warning(pop)
257: #endif
258: }
259:
260: /*
261: ** signed long to signed int
262: */
263:
264: int curlx_sltosi(long slnum)
265: {
266: #ifdef __INTEL_COMPILER
267: # pragma warning(push)
268: # pragma warning(disable:810) /* conversion may lose significant bits */
269: #endif
270:
271: DEBUGASSERT(slnum >= 0);
272: #if (SIZEOF_INT < SIZEOF_LONG)
273: DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_SINT);
274: #endif
275: return (int)(slnum & (long) CURL_MASK_SINT);
276:
277: #ifdef __INTEL_COMPILER
278: # pragma warning(pop)
279: #endif
280: }
281:
282: /*
283: ** signed long to unsigned int
284: */
285:
286: unsigned int curlx_sltoui(long slnum)
287: {
288: #ifdef __INTEL_COMPILER
289: # pragma warning(push)
290: # pragma warning(disable:810) /* conversion may lose significant bits */
291: #endif
292:
293: DEBUGASSERT(slnum >= 0);
294: #if (SIZEOF_INT < SIZEOF_LONG)
295: DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_UINT);
296: #endif
297: return (unsigned int)(slnum & (long) CURL_MASK_UINT);
298:
299: #ifdef __INTEL_COMPILER
300: # pragma warning(pop)
301: #endif
302: }
303:
304: /*
305: ** signed long to unsigned short
306: */
307:
308: unsigned short curlx_sltous(long slnum)
309: {
310: #ifdef __INTEL_COMPILER
311: # pragma warning(push)
312: # pragma warning(disable:810) /* conversion may lose significant bits */
313: #endif
314:
315: DEBUGASSERT(slnum >= 0);
316: DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_USHORT);
317: return (unsigned short)(slnum & (long) CURL_MASK_USHORT);
318:
319: #ifdef __INTEL_COMPILER
320: # pragma warning(pop)
321: #endif
322: }
323:
324: /*
325: ** unsigned size_t to signed ssize_t
326: */
327:
328: ssize_t curlx_uztosz(size_t uznum)
329: {
330: #ifdef __INTEL_COMPILER
331: # pragma warning(push)
332: # pragma warning(disable:810) /* conversion may lose significant bits */
333: #endif
334:
335: DEBUGASSERT(uznum <= (size_t) CURL_MASK_SSIZE_T);
336: return (ssize_t)(uznum & (size_t) CURL_MASK_SSIZE_T);
337:
338: #ifdef __INTEL_COMPILER
339: # pragma warning(pop)
340: #endif
341: }
342:
343: /*
344: ** signed curl_off_t to unsigned size_t
345: */
346:
347: size_t curlx_sotouz(curl_off_t sonum)
348: {
349: #ifdef __INTEL_COMPILER
350: # pragma warning(push)
351: # pragma warning(disable:810) /* conversion may lose significant bits */
352: #endif
353:
354: DEBUGASSERT(sonum >= 0);
355: return (size_t)(sonum & (curl_off_t) CURL_MASK_USIZE_T);
356:
357: #ifdef __INTEL_COMPILER
358: # pragma warning(pop)
359: #endif
360: }
361:
362: /*
363: ** signed ssize_t to signed int
364: */
365:
366: int curlx_sztosi(ssize_t sznum)
367: {
368: #ifdef __INTEL_COMPILER
369: # pragma warning(push)
370: # pragma warning(disable:810) /* conversion may lose significant bits */
371: #endif
372:
373: DEBUGASSERT(sznum >= 0);
374: #if (SIZEOF_INT < SIZEOF_SIZE_T)
375: DEBUGASSERT((size_t) sznum <= (size_t) CURL_MASK_SINT);
376: #endif
377: return (int)(sznum & (ssize_t) CURL_MASK_SINT);
378:
379: #ifdef __INTEL_COMPILER
380: # pragma warning(pop)
381: #endif
382: }
383:
384: /*
385: ** unsigned int to unsigned short
386: */
387:
388: unsigned short curlx_uitous(unsigned int uinum)
389: {
390: #ifdef __INTEL_COMPILER
391: # pragma warning(push)
392: # pragma warning(disable:810) /* conversion may lose significant bits */
393: #endif
394:
395: DEBUGASSERT(uinum <= (unsigned int) CURL_MASK_USHORT);
396: return (unsigned short) (uinum & (unsigned int) CURL_MASK_USHORT);
397:
398: #ifdef __INTEL_COMPILER
399: # pragma warning(pop)
400: #endif
401: }
402:
403: /*
404: ** signed int to unsigned size_t
405: */
406:
407: size_t curlx_sitouz(int sinum)
408: {
409: #ifdef __INTEL_COMPILER
410: # pragma warning(push)
411: # pragma warning(disable:810) /* conversion may lose significant bits */
412: #endif
413:
414: DEBUGASSERT(sinum >= 0);
415: return (size_t) sinum;
416:
417: #ifdef __INTEL_COMPILER
418: # pragma warning(pop)
419: #endif
420: }
421:
422: #ifdef USE_WINSOCK
423:
424: /*
425: ** curl_socket_t to signed int
426: */
427:
428: int curlx_sktosi(curl_socket_t s)
429: {
430: return (int)((ssize_t) s);
431: }
432:
433: /*
434: ** signed int to curl_socket_t
435: */
436:
437: curl_socket_t curlx_sitosk(int i)
438: {
439: return (curl_socket_t)((ssize_t) i);
440: }
441:
442: #endif /* USE_WINSOCK */
443:
444: #if defined(WIN32) || defined(_WIN32)
445:
446: ssize_t curlx_read(int fd, void *buf, size_t count)
447: {
448: return (ssize_t)read(fd, buf, curlx_uztoui(count));
449: }
450:
451: ssize_t curlx_write(int fd, const void *buf, size_t count)
452: {
453: return (ssize_t)write(fd, buf, curlx_uztoui(count));
454: }
455:
456: #endif /* WIN32 || _WIN32 */
457:
458: #if defined(__INTEL_COMPILER) && defined(__unix__)
459:
460: int curlx_FD_ISSET(int fd, fd_set *fdset)
461: {
462: #pragma warning(push)
463: #pragma warning(disable:1469) /* clobber ignored */
464: return FD_ISSET(fd, fdset);
465: #pragma warning(pop)
466: }
467:
468: void curlx_FD_SET(int fd, fd_set *fdset)
469: {
470: #pragma warning(push)
471: #pragma warning(disable:1469) /* clobber ignored */
472: FD_SET(fd, fdset);
473: #pragma warning(pop)
474: }
475:
476: void curlx_FD_ZERO(fd_set *fdset)
477: {
478: #pragma warning(push)
479: #pragma warning(disable:593) /* variable was set but never used */
480: FD_ZERO(fdset);
481: #pragma warning(pop)
482: }
483:
484: unsigned short curlx_htons(unsigned short usnum)
485: {
486: #if (__INTEL_COMPILER == 910) && defined(__i386__)
487: return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
488: #else
489: #pragma warning(push)
490: #pragma warning(disable:810) /* conversion may lose significant bits */
491: return htons(usnum);
492: #pragma warning(pop)
493: #endif
494: }
495:
496: unsigned short curlx_ntohs(unsigned short usnum)
497: {
498: #if (__INTEL_COMPILER == 910) && defined(__i386__)
499: return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
500: #else
501: #pragma warning(push)
502: #pragma warning(disable:810) /* conversion may lose significant bits */
503: return ntohs(usnum);
504: #pragma warning(pop)
505: #endif
506: }
507:
508: #endif /* __INTEL_COMPILER && __unix__ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>