1/*************************************************************************** 2 * _ _ ____ _ 3 * Project ___| | | | _ \| | 4 * / __| | | | |_) | | 5 * | (__| |_| | _ <| |___ 6 * \___|\___/|_| \_\_____| 7 * 8 * Copyright (C) 1998 - 2011, 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 http://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 "setup.h" 24 25#if defined(__INTEL_COMPILER) && defined(__unix__) 26 27#ifdef HAVE_SYS_SOCKET_H 28# include <sys/socket.h> 29#endif 30#ifdef HAVE_NETINET_IN_H 31# include <netinet/in.h> 32#endif 33#ifdef HAVE_ARPA_INET_H 34# include <arpa/inet.h> 35#endif 36 37#endif /* __INTEL_COMPILER && __unix__ */ 38 39#define BUILDING_WARNLESS_C 1 40 41#include "warnless.h" 42 43#define CURL_MASK_SCHAR 0x7F 44#define CURL_MASK_UCHAR 0xFF 45 46#if (SIZEOF_SHORT == 2) 47# define CURL_MASK_SSHORT 0x7FFF 48# define CURL_MASK_USHORT 0xFFFF 49#elif (SIZEOF_SHORT == 4) 50# define CURL_MASK_SSHORT 0x7FFFFFFF 51# define CURL_MASK_USHORT 0xFFFFFFFF 52#elif (SIZEOF_SHORT == 8) 53# define CURL_MASK_SSHORT 0x7FFFFFFFFFFFFFFF 54# define CURL_MASK_USHORT 0xFFFFFFFFFFFFFFFF 55#else 56# error "SIZEOF_SHORT not defined" 57#endif 58 59#if (SIZEOF_INT == 2) 60# define CURL_MASK_SINT 0x7FFF 61# define CURL_MASK_UINT 0xFFFF 62#elif (SIZEOF_INT == 4) 63# define CURL_MASK_SINT 0x7FFFFFFF 64# define CURL_MASK_UINT 0xFFFFFFFF 65#elif (SIZEOF_INT == 8) 66# define CURL_MASK_SINT 0x7FFFFFFFFFFFFFFF 67# define CURL_MASK_UINT 0xFFFFFFFFFFFFFFFF 68#elif (SIZEOF_INT == 16) 69# define CURL_MASK_SINT 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 70# define CURL_MASK_UINT 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 71#else 72# error "SIZEOF_INT not defined" 73#endif 74 75#if (CURL_SIZEOF_LONG == 2) 76# define CURL_MASK_SLONG 0x7FFFL 77# define CURL_MASK_ULONG 0xFFFFUL 78#elif (CURL_SIZEOF_LONG == 4) 79# define CURL_MASK_SLONG 0x7FFFFFFFL 80# define CURL_MASK_ULONG 0xFFFFFFFFUL 81#elif (CURL_SIZEOF_LONG == 8) 82# define CURL_MASK_SLONG 0x7FFFFFFFFFFFFFFFL 83# define CURL_MASK_ULONG 0xFFFFFFFFFFFFFFFFUL 84#elif (CURL_SIZEOF_LONG == 16) 85# define CURL_MASK_SLONG 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL 86# define CURL_MASK_ULONG 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFUL 87#else 88# error "CURL_SIZEOF_LONG not defined" 89#endif 90 91#if (CURL_SIZEOF_CURL_OFF_T == 2) 92# define CURL_MASK_SCOFFT CURL_OFF_T_C(0x7FFF) 93# define CURL_MASK_UCOFFT CURL_OFF_TU_C(0xFFFF) 94#elif (CURL_SIZEOF_CURL_OFF_T == 4) 95# define CURL_MASK_SCOFFT CURL_OFF_T_C(0x7FFFFFFF) 96# define CURL_MASK_UCOFFT CURL_OFF_TU_C(0xFFFFFFFF) 97#elif (CURL_SIZEOF_CURL_OFF_T == 8) 98# define CURL_MASK_SCOFFT CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF) 99# define CURL_MASK_UCOFFT CURL_OFF_TU_C(0xFFFFFFFFFFFFFFFF) 100#elif (CURL_SIZEOF_CURL_OFF_T == 16) 101# define CURL_MASK_SCOFFT CURL_OFF_T_C(0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) 102# define CURL_MASK_UCOFFT CURL_OFF_TU_C(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) 103#else 104# error "CURL_SIZEOF_CURL_OFF_T not defined" 105#endif 106 107#if (SIZEOF_SIZE_T == SIZEOF_SHORT) 108# define CURL_MASK_SSIZE_T CURL_MASK_SSHORT 109# define CURL_MASK_USIZE_T CURL_MASK_USHORT 110#elif (SIZEOF_SIZE_T == SIZEOF_INT) 111# define CURL_MASK_SSIZE_T CURL_MASK_SINT 112# define CURL_MASK_USIZE_T CURL_MASK_UINT 113#elif (SIZEOF_SIZE_T == CURL_SIZEOF_LONG) 114# define CURL_MASK_SSIZE_T CURL_MASK_SLONG 115# define CURL_MASK_USIZE_T CURL_MASK_ULONG 116#elif (SIZEOF_SIZE_T == CURL_SIZEOF_CURL_OFF_T) 117# define CURL_MASK_SSIZE_T CURL_MASK_SCOFFT 118# define CURL_MASK_USIZE_T CURL_MASK_UCOFFT 119#else 120# error "SIZEOF_SIZE_T not defined" 121#endif 122 123/* 124** unsigned long to unsigned short 125*/ 126 127unsigned short curlx_ultous(unsigned long ulnum) 128{ 129#ifdef __INTEL_COMPILER 130# pragma warning(push) 131# pragma warning(disable:810) /* conversion may lose significant bits */ 132#endif 133 134 return (unsigned short)(ulnum & (unsigned long) CURL_MASK_USHORT); 135 136#ifdef __INTEL_COMPILER 137# pragma warning(pop) 138#endif 139} 140 141/* 142** unsigned long to unsigned char 143*/ 144 145unsigned char curlx_ultouc(unsigned long ulnum) 146{ 147#ifdef __INTEL_COMPILER 148# pragma warning(push) 149# pragma warning(disable:810) /* conversion may lose significant bits */ 150#endif 151 152 return (unsigned char)(ulnum & (unsigned long) CURL_MASK_UCHAR); 153 154#ifdef __INTEL_COMPILER 155# pragma warning(pop) 156#endif 157} 158 159/* 160** unsigned size_t to signed int 161*/ 162 163int curlx_uztosi(size_t uznum) 164{ 165#ifdef __INTEL_COMPILER 166# pragma warning(push) 167# pragma warning(disable:810) /* conversion may lose significant bits */ 168#endif 169 170 return (int)(uznum & (size_t) CURL_MASK_SINT); 171 172#ifdef __INTEL_COMPILER 173# pragma warning(pop) 174#endif 175} 176 177/* 178** signed long to signed int 179*/ 180 181int curlx_sltosi(long slnum) 182{ 183#ifdef __INTEL_COMPILER 184# pragma warning(push) 185# pragma warning(disable:810) /* conversion may lose significant bits */ 186#endif 187 188 DEBUGASSERT(slnum >= 0); 189 return (int)(slnum & (long) CURL_MASK_SINT); 190 191#ifdef __INTEL_COMPILER 192# pragma warning(pop) 193#endif 194} 195 196/* 197** signed long to unsigned int 198*/ 199 200unsigned int curlx_sltoui(long slnum) 201{ 202#ifdef __INTEL_COMPILER 203# pragma warning(push) 204# pragma warning(disable:810) /* conversion may lose significant bits */ 205#endif 206 207 DEBUGASSERT(slnum >= 0); 208 return (unsigned int)(slnum & (long) CURL_MASK_UINT); 209 210#ifdef __INTEL_COMPILER 211# pragma warning(pop) 212#endif 213} 214 215/* 216** signed long to unsigned short 217*/ 218 219unsigned short curlx_sltous(long slnum) 220{ 221#ifdef __INTEL_COMPILER 222# pragma warning(push) 223# pragma warning(disable:810) /* conversion may lose significant bits */ 224#endif 225 226 DEBUGASSERT(slnum >= 0); 227 return (unsigned short)(slnum & (long) CURL_MASK_USHORT); 228 229#ifdef __INTEL_COMPILER 230# pragma warning(pop) 231#endif 232} 233 234/* 235** unsigned size_t to signed ssize_t 236*/ 237 238ssize_t curlx_uztosz(size_t uznum) 239{ 240#ifdef __INTEL_COMPILER 241# pragma warning(push) 242# pragma warning(disable:810) /* conversion may lose significant bits */ 243#endif 244 245 return (ssize_t)(uznum & (size_t) CURL_MASK_SSIZE_T); 246 247#ifdef __INTEL_COMPILER 248# pragma warning(pop) 249#endif 250} 251 252/* 253** signed curl_off_t to unsigned size_t 254*/ 255 256size_t curlx_sotouz(curl_off_t sonum) 257{ 258#ifdef __INTEL_COMPILER 259# pragma warning(push) 260# pragma warning(disable:810) /* conversion may lose significant bits */ 261#endif 262 263 DEBUGASSERT(sonum >= 0); 264 return (size_t)(sonum & (curl_off_t) CURL_MASK_USIZE_T); 265 266#ifdef __INTEL_COMPILER 267# pragma warning(pop) 268#endif 269} 270 271#if defined(__INTEL_COMPILER) && defined(__unix__) 272 273int curlx_FD_ISSET(int fd, fd_set *fdset) 274{ 275 #pragma warning(push) 276 #pragma warning(disable:1469) /* clobber ignored */ 277 return FD_ISSET(fd, fdset); 278 #pragma warning(pop) 279} 280 281void curlx_FD_SET(int fd, fd_set *fdset) 282{ 283 #pragma warning(push) 284 #pragma warning(disable:1469) /* clobber ignored */ 285 FD_SET(fd, fdset); 286 #pragma warning(pop) 287} 288 289void curlx_FD_ZERO(fd_set *fdset) 290{ 291 #pragma warning(push) 292 #pragma warning(disable:593) /* variable was set but never used */ 293 FD_ZERO(fdset); 294 #pragma warning(pop) 295} 296 297unsigned short curlx_htons(unsigned short usnum) 298{ 299#if (__INTEL_COMPILER == 910) && defined(__i386__) 300 return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); 301#else 302 #pragma warning(push) 303 #pragma warning(disable:810) /* conversion may lose significant bits */ 304 return htons(usnum); 305 #pragma warning(pop) 306#endif 307} 308 309unsigned short curlx_ntohs(unsigned short usnum) 310{ 311#if (__INTEL_COMPILER == 910) && defined(__i386__) 312 return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); 313#else 314 #pragma warning(push) 315 #pragma warning(disable:810) /* conversion may lose significant bits */ 316 return ntohs(usnum); 317 #pragma warning(pop) 318#endif 319} 320 321#endif /* __INTEL_COMPILER && __unix__ */ 322