From 25d2a1bae7871986eabdbe68dc05c5b6473ad4d7 Mon Sep 17 00:00:00 2001 From: Marcel Raad Date: Thu, 9 Aug 2018 17:19:24 +0200 Subject: [PATCH] Silence GCC 8 cast-function-type warnings On Windows, casting between unrelated function types is fine and sometimes even necessary, so just use an intermediate cast to (void (*) (void)) to silence the warning as described in [0]. [0] https://gcc.gnu.org/onlinedocs/gcc-8.1.0/gcc/Warning-Options.html Closes https://github.com/curl/curl/pull/2860 --- lib/formdata.c | 4 +++- lib/system_win32.c | 5 ++++- lib/telnet.c | 4 +++- lib/warnless.h | 3 +++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/formdata.c b/lib/formdata.c index 5731da95c..450a0e5d8 100644 --- a/lib/formdata.c +++ b/lib/formdata.c @@ -39,6 +39,7 @@ #include "sendf.h" #include "strdup.h" #include "rand.h" +#include "warnless.h" /* The last 3 #include files should be in this order */ #include "curl_printf.h" #include "curl_memory.h" @@ -878,7 +879,8 @@ CURLcode Curl_getformdata(struct Curl_easy *data, compatibility: use of "-" pseudo file name should be avoided. */ result = curl_mime_data_cb(part, (curl_off_t) -1, (curl_read_callback) fread, - (curl_seek_callback) fseek, + CURLX_FUNCTION_CAST(curl_seek_callback, + fseek), NULL, (void *) stdin); } else diff --git a/lib/system_win32.c b/lib/system_win32.c index 89d648516..6b8004e5b 100644 --- a/lib/system_win32.c +++ b/lib/system_win32.c @@ -26,6 +26,7 @@ #include #include "system_win32.h" +#include "warnless.h" /* The last #include files should be: */ #include "curl_memory.h" @@ -280,7 +281,9 @@ HMODULE Curl_load_library(LPCTSTR filename) /* Attempt to find LoadLibraryEx() which is only available on Windows 2000 and above */ - pLoadLibraryEx = (LOADLIBRARYEX_FN) GetProcAddress(hKernel32, LOADLIBARYEX); + pLoadLibraryEx = + CURLX_FUNCTION_CAST(LOADLIBRARYEX_FN, + (GetProcAddress(hKernel32, LOADLIBARYEX))); /* Detect if there's already a path in the filename and load the library if there is. Note: Both back slashes and forward slashes have been supported diff --git a/lib/telnet.c b/lib/telnet.c index 6a144ed3a..031d61f4e 100644 --- a/lib/telnet.c +++ b/lib/telnet.c @@ -1357,7 +1357,9 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done) } /* Grab a pointer to WSACreateEvent */ - create_event_func = (WSOCK2_EVENT) GetProcAddress(wsock2, "WSACreateEvent"); + create_event_func = + CURLX_FUNCTION_CAST(WSOCK2_EVENT, + (GetProcAddress(wsock2, "WSACreateEvent"))); if(create_event_func == NULL) { failf(data, "failed to find WSACreateEvent function (%u)", GetLastError()); FreeLibrary(wsock2); diff --git a/lib/warnless.h b/lib/warnless.h index f6a2d744b..284ea1e75 100644 --- a/lib/warnless.h +++ b/lib/warnless.h @@ -26,6 +26,9 @@ #include /* for curl_socket_t */ #endif +#define CURLX_FUNCTION_CAST(target_type, func) \ + (target_type)(void (*) (void))(func) + unsigned short curlx_ultous(unsigned long ulnum); unsigned char curlx_ultouc(unsigned long ulnum);