aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/gopher.c3
-rw-r--r--lib/warnless.c56
-rw-r--r--lib/warnless.h2
-rw-r--r--tests/server/rtspd.c2
-rw-r--r--tests/server/sws.c2
5 files changed, 59 insertions, 6 deletions
diff --git a/lib/gopher.c b/lib/gopher.c
index aa9c45b0e..3d8fcffda 100644
--- a/lib/gopher.c
+++ b/lib/gopher.c
@@ -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);
diff --git a/lib/warnless.c b/lib/warnless.c
index 471e4b2c7..3bd23df03 100644
--- a/lib/warnless.c
+++ b/lib/warnless.c
@@ -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)
@@ -69,7 +69,39 @@
# 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
+}
diff --git a/lib/warnless.h b/lib/warnless.h
index ed692d8cd..7181a6e38 100644
--- a/lib/warnless.h
+++ b/lib/warnless.h
@@ -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 */
diff --git a/tests/server/rtspd.c b/tests/server/rtspd.c
index f751f1153..5c06729ea 100644
--- a/tests/server/rtspd.c
+++ b/tests/server/rtspd.c
@@ -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 {
diff --git a/tests/server/sws.c b/tests/server/sws.c
index 65a61c2ce..fb54c209b 100644
--- a/tests/server/sws.c
+++ b/tests/server/sws.c
@@ -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 {