From de5ef3842c40cba0059d28885136de325824b6cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 26 Mar 2025 16:42:39 +0800 Subject: [PATCH] Global: fix code smells --- src/detection/diskio/diskio.c | 5 +++ src/detection/diskio/diskio_linux.c | 14 ++++---- src/detection/diskio/diskio_nbsd.c | 6 ++-- src/detection/diskio/diskio_obsd.c | 2 +- src/detection/diskio/diskio_sunos.c | 2 +- src/detection/diskio/diskio_windows.c | 4 +-- .../displayserver/displayserver_android.c | 34 +++++++++++++++++-- .../displayserver/displayserver_apple.c | 2 +- .../displayserver/linux/wayland/wayland.c | 2 +- src/detection/displayserver/linux/wmde.c | 2 +- src/detection/displayserver/linux/xcb.c | 4 +-- src/detection/displayserver/linux/xlib.c | 6 ++-- src/detection/dns/dns_linux.c | 2 +- src/detection/editor/editor.c | 1 + src/detection/host/host_windows.c | 2 +- 15 files changed, 63 insertions(+), 25 deletions(-) diff --git a/src/detection/diskio/diskio.c b/src/detection/diskio/diskio.c index 1677c5cf2..9413a7125 100644 --- a/src/detection/diskio/diskio.c +++ b/src/detection/diskio/diskio.c @@ -69,10 +69,15 @@ const char* ffDetectDiskIO(FFlist* result, FFDiskIOOptions* options) uint64_t temp = *currValue; *currValue -= *prevValue; *currValue /= (time2 - time1) / 1000 /* seconds */; + + // For next function call *prevValue = temp; } } + + // For next function call time1 = time2; + // Leak ioCounters1 here return NULL; } diff --git a/src/detection/diskio/diskio_linux.c b/src/detection/diskio/diskio_linux.c index 9bddb27ee..4d8d62241 100644 --- a/src/detection/diskio/diskio_linux.c +++ b/src/detection/diskio/diskio_linux.c @@ -8,10 +8,10 @@ #include #include -static void parseDiskIOCounters(int dfd, const char* devName, FFlist* result, FFDiskIOOptions* options) +static const char* parseDiskIOCounters(int dfd, const char* devName, FFlist* result, FFDiskIOOptions* options) { FF_AUTO_CLOSE_FD int devfd = openat(dfd, "device", O_RDONLY | O_CLOEXEC | O_PATH | O_DIRECTORY); - if (devfd < 0) return; // virtual device + if (devfd < 0) return "virtual device"; FF_STRBUF_AUTO_DESTROY name = ffStrbufCreate(); @@ -49,7 +49,7 @@ static void parseDiskIOCounters(int dfd, const char* devName, FFlist* result, FF } if (options->namePrefix.length && !ffStrbufStartsWith(&name, &options->namePrefix)) - return; + return "ignored"; } // I/Os merges sectors ticks ... @@ -57,10 +57,10 @@ static void parseDiskIOCounters(int dfd, const char* devName, FFlist* result, FF { char sysBlockStat[PROC_FILE_BUFFSIZ]; ssize_t fileSize = ffReadFileDataRelative(dfd, "stat", ARRAY_SIZE(sysBlockStat) - 1, sysBlockStat); - if (fileSize <= 0) return; + if (fileSize <= 0) return "failed to read stat file"; sysBlockStat[fileSize] = '\0'; if (sscanf(sysBlockStat, "%" PRIu64 "%*u%" PRIu64 "%*u%" PRIu64 "%*u%" PRIu64 "%*u", &nRead, §orRead, &nWritten, §orWritten) <= 0) - return; + return "invalid stat file format"; } FFDiskIOResult* device = (FFDiskIOResult*) ffListAdd(result); @@ -70,6 +70,8 @@ static void parseDiskIOCounters(int dfd, const char* devName, FFlist* result, FF device->bytesWritten = sectorWritten * 512; device->readCount = nRead; device->writeCount = nWritten; + + return NULL; } const char* ffDiskIOGetIoCounters(FFlist* result, FFDiskIOOptions* options) @@ -83,7 +85,7 @@ const char* ffDiskIOGetIoCounters(FFlist* result, FFDiskIOOptions* options) { const char* const devName = sysBlockEntry->d_name; - if (devName[0] == '.') continue;; + if (devName[0] == '.') continue; FF_AUTO_CLOSE_FD int dfd = openat(dirfd(sysBlockDirp), devName, O_RDONLY | O_CLOEXEC | O_PATH | O_DIRECTORY); if (dfd > 0) parseDiskIOCounters(dfd, devName, result, options); diff --git a/src/detection/diskio/diskio_nbsd.c b/src/detection/diskio/diskio_nbsd.c index 8d537045a..340cd856c 100644 --- a/src/detection/diskio/diskio_nbsd.c +++ b/src/detection/diskio/diskio_nbsd.c @@ -12,12 +12,12 @@ const char* ffDiskIOGetIoCounters(FFlist* result, FFDiskIOOptions* options) if (sysctl(mib, ARRAY_SIZE(mib), NULL, &len, NULL, 0) < 0) return "sysctl({HW_IOSTATS}, NULL) failed"; uint32_t nDrive = (uint32_t) (len / sizeof(struct io_sysctl)); - - struct io_sysctl* stats = malloc(len); + + FF_AUTO_FREE struct io_sysctl* stats = malloc(len); if (sysctl(mib, ARRAY_SIZE(mib), stats, &len, NULL, 0) < 0) return "sysctl({HW_IOSTATS}, stats) failed"; - + for (uint32_t i = 0; i < nDrive; ++i) { struct io_sysctl* st = &stats[i]; diff --git a/src/detection/diskio/diskio_obsd.c b/src/detection/diskio/diskio_obsd.c index 437d93caf..5dbfcd228 100644 --- a/src/detection/diskio/diskio_obsd.c +++ b/src/detection/diskio/diskio_obsd.c @@ -13,7 +13,7 @@ const char* ffDiskIOGetIoCounters(FFlist* result, FFDiskIOOptions* options) return "sysctl({HW_DISKSTATS}, NULL) failed"; uint32_t nDrive = (uint32_t) (len / sizeof(struct diskstats)); - struct diskstats* stats = malloc(len); + FF_AUTO_FREE struct diskstats* stats = malloc(len); if (sysctl(mib, ARRAY_SIZE(mib), stats, &len, NULL, 0) < 0) return "sysctl({HW_DISKSTATS}, stats) failed"; diff --git a/src/detection/diskio/diskio_sunos.c b/src/detection/diskio/diskio_sunos.c index a6bb0b311..8cc6810bb 100644 --- a/src/detection/diskio/diskio_sunos.c +++ b/src/detection/diskio/diskio_sunos.c @@ -27,7 +27,7 @@ const char* ffDiskIOGetIoCounters(FFlist* result, FFDiskIOOptions* options) continue; FFDiskIOResult* device = (FFDiskIOResult*) ffListAdd(result); - ffStrbufInit(&device->devPath); + ffStrbufInit(&device->devPath); // unlike other platforms, `/dev/ks_name` is not available ffStrbufInitS(&device->name, ks->ks_name); device->bytesRead = kio.nread; device->readCount = kio.reads; diff --git a/src/detection/diskio/diskio_windows.c b/src/detection/diskio/diskio_windows.c index da9bf8daf..cf92d32ea 100644 --- a/src/detection/diskio/diskio_windows.c +++ b/src/detection/diskio/diskio_windows.c @@ -56,8 +56,6 @@ static bool detectPhysicalDisk(const wchar_t* szDevice, FFlist* result, FFDiskIO return true; } - ffStrbufInitWS(&device->devPath, szDevice); - DISK_PERFORMANCE dp = {}; if (DeviceIoControl(hDevice, IOCTL_DISK_PERFORMANCE, NULL, 0, &dp, sizeof(dp), &retSize, NULL)) { @@ -72,6 +70,8 @@ static bool detectPhysicalDisk(const wchar_t* szDevice, FFlist* result, FFDiskIO result->length--; } + ffStrbufInitWS(&device->devPath, szDevice); + return true; } diff --git a/src/detection/displayserver/displayserver_android.c b/src/detection/displayserver/displayserver_android.c index d10f394e0..0c7a3c1c9 100644 --- a/src/detection/displayserver/displayserver_android.c +++ b/src/detection/displayserver/displayserver_android.c @@ -4,6 +4,33 @@ #include +static bool checkHdrStatus(FFDisplayResult* display) +{ + FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate(); + + if (ffSettingsGetAndroidProperty("ro.surface_flinger.has_HDR_display", &buffer)) + { + if (ffStrbufIgnCaseEqualS(&buffer, "true")) + { + display->hdrStatus = FF_DISPLAY_HDR_STATUS_SUPPORTED; + + if (ffSettingsGetAndroidProperty("persist.sys.hdr_mode", &buffer) && + ffStrbufToUInt(&buffer, 0) > 0) + display->hdrStatus = FF_DISPLAY_HDR_STATUS_ENABLED; + + return true; + } + else + { + display->hdrStatus = FF_DISPLAY_HDR_STATUS_UNSUPPORTED; + return true; + } + } + + display->hdrStatus = FF_DISPLAY_HDR_STATUS_UNKNOWN; + return false; +} + static void detectWithDumpsys(FFDisplayServerResult* ds) { FF_STRBUF_AUTO_DESTROY buf = ffStrbufCreate(); @@ -54,7 +81,7 @@ static void detectWithDumpsys(FFDisplayServerResult* ds) } ffStrbufRecalculateLength(&name); - ffdsAppendDisplay(ds, + FFDisplayResult* display = ffdsAppendDisplay(ds, (uint32_t)width, (uint32_t)height, refreshRate, @@ -72,6 +99,7 @@ static void detectWithDumpsys(FFDisplayServerResult* ds) 0, "dumpsys" ); + if (display) display->hdrStatus = checkHdrStatus(display); } index = nextIndex + 1; @@ -92,7 +120,7 @@ static bool detectWithGetprop(FFDisplayServerResult* ds) uint32_t height = (uint32_t) ffStrbufToUInt(&buffer, 0); ffStrbufSubstrAfterFirstC(&buffer, ','); double scaleFactor = (double) ffStrbufToUInt(&buffer, 0) / 160.; - return ffdsAppendDisplay(ds, + FFDisplayResult* display = ffdsAppendDisplay(ds, width, height, 0, @@ -110,6 +138,8 @@ static bool detectWithGetprop(FFDisplayServerResult* ds) 0, "getprop" ); + if (display) display->hdrStatus = checkHdrStatus(display); + return !!display; } return false; diff --git a/src/detection/displayserver/displayserver_apple.c b/src/detection/displayserver/displayserver_apple.c index e8eeb9fbf..df6c7cf90 100644 --- a/src/detection/displayserver/displayserver_apple.c +++ b/src/detection/displayserver/displayserver_apple.c @@ -68,7 +68,7 @@ static void detectDisplays(FFDisplayServerResult* ds) if(displayInfo) { CFDictionaryRef productNames; - if(!ffCfDictGetDict(displayInfo, CFSTR(kDisplayProductName), &productNames)) + if(ffCfDictGetDict(displayInfo, CFSTR(kDisplayProductName), &productNames) == NULL) ffCfDictGetString(productNames, CFSTR("en_US"), &buffer); // CGDisplayScreenSize reports invalid result for external displays on old Intel MacBook Pro diff --git a/src/detection/displayserver/linux/wayland/wayland.c b/src/detection/displayserver/linux/wayland/wayland.c index b2cdb3da8..f64d18632 100644 --- a/src/detection/displayserver/linux/wayland/wayland.c +++ b/src/detection/displayserver/linux/wayland/wayland.c @@ -273,7 +273,7 @@ const char* ffdsConnectWayland(FFDisplayServerResult* result) FF_LIST_FOR_EACH(FFstrbuf, basePath, instance.state.platform.configDirs) { char path[1024]; - snprintf(path, ARRAY_SIZE(path) - 1, "%s%s", basePath->chars, fileName); + snprintf(path, ARRAY_SIZE(path), "%s%s", basePath->chars, fileName); if (ffReadFileBuffer(path, &monitorsXml)) break; } diff --git a/src/detection/displayserver/linux/wmde.c b/src/detection/displayserver/linux/wmde.c index c8324f789..f735bd40c 100644 --- a/src/detection/displayserver/linux/wmde.c +++ b/src/detection/displayserver/linux/wmde.c @@ -374,7 +374,7 @@ static const char* getFromProcesses(FFDisplayServerResult* result) ffStrbufAppendS(&procPath, dirent->d_name); uint32_t procFolderPathLength = procPath.length; - //Don't check for processes not owend by the current user. + //Don't check for processes not owned by the current user. ffStrbufAppendS(&procPath, "/loginuid"); ffReadFileBuffer(procPath.chars, &loginuid); if(ffStrbufToUInt(&loginuid, (uint64_t) -1) != userId) diff --git a/src/detection/displayserver/linux/xcb.c b/src/detection/displayserver/linux/xcb.c index 13f8537ae..3cc5580d8 100644 --- a/src/detection/displayserver/linux/xcb.c +++ b/src/detection/displayserver/linux/xcb.c @@ -333,7 +333,7 @@ static void xcbRandrHandleScreen(XcbRandrData* data, xcb_screen_t* screen) const char* ffdsConnectXcbRandr(FFDisplayServerResult* result) { - FF_LIBRARY_LOAD(xcbRandr, "dlopen lbxcb-randr failed", "libxcb-randr" FF_LIBRARY_EXTENSION, 1) + FF_LIBRARY_LOAD(xcbRandr, "dlopen libxcb-randr failed", "libxcb-randr" FF_LIBRARY_EXTENSION, 1) FF_LIBRARY_LOAD_SYMBOL_MESSAGE(xcbRandr, xcb_connect) FF_LIBRARY_LOAD_SYMBOL_MESSAGE(xcbRandr, xcb_get_setup) FF_LIBRARY_LOAD_SYMBOL_MESSAGE(xcbRandr, xcb_setup_roots_iterator) @@ -369,7 +369,7 @@ const char* ffdsConnectXcbRandr(FFDisplayServerResult* result) data.connection = ffxcb_connect(NULL, NULL); if(data.connection == NULL) - return "xcb_connect failed"; + return "xcb_connect() failed"; data.result = result; diff --git a/src/detection/displayserver/linux/xlib.c b/src/detection/displayserver/linux/xlib.c index 0c4d283ed..06422d613 100644 --- a/src/detection/displayserver/linux/xlib.c +++ b/src/detection/displayserver/linux/xlib.c @@ -147,7 +147,7 @@ static bool xrandrHandleCrtc(XrandrData* data, XRROutputInfo* output, FFstrbuf* "xlib-randr-crtc" ); - if (edidLength) + if (item && edidLength) { item->hdrStatus = ffEdidGetHdrCompatible(edidData, edidLength) ? FF_DISPLAY_HDR_STATUS_SUPPORTED : FF_DISPLAY_HDR_STATUS_UNSUPPORTED; ffEdidGetSerialAndManufactureDate(edidData, &item->serial, &item->manufactureYear, &item->manufactureWeek); @@ -231,7 +231,7 @@ static bool xrandrHandleMonitors(XrandrData* data, Screen* screen) if(monitorInfos == NULL) return false; - bool foundAMonitor; + bool foundAMonitor = false; for(int i = 0; i < numberOfMonitors; i++) { @@ -272,7 +272,7 @@ static void xrandrHandleScreen(XrandrData* data, Screen* screen) 0, (uint32_t) WidthMMOfScreen(screen), (uint32_t) HeightMMOfScreen(screen), - "xlib_randr_screen" + "xlib-randr-screen" ); } diff --git a/src/detection/dns/dns_linux.c b/src/detection/dns/dns_linux.c index 8bf1da0c2..ea4da8c61 100644 --- a/src/detection/dns/dns_linux.c +++ b/src/detection/dns/dns_linux.c @@ -14,7 +14,7 @@ const char* ffDetectDNS(FFDNSOptions* options, FFlist* results) { FF_AUTO_CLOSE_FILE FILE* file = fopen(FASTFETCH_TARGET_DIR_ROOT RESOLV_CONF, "r"); if (!file) - return "fopen (" FASTFETCH_TARGET_DIR_ROOT "/etc/resolv.conf) failed"; + return "fopen (" FASTFETCH_TARGET_DIR_ROOT RESOLV_CONF ") failed"; FF_AUTO_FREE char* line = NULL; size_t len = 0; diff --git a/src/detection/editor/editor.c b/src/detection/editor/editor.c index 1566cfbb1..b94cadc30 100644 --- a/src/detection/editor/editor.c +++ b/src/detection/editor/editor.c @@ -10,6 +10,7 @@ #ifdef _WIN32 static inline char* realpath(const char* restrict file_name, char* restrict resolved_name) { + assert(resolved_name != NULL); return _fullpath(resolved_name, file_name, _MAX_PATH); } #endif diff --git a/src/detection/host/host_windows.c b/src/detection/host/host_windows.c index bc50d6f08..daea9bcc3 100644 --- a/src/detection/host/host_windows.c +++ b/src/detection/host/host_windows.c @@ -72,7 +72,7 @@ const char* ffDetectHost(FFHostResult* host) ffCleanUpSmbiosValue(&host->family); } - #if _WIN32 && __x86_64__ + #if _WIN64 ffHostDetectMac(host); #endif