diff options
author | Marcel Raad <raad@teamviewer.com> | 2017-04-01 11:50:39 +0200 |
---|---|---|
committer | Marcel Raad <raad@teamviewer.com> | 2017-04-05 13:08:16 +0200 |
commit | b547fff566cb7644273716a6e052c5ae6d3f5bef (patch) | |
tree | 7c23666d72b813e691f94f05cedfdf3d2bf4f628 /src | |
parent | 446eaa941d29dd728a81847b5ca2424b0f254cf5 (diff) | |
download | curl-b547fff566cb7644273716a6e052c5ae6d3f5bef.tar.gz |
tool_operate: fix MinGW compiler warning
MinGW complains:
tool_operate.c:197:15: error: comparison is always true due to limited range
of data type [-Werror=type-limits]
Fix this by only doing the comparison if 'long' is large enough to hold the
constant it is compared with.
Closes https://github.com/curl/curl/pull/1378
Diffstat (limited to 'src')
-rw-r--r-- | src/tool_operate.c | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/src/tool_operate.c b/src/tool_operate.c index bb698ffec..0e84ac398 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -194,38 +194,42 @@ static void setfiletime(long filetime, const char *filename, saving time offset and since it's GMT that is bad behavior. When we have access to a 64-bit type we can bypass utime and set the times directly. */ #if defined(WIN32) && (CURL_SIZEOF_CURL_OFF_T >= 8) + HANDLE hfile; + +#if (CURL_SIZEOF_LONG >= 8) /* 910670515199 is the maximum unix filetime that can be used as a Windows FILETIME without overflow: 30827-12-31T23:59:59. */ - if(filetime <= CURL_OFF_T_C(910670515199)) { - HANDLE hfile = CreateFileA(filename, FILE_WRITE_ATTRIBUTES, - (FILE_SHARE_READ | FILE_SHARE_WRITE | - FILE_SHARE_DELETE), - NULL, OPEN_EXISTING, 0, NULL); - if(hfile != INVALID_HANDLE_VALUE) { - curl_off_t converted = ((curl_off_t)filetime * 10000000) + - CURL_OFF_T_C(116444736000000000); - FILETIME ft; - ft.dwLowDateTime = (DWORD)(converted & 0xFFFFFFFF); - ft.dwHighDateTime = (DWORD)(converted >> 32); - if(!SetFileTime(hfile, NULL, &ft, &ft)) { - fprintf(error_stream, - "Failed to set filetime %ld on outfile: " - "SetFileTime failed: GetLastError %u\n", - filetime, GetLastError()); - } - CloseHandle(hfile); - } - else { + if(filetime > CURL_OFF_T_C(910670515199)) { + fprintf(error_stream, + "Failed to set filetime %ld on outfile: overflow\n", + filetime); + return; + } +#endif /* CURL_SIZEOF_LONG >= 8 */ + + hfile = CreateFileA(filename, FILE_WRITE_ATTRIBUTES, + (FILE_SHARE_READ | FILE_SHARE_WRITE | + FILE_SHARE_DELETE), + NULL, OPEN_EXISTING, 0, NULL); + if(hfile != INVALID_HANDLE_VALUE) { + curl_off_t converted = ((curl_off_t)filetime * 10000000) + + CURL_OFF_T_C(116444736000000000); + FILETIME ft; + ft.dwLowDateTime = (DWORD)(converted & 0xFFFFFFFF); + ft.dwHighDateTime = (DWORD)(converted >> 32); + if(!SetFileTime(hfile, NULL, &ft, &ft)) { fprintf(error_stream, "Failed to set filetime %ld on outfile: " - "CreateFile failed: GetLastError %u\n", + "SetFileTime failed: GetLastError %u\n", filetime, GetLastError()); } + CloseHandle(hfile); } else { fprintf(error_stream, - "Failed to set filetime %ld on outfile: overflow\n", - filetime); + "Failed to set filetime %ld on outfile: " + "CreateFile failed: GetLastError %u\n", + filetime, GetLastError()); } #elif defined(HAVE_UTIME) struct utimbuf times; |