]> granicus.if.org Git - curl/commitdiff
fix compiler warning: conversion may lose significant bits
authorYang Tse <yangsita@gmail.com>
Wed, 1 Dec 2010 22:33:43 +0000 (23:33 +0100)
committerYang Tse <yangsita@gmail.com>
Wed, 1 Dec 2010 22:33:43 +0000 (23:33 +0100)
lib/ftp.c
lib/hostip.c
lib/parsedate.c
lib/smtp.c
lib/url.c
lib/warnless.c
lib/warnless.h

index 0558e0563a5b8bd60e11a9659bde62ac516c8c95..796186a105e9b4ac7121e0e053a795459d0b7351 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -379,7 +379,7 @@ static int ftp_endofresp(struct pingpong *pp,
   size_t len = pp->nread_resp;
 
   if((len > 3) && LASTLINE(line)) {
-    *code = strtol(line, NULL, 10);
+    *code = curlx_sltosi(strtol(line, NULL, 10));
     return 1;
   }
   return 0;
index 0ae6518f5760d0316616060cd6218e586b4b06c2..3db5b4967ea18fad55ecdc8baadb827c75abc26c 100644 (file)
@@ -67,6 +67,7 @@
 #include "strerror.h"
 #include "url.h"
 #include "inet_ntop.h"
+#include "warnless.h"
 
 #define _MPRINTF_REPLACE /* use our functions only */
 #include <curl/mprintf.h>
@@ -597,7 +598,7 @@ int Curl_resolv_timeout(struct connectdata *conn,
 
   /* alarm() makes a signal get sent when the timeout fires off, and that
      will abort system calls */
-  prev_alarm = alarm((unsigned int) (timeout/1000L));
+  prev_alarm = alarm(curlx_sltoui(timeout/1000L));
 
   /* This allows us to time-out from the name resolver, as the timeout
      will generate a signal and we will siglongjmp() from that here.
index 5d8af26925c85bbbf101bf318c5af5ca8f9a7155..3e003db31d6983e4ba538972cf96e19d2d8914c6 100644 (file)
@@ -83,6 +83,7 @@
 
 #include <curl/curl.h>
 #include "rawstr.h"
+#include "warnless.h"
 #include "parsedate.h"
 
 const char * const Curl_wkday[] =
@@ -378,7 +379,7 @@ int Curl_parsedate(const char *date, time_t *output)
         secnum = 0;
       }
       else {
-        val = (int)strtol(date, &end, 10);
+        val = curlx_sltosi(strtol(date, &end, 10));
 
         if((tzoff == -1) &&
            ((end - date) == 4) &&
index 5ccdcb671b1ec342707466d8fdad04ecbffe5764..1e2e75b29e767f61d85a8b9f52f9f701883a5e45 100644 (file)
@@ -92,6 +92,7 @@
 #include "curl_md5.h"
 #include "curl_hmac.h"
 #include "curl_gethostname.h"
+#include "warnless.h"
 
 #define _MPRINTF_REPLACE /* use our functions only */
 #include <curl/mprintf.h>
@@ -226,7 +227,7 @@ static int smtp_endofresp(struct pingpong *pp, int *resp)
     return FALSE;       /* Nothing for us. */
 
   if((result = line[3] == ' '))
-    *resp = strtol(line, NULL, 10);
+    *resp = curlx_sltosi(strtol(line, NULL, 10));
 
   line += 4;
   len -= 4;
index 858d72927a1665aa40ca8eaa3d6fbe67c902c413..f1ab21c2d214b988de087273fd339d8dc65e1964 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -1006,7 +1006,21 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
      * An FTP option that modifies an upload to create missing directories on
      * the server.
      */
-    data->set.ftp_create_missing_dirs = (int)va_arg(param, long);
+    switch(va_arg(param, long)) {
+    case 0:
+      data->set.ftp_create_missing_dirs = 0;
+      break;
+    case 1:
+      data->set.ftp_create_missing_dirs = 1;
+      break;
+    case 2:
+      data->set.ftp_create_missing_dirs = 2;
+      break;
+    default:
+      /* reserve other values for future use */
+      result = CURLE_FAILED_INIT;
+      break;
+    }
     break;
   case CURLOPT_SERVER_RESPONSE_TIMEOUT:
     /*
@@ -2001,13 +2015,13 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
     /*
      * Set what local port to bind the socket to when performing an operation.
      */
-    data->set.localport = (unsigned short) va_arg(param, long);
+    data->set.localport = curlx_sltous(va_arg(param, long));
     break;
   case CURLOPT_LOCALPORTRANGE:
     /*
      * Set number of local ports to try, starting with CURLOPT_LOCALPORT.
      */
-    data->set.localportrange = (int) va_arg(param, long);
+    data->set.localportrange = curlx_sltosi(va_arg(param, long));
     break;
   case CURLOPT_KRBLEVEL:
     /*
@@ -2356,7 +2370,7 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
      * know that an unsigned int will always hold the value so we blindly
      * typecast to this type
      */
-    data->set.scope = (unsigned int) va_arg(param, long);
+    data->set.scope = curlx_sltoui(va_arg(param, long));
     break;
 
   case CURLOPT_PROTOCOLS:
index 4f42dd07ff5a13551601ab12c8bb3816601cb0af..471e4b2c70c343d057bcf6cafbf7750367dee8d0 100644 (file)
@@ -125,3 +125,57 @@ int curlx_uztosi(size_t uznum)
 #  pragma warning(pop)
 #endif
 }
+
+/*
+** signed long to signed int
+*/
+
+int curlx_sltosi(long slnum)
+{
+#ifdef __INTEL_COMPILER
+#  pragma warning(push)
+#  pragma warning(disable:810) /* conversion may lose significant bits */
+#endif
+
+  return (int)(slnum & (long) CURL_MASK_SINT);
+
+#ifdef __INTEL_COMPILER
+#  pragma warning(pop)
+#endif
+}
+
+/*
+** signed long to unsigned int
+*/
+
+unsigned int curlx_sltoui(long slnum)
+{
+#ifdef __INTEL_COMPILER
+#  pragma warning(push)
+#  pragma warning(disable:810) /* conversion may lose significant bits */
+#endif
+
+  return (unsigned int)(slnum & (long) CURL_MASK_UINT);
+
+#ifdef __INTEL_COMPILER
+#  pragma warning(pop)
+#endif
+}
+
+/*
+** signed long to unsigned short
+*/
+
+unsigned short curlx_sltous(long slnum)
+{
+#ifdef __INTEL_COMPILER
+#  pragma warning(push)
+#  pragma warning(disable:810) /* conversion may lose significant bits */
+#endif
+
+  return (unsigned short)(slnum & (long) CURL_MASK_USHORT);
+
+#ifdef __INTEL_COMPILER
+#  pragma warning(pop)
+#endif
+}
index ac654fbc53ff8512d47ea7f4a247ddcbfdcff2aa..ed692d8cde3a2edce2287008bcf4a77940c258a2 100644 (file)
@@ -28,4 +28,10 @@ unsigned char curlx_ultouc(unsigned long ulnum);
 
 int curlx_uztosi(size_t uznum);
 
+int curlx_sltosi(long slnum);
+
+unsigned int curlx_sltoui(long slnum);
+
+unsigned short curlx_sltous(long slnum);
+
 #endif /* HEADER_CURL_WARNLESS_H */