fix compiler warning: rounding, sign extension, or loss of accuracy may result
authorYang Tse <yangsita@gmail.com>
Thu, 2 Dec 2010 17:46:13 +0000 (18:46 +0100)
committerYang Tse <yangsita@gmail.com>
Thu, 2 Dec 2010 17:46:13 +0000 (18:46 +0100)
lib/gopher.c
lib/warnless.c
lib/warnless.h
tests/server/rtspd.c
tests/server/sws.c

index aa9c45b..3d8fcff 100644 (file)
@@ -78,6 +78,7 @@
 #include "rawstr.h"
 #include "select.h"
 #include "url.h"
+#include "warnless.h"
 
 #define _MPRINTF_REPLACE /* use our functions only */
 #include <curl/mprintf.h>
@@ -156,7 +157,7 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
 
   /* We use Curl_write instead of Curl_sendf to make sure the entire buffer is
      sent, which could be sizeable with long selectors. */
-  k = strlen(sel);
+  k = curlx_uztosz(strlen(sel));
 
   for(;;) {
     result = Curl_write(conn, sockfd, sel, k, &amount);
index 471e4b2..3bd23df 100644 (file)
@@ -37,7 +37,7 @@
 #  define CURL_MASK_SSHORT  0x7FFFFFFFFFFFFFFF
 #  define CURL_MASK_USHORT  0xFFFFFFFFFFFFFFFF
 #else
-# error "SIZEOF_SHORT not defined"
+#  error "SIZEOF_SHORT not defined"
 #endif
 
 #if (SIZEOF_INT == 2)
@@ -53,7 +53,7 @@
 #  define CURL_MASK_SINT  0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
 #  define CURL_MASK_UINT  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
 #else
-# error "SIZEOF_INT not defined"
+#  error "SIZEOF_INT not defined"
 #endif
 
 #if (CURL_SIZEOF_LONG == 2)
 #  define CURL_MASK_SLONG  0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL
 #  define CURL_MASK_ULONG  0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFUL
 #else
-# error "SIZEOF_LONG not defined"
+#  error "CURL_SIZEOF_LONG not defined"
+#endif
+
+#if (CURL_SIZEOF_CURL_OFF_T == 2)
+#  define CURL_MASK_SCOFFT  CURL_OFF_T_C(0x7FFF)
+#  define CURL_MASK_UCOFFT  CURL_OFF_TU_C(0xFFFF)
+#elif (CURL_SIZEOF_CURL_OFF_T == 4)
+#  define CURL_MASK_SCOFFT  CURL_OFF_T_C(0x7FFFFFFF)
+#  define CURL_MASK_UCOFFT  CURL_OFF_TU_C(0xFFFFFFFF)
+#elif (CURL_SIZEOF_CURL_OFF_T == 8)
+#  define CURL_MASK_SCOFFT  CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
+#  define CURL_MASK_UCOFFT  CURL_OFF_TU_C(0xFFFFFFFFFFFFFFFF)
+#elif (CURL_SIZEOF_CURL_OFF_T == 16)
+#  define CURL_MASK_SCOFFT  CURL_OFF_T_C(0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
+#  define CURL_MASK_UCOFFT  CURL_OFF_TU_C(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
+#else
+#  error "CURL_SIZEOF_CURL_OFF_T not defined"
+#endif
+
+#if (SIZEOF_SIZE_T == SIZEOF_SHORT)
+#  define CURL_MASK_SSIZE_T  CURL_MASK_SSHORT
+#  define CURL_MASK_USIZE_T  CURL_MASK_USHORT
+#elif (SIZEOF_SIZE_T == SIZEOF_INT)
+#  define CURL_MASK_SSIZE_T  CURL_MASK_SINT
+#  define CURL_MASK_USIZE_T  CURL_MASK_UINT
+#elif (SIZEOF_SIZE_T == CURL_SIZEOF_LONG)
+#  define CURL_MASK_SSIZE_T  CURL_MASK_SLONG
+#  define CURL_MASK_USIZE_T  CURL_MASK_ULONG
+#elif (SIZEOF_SIZE_T == CURL_SIZEOF_CURL_OFF_T)
+#  define CURL_MASK_SSIZE_T  CURL_MASK_SCOFFT
+#  define CURL_MASK_USIZE_T  CURL_MASK_UCOFFT
+#else
+#  error "SIZEOF_SIZE_T not defined"
 #endif
 
 /*
@@ -179,3 +211,21 @@ unsigned short curlx_sltous(long slnum)
 #  pragma warning(pop)
 #endif
 }
+
+/*
+** unsigned size_t to signed ssize_t
+*/
+
+ssize_t curlx_uztosz(size_t uznum)
+{
+#ifdef __INTEL_COMPILER
+#  pragma warning(push)
+#  pragma warning(disable:810) /* conversion may lose significant bits */
+#endif
+
+  return (ssize_t)(uznum & (size_t) CURL_MASK_SSIZE_T);
+
+#ifdef __INTEL_COMPILER
+#  pragma warning(pop)
+#endif
+}
index ed692d8..7181a6e 100644 (file)
@@ -34,4 +34,6 @@ unsigned int curlx_sltoui(long slnum);
 
 unsigned short curlx_sltous(long slnum);
 
+ssize_t curlx_uztosz(size_t uznum);
+
 #endif /* HEADER_CURL_WARNLESS_H */
index f751f11..5c06729 100644 (file)
@@ -798,7 +798,7 @@ static int get_request(curl_socket_t sock, struct httprequest *req)
   while(!done_processing && (req->offset < REQBUFSIZ-1)) {
     if(pipereq_length && pipereq) {
       memmove(reqbuf, pipereq, pipereq_length);
-      got = pipereq_length;
+      got = curlx_uztosz(pipereq_length);
       pipereq_length = 0;
     }
     else {
index 65a61c2..fb54c20 100644 (file)
@@ -762,7 +762,7 @@ static int get_request(curl_socket_t sock, struct httprequest *req)
   while(!done_processing && (req->offset < REQBUFSIZ-1)) {
     if(pipereq_length && pipereq) {
       memmove(reqbuf, pipereq, pipereq_length);
-      got = pipereq_length;
+      got = curlx_uztosz(pipereq_length);
       pipereq_length = 0;
     }
     else {