summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Gustafsson <daniel@yesql.se>2018-11-12 20:54:07 +0100
committerDaniel Gustafsson <daniel@yesql.se>2018-11-13 13:51:46 +0100
commit2f5f31bb57d68b54e03bffcd9648aece1fe564f8 (patch)
treeb4b64441c1d679d6c3ab1273f39e70bc3815de2a
parent42fd235040095e77f7bef26ec7506ad0b3cd8039 (diff)
downloadcurl-2f5f31bb57d68b54e03bffcd9648aece1fe564f8.tar.gz
tool_cb_wrt: Silence function cast compiler warning
Commit 5bfaa86ceb3c2a9ac474a928e748c4a86a703b33 introduced a new compiler warning on Windows cross compilation with GCC. See below for an example of the warning from the autobuild logs (whitespace edited to fit): /src/tool_cb_wrt.c:175:9: warning: cast from function call of type 'intptr_t {aka long long int}' to non-matching type 'void *' [-Wbad-function-cast] (HANDLE) _get_osfhandle(fileno(outs->stream)), ^ Store the return value from _get_osfhandle() in an intermediate variable and cast the variable in WriteConsoleW() rather than the function call directly to avoid a compiler warning. In passing, also add inspection of the MultiByteToWideChar() return value and return failure in case an error is reported. Closes #3263 Reviewed-by: Marcel Raad <Marcel.Raad@teamviewer.com> Reviewed-by: Viktor Szakats <commit@vszakats.net>
-rw-r--r--src/tool_cb_wrt.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/tool_cb_wrt.c b/src/tool_cb_wrt.c
index 0e74392ac..2cb5e1b41 100644
--- a/src/tool_cb_wrt.c
+++ b/src/tool_cb_wrt.c
@@ -161,6 +161,7 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata)
DWORD in_len = (DWORD)(sz * nmemb);
wchar_t* wc_buf;
DWORD wc_len;
+ intptr_t fhnd;
/* calculate buffer size for wide characters */
wc_len = MultiByteToWideChar(CP_UTF8, 0, buffer, in_len, NULL, 0);
@@ -170,9 +171,15 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata)
/* calculate buffer size for multi-byte characters */
wc_len = MultiByteToWideChar(CP_UTF8, 0, buffer, in_len, wc_buf, wc_len);
+ if(!wc_len) {
+ free(wc_buf);
+ return failure;
+ }
+
+ fhnd = _get_osfhandle(fileno(outs->stream));
if(!WriteConsoleW(
- (HANDLE) _get_osfhandle(fileno(outs->stream)),
+ (HANDLE) fhnd,
wc_buf,
wc_len,
&wc_len,