From f7b4492d37b35a64a3a6c5bbbdb375494095b6ff Mon Sep 17 00:00:00 2001 From: PJ Reiniger Date: Tue, 26 Apr 2022 15:09:43 -0400 Subject: [PATCH 2/9] Fix warnings --- include/uv/win.h | 5 +++ src/idna.c | 2 +- src/inet.c | 4 ++ src/threadpool.c | 4 ++ src/unix/core.c | 12 ++++- src/unix/darwin.c | 106 +++++++++++++++++++++++--------------------- src/unix/internal.h | 4 +- src/unix/thread.c | 6 --- src/uv-common.c | 8 ++++ src/win/fs-event.c | 2 + src/win/fs.c | 2 + src/win/pipe.c | 2 + src/win/process.c | 2 + src/win/tty.c | 2 + 14 files changed, 99 insertions(+), 62 deletions(-) diff --git a/include/uv/win.h b/include/uv/win.h index 56a4cf11..10d5e8f1 100644 --- a/include/uv/win.h +++ b/include/uv/win.h @@ -201,11 +201,16 @@ typedef int (WSAAPI* LPFN_WSARECVFROM) LPWSAOVERLAPPED overlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); +#pragma warning(push) +#pragma warning(disable : 28251) + #ifndef _NTDEF_ typedef LONG NTSTATUS; typedef NTSTATUS *PNTSTATUS; #endif +#pragma warning(pop) + #ifndef RTL_CONDITION_VARIABLE_INIT typedef PVOID CONDITION_VARIABLE, *PCONDITION_VARIABLE; #endif diff --git a/src/idna.c b/src/idna.c index 93d982ca..36a39a08 100644 --- a/src/idna.c +++ b/src/idna.c @@ -106,7 +106,7 @@ static int uv__idna_toascii_label(const char* s, const char* se, char** d, char* de) { static const char alphabet[] = "abcdefghijklmnopqrstuvwxyz0123456789"; const char* ss; - unsigned c; + unsigned c = 0; unsigned h; unsigned k; unsigned n; diff --git a/src/inet.c b/src/inet.c index ca8b6ac8..1b190255 100644 --- a/src/inet.c +++ b/src/inet.c @@ -27,6 +27,10 @@ #include "uv.h" #include "uv-common.h" +#ifdef _WIN32 +#pragma warning(disable : 6001) +#endif + #define UV__INET_ADDRSTRLEN 16 #define UV__INET6_ADDRSTRLEN 46 diff --git a/src/threadpool.c b/src/threadpool.c index 1241ace1..718972c3 100644 --- a/src/threadpool.c +++ b/src/threadpool.c @@ -27,6 +27,10 @@ #include +#ifdef _WIN32 +#pragma warning(disable: 6001 6011) +#endif + #define MAX_THREADPOOL_SIZE 1024 static uv_once_t once = UV_ONCE_INIT; diff --git a/src/unix/core.c b/src/unix/core.c index 6353b0e3..223c5513 100644 --- a/src/unix/core.c +++ b/src/unix/core.c @@ -544,6 +544,16 @@ int uv__accept(int sockfd) { return peerfd; } +#if defined(__APPLE__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdollar-in-identifier-extension" +#if defined(__LP64__) + extern "C" int close$NOCANCEL(int); +#else + extern "C" int close$NOCANCEL$UNIX2003(int); +#endif +#pragma GCC diagnostic pop +#endif /* close() on macos has the "interesting" quirk that it fails with EINTR * without closing the file descriptor when a thread is in the cancel state. @@ -558,10 +568,8 @@ int uv__close_nocancel(int fd) { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdollar-in-identifier-extension" #if defined(__LP64__) || TARGET_OS_IPHONE - extern int close$NOCANCEL(int); return close$NOCANCEL(fd); #else - extern int close$NOCANCEL$UNIX2003(int); return close$NOCANCEL$UNIX2003(fd); #endif #pragma GCC diagnostic pop diff --git a/src/unix/darwin.c b/src/unix/darwin.c index 5fbf7342..eeb35720 100644 --- a/src/unix/darwin.c +++ b/src/unix/darwin.c @@ -253,64 +253,68 @@ static int uv__get_cpu_speed(uint64_t* speed) { #define S(s) pCFStringCreateWithCString(NULL, (s), kCFStringEncodingUTF8) - kr = pIOMasterPort(MACH_PORT_NULL, &mach_port); - assert(kr == KERN_SUCCESS); - CFMutableDictionaryRef classes_to_match - = pIOServiceMatching("IOPlatformDevice"); - kr = pIOServiceGetMatchingServices(mach_port, classes_to_match, &it); - assert(kr == KERN_SUCCESS); - service = pIOIteratorNext(it); - - CFStringRef device_type_str = S("device_type"); - CFStringRef clock_frequency_str = S("clock-frequency"); - - while (service != 0) { - CFDataRef data; - data = pIORegistryEntryCreateCFProperty(service, - device_type_str, - NULL, - 0); - if (data) { - const UInt8* raw = pCFDataGetBytePtr(data); - if (strncmp((char*)raw, "cpu", 3) == 0 || - strncmp((char*)raw, "processor", 9) == 0) { - CFDataRef freq_ref; - freq_ref = pIORegistryEntryCreateCFProperty(service, - clock_frequency_str, - NULL, - 0); - if (freq_ref) { - const UInt8* freq_ref_ptr = pCFDataGetBytePtr(freq_ref); - CFIndex len = pCFDataGetLength(freq_ref); - if (len == 8) - memcpy(speed, freq_ref_ptr, 8); - else if (len == 4) { - uint32_t v; - memcpy(&v, freq_ref_ptr, 4); - *speed = v; - } else { - *speed = 0; - } + // Braces ensure goto doesn't jump into device_type_str's and + // clock_frequency_str's lifetimes after their initialization + { + kr = pIOMasterPort(MACH_PORT_NULL, &mach_port); + assert(kr == KERN_SUCCESS); + CFMutableDictionaryRef classes_to_match + = pIOServiceMatching("IOPlatformDevice"); + kr = pIOServiceGetMatchingServices(mach_port, classes_to_match, &it); + assert(kr == KERN_SUCCESS); + service = pIOIteratorNext(it); - pCFRelease(freq_ref); - pCFRelease(data); - break; + CFStringRef device_type_str = S("device_type"); + CFStringRef clock_frequency_str = S("clock-frequency"); + + while (service != 0) { + CFDataRef data; + data = pIORegistryEntryCreateCFProperty(service, + device_type_str, + NULL, + 0); + if (data) { + const UInt8* raw = pCFDataGetBytePtr(data); + if (strncmp((char*)raw, "cpu", 3) == 0 || + strncmp((char*)raw, "processor", 9) == 0) { + CFDataRef freq_ref; + freq_ref = pIORegistryEntryCreateCFProperty(service, + clock_frequency_str, + NULL, + 0); + if (freq_ref) { + const UInt8* freq_ref_ptr = pCFDataGetBytePtr(freq_ref); + CFIndex len = pCFDataGetLength(freq_ref); + if (len == 8) + memcpy(speed, freq_ref_ptr, 8); + else if (len == 4) { + uint32_t v; + memcpy(&v, freq_ref_ptr, 4); + *speed = v; + } else { + *speed = 0; + } + + pCFRelease(freq_ref); + pCFRelease(data); + break; + } } + pCFRelease(data); } - pCFRelease(data); - } - service = pIOIteratorNext(it); - } + service = pIOIteratorNext(it); + } - pIOObjectRelease(it); + pIOObjectRelease(it); - err = 0; + err = 0; - if (device_type_str != NULL) - pCFRelease(device_type_str); - if (clock_frequency_str != NULL) - pCFRelease(clock_frequency_str); + if (device_type_str != NULL) + pCFRelease(device_type_str); + if (clock_frequency_str != NULL) + pCFRelease(clock_frequency_str); + } out: if (core_foundation_handle != NULL) diff --git a/src/unix/internal.h b/src/unix/internal.h index cee35c21..f9d1666d 100644 --- a/src/unix/internal.h +++ b/src/unix/internal.h @@ -312,8 +312,8 @@ UV_UNUSED(static void uv__update_time(uv_loop_t* loop)) { loop->time = uv__hrtime(UV_CLOCK_FAST) / 1000000; } -UV_UNUSED(static char* uv__basename_r(const char* path)) { - char* s; +UV_UNUSED(static const char* uv__basename_r(const char* path)) { + const char* s; s = strrchr(path, '/'); if (s == NULL) diff --git a/src/unix/thread.c b/src/unix/thread.c index 759cd0c2..64726bd6 100644 --- a/src/unix/thread.c +++ b/src/unix/thread.c @@ -244,12 +244,6 @@ int uv_thread_create_ex(uv_thread_t* tid, size_t stack_size; size_t min_stack_size; - /* Used to squelch a -Wcast-function-type warning. */ - union { - void (*in)(void*); - void* (*out)(void*); - } f; - stack_size = params->flags & UV_THREAD_HAS_STACK_SIZE ? params->stack_size : 0; diff --git a/src/uv-common.c b/src/uv-common.c index dfb606e3..49026c03 100644 --- a/src/uv-common.c +++ b/src/uv-common.c @@ -758,6 +758,10 @@ void uv__fs_readdir_cleanup(uv_fs_t* req) { } } +#ifdef __clang__ +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wvarargs" +#endif int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...) { va_list ap; @@ -771,6 +775,10 @@ int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...) { return err; } +#ifdef __clang__ +# pragma clang diagnostic pop +#endif + static uv_loop_t default_loop_struct; static uv_loop_t* default_loop_ptr; diff --git a/src/win/fs-event.c b/src/win/fs-event.c index 15046731..3244a4e4 100644 --- a/src/win/fs-event.c +++ b/src/win/fs-event.c @@ -19,6 +19,8 @@ * IN THE SOFTWARE. */ +#define _CRT_NONSTDC_NO_WARNINGS + #include #include #include diff --git a/src/win/fs.c b/src/win/fs.c index 8374012f..f71b3c04 100644 --- a/src/win/fs.c +++ b/src/win/fs.c @@ -19,6 +19,8 @@ * IN THE SOFTWARE. */ +#define _CRT_NONSTDC_NO_WARNINGS + #include #include #include diff --git a/src/win/pipe.c b/src/win/pipe.c index cd77061a..f413a72d 100644 --- a/src/win/pipe.c +++ b/src/win/pipe.c @@ -19,6 +19,8 @@ * IN THE SOFTWARE. */ +#define _CRT_NONSTDC_NO_WARNINGS + #include #include #include diff --git a/src/win/process.c b/src/win/process.c index e857db3e..a49016f6 100644 --- a/src/win/process.c +++ b/src/win/process.c @@ -19,6 +19,8 @@ * IN THE SOFTWARE. */ +#define _CRT_NONSTDC_NO_WARNINGS + #include #include #include diff --git a/src/win/tty.c b/src/win/tty.c index 267ca645..d7522668 100644 --- a/src/win/tty.c +++ b/src/win/tty.c @@ -19,6 +19,8 @@ * IN THE SOFTWARE. */ +#define _CRT_NONSTDC_NO_WARNINGS + #include #include #include