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