Commit 2f5f31bb authored by Daniel Gustafsson's avatar Daniel Gustafsson
Browse files

tool_cb_wrt: Silence function cast compiler warning



Commit 5bfaa86c 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: default avatarMarcel Raad <Marcel.Raad@teamviewer.com>
Reviewed-by: default avatarViktor Szakats <commit@vszakats.net>
parent 42fd2350
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -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,