From bb489f9af31397681bd82e0f3f4b0c677a098578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Sat, 30 Dec 2023 18:13:54 +0800 Subject: [PATCH] Common: get rid of `detection/internal.h` --- src/detection/cpu/cpu.c | 1 - src/detection/displayserver/displayserver.c | 14 ++++++++++--- .../displayserver/displayserver_android.c | 8 ++------ .../displayserver/displayserver_apple.c | 15 +++----------- .../displayserver/displayserver_windows.c | 20 ++++++++----------- .../displayserver/linux/displayserver_linux.c | 7 ------- src/detection/font/font.c | 1 - src/detection/gpu/gpu.c | 1 - src/detection/internal.h | 12 ----------- src/detection/media/media.c | 11 ++++++---- src/detection/os/os.c | 20 +++++++++++++++---- src/detection/os/os_android.c | 14 +++---------- src/detection/os/os_apple.m | 12 ----------- src/detection/os/os_linux.c | 11 ---------- src/detection/os/os_windows.cpp | 11 ---------- src/detection/packages/packages.c | 1 - src/detection/terminalfont/terminalfont.c | 1 - 17 files changed, 50 insertions(+), 110 deletions(-) delete mode 100644 src/detection/internal.h diff --git a/src/detection/cpu/cpu.c b/src/detection/cpu/cpu.c index b95a354ad..5edc2f434 100644 --- a/src/detection/cpu/cpu.c +++ b/src/detection/cpu/cpu.c @@ -1,5 +1,4 @@ #include "cpu.h" -#include "detection/internal.h" const char* ffDetectCPUImpl(const FFCPUOptions* options, FFCPUResult* cpu); diff --git a/src/detection/displayserver/displayserver.c b/src/detection/displayserver/displayserver.c index 0b0db7833..12e273dc5 100644 --- a/src/detection/displayserver/displayserver.c +++ b/src/detection/displayserver/displayserver.c @@ -1,5 +1,4 @@ #include "displayserver.h" -#include "detection/internal.h" bool ffdsAppendDisplay( FFDisplayServerResult* result, @@ -36,7 +35,16 @@ void ffConnectDisplayServerImpl(FFDisplayServerResult* ds); const FFDisplayServerResult* ffConnectDisplayServer() { - FF_DETECTION_INTERNAL_GUARD(FFDisplayServerResult, + static FFDisplayServerResult result; + if (result.displays.elementSize == 0) + { + ffStrbufInit(&result.wmProcessName); + ffStrbufInit(&result.wmPrettyName); + ffStrbufInit(&result.wmProtocolName); + ffStrbufInit(&result.deProcessName); + ffStrbufInit(&result.dePrettyName); + ffListInit(&result.displays, sizeof(FFDisplayResult)); ffConnectDisplayServerImpl(&result); - ); + } + return &result; } diff --git a/src/detection/displayserver/displayserver_android.c b/src/detection/displayserver/displayserver_android.c index a1c7508ac..8d3aa20a3 100644 --- a/src/detection/displayserver/displayserver_android.c +++ b/src/detection/displayserver/displayserver_android.c @@ -102,12 +102,8 @@ static bool detectWithGetprop(FFDisplayServerResult* ds) void ffConnectDisplayServerImpl(FFDisplayServerResult* ds) { - ffStrbufInitStatic(&ds->wmProcessName, "WindowManager"); - ffStrbufInitStatic(&ds->wmPrettyName, "Window Manager"); - ffStrbufInit(&ds->wmProtocolName); - ffStrbufInit(&ds->deProcessName); - ffStrbufInit(&ds->dePrettyName); - ffListInitA(&ds->displays, sizeof(FFDisplayResult), 0); + ffStrbufSetStatic(&ds->wmProcessName, "WindowManager"); + ffStrbufSetStatic(&ds->wmPrettyName, "Window Manager"); if (!detectWithGetprop(ds)) detectWithDumpsys(ds); diff --git a/src/detection/displayserver/displayserver_apple.c b/src/detection/displayserver/displayserver_apple.c index 352feafb3..3a63fb303 100644 --- a/src/detection/displayserver/displayserver_apple.c +++ b/src/detection/displayserver/displayserver_apple.c @@ -73,20 +73,11 @@ void ffConnectDisplayServerImpl(FFDisplayServerResult* ds) FF_CFTYPE_AUTO_RELEASE CFMachPortRef port = CGWindowServerCreateServerPort(); if (port) { - ffStrbufInitStatic(&ds->wmProcessName, "WindowServer"); - ffStrbufInitStatic(&ds->wmPrettyName, "Quartz Compositor"); - } - else - { - ffStrbufInit(&ds->wmProcessName); - ffStrbufInit(&ds->wmPrettyName); + ffStrbufSetStatic(&ds->wmProcessName, "WindowServer"); + ffStrbufSetStatic(&ds->wmPrettyName, "Quartz Compositor"); } } - ffStrbufInit(&ds->wmProtocolName); + ffStrbufSetStatic(&ds->dePrettyName, "Aqua"); - ffStrbufInit(&ds->deProcessName); - ffStrbufInitStatic(&ds->dePrettyName, "Aqua"); - - ffListInitA(&ds->displays, sizeof(FFDisplayResult), 4); detectDisplays(ds); } diff --git a/src/detection/displayserver/displayserver_windows.c b/src/detection/displayserver/displayserver_windows.c index 5573d3601..684f29928 100644 --- a/src/detection/displayserver/displayserver_windows.c +++ b/src/detection/displayserver/displayserver_windows.c @@ -13,10 +13,10 @@ typedef struct FFMonitorInfo } FFMonitorInfo; static CALLBACK BOOL MonitorEnumProc( - HMONITOR hMonitor, - FF_MAYBE_UNUSED HDC hdc, - FF_MAYBE_UNUSED LPRECT lpRect, - LPARAM lParam + HMONITOR hMonitor, + FF_MAYBE_UNUSED HDC hdc, + FF_MAYBE_UNUSED LPRECT lpRect, + LPARAM lParam ) { FFlist* monitors = (FFlist*) lParam; @@ -145,20 +145,16 @@ void ffConnectDisplayServerImpl(FFDisplayServerResult* ds) BOOL enabled; if(SUCCEEDED(DwmIsCompositionEnabled(&enabled)) && enabled) { - ffStrbufInitStatic(&ds->wmProcessName, "dwm.exe"); - ffStrbufInitStatic(&ds->wmPrettyName, "Desktop Window Manager"); + ffStrbufSetStatic(&ds->wmProcessName, "dwm.exe"); + ffStrbufSetStatic(&ds->wmPrettyName, "Desktop Window Manager"); } else { // `explorer.exe` only provides a subset of WM functions, as well as the taskbar and desktop icons. // While a window itself is drawn by kernel (GDI). Killing `explorer.exe` won't affect how windows are displayed generally. - ffStrbufInitStatic(&ds->wmProcessName, "explorer.exe"); - ffStrbufInitStatic(&ds->wmPrettyName, "Internal"); + ffStrbufSetStatic(&ds->wmProcessName, "explorer.exe"); + ffStrbufSetStatic(&ds->wmPrettyName, "Internal"); } - ffStrbufInit(&ds->wmProtocolName); - ffStrbufInit(&ds->deProcessName); - ffStrbufInit(&ds->dePrettyName); - ffListInit(&ds->displays, sizeof(FFDisplayResult)); detectDisplays(ds); diff --git a/src/detection/displayserver/linux/displayserver_linux.c b/src/detection/displayserver/linux/displayserver_linux.c index e75e311b0..60168b0dc 100644 --- a/src/detection/displayserver/linux/displayserver_linux.c +++ b/src/detection/displayserver/linux/displayserver_linux.c @@ -3,13 +3,6 @@ void ffConnectDisplayServerImpl(FFDisplayServerResult* ds) { - ffStrbufInit(&ds->wmProcessName); - ffStrbufInit(&ds->wmPrettyName); - ffStrbufInit(&ds->wmProtocolName); - ffStrbufInit(&ds->deProcessName); - ffStrbufInit(&ds->dePrettyName); - ffListInitA(&ds->displays, sizeof(FFDisplayResult), 4); - if (instance.config.general.dsForceDrm == FF_DS_FORCE_DRM_TYPE_FALSE) { //We try wayland as our preferred display server, as it supports the most features. diff --git a/src/detection/font/font.c b/src/detection/font/font.c index 6de21cfdf..c0cced9a6 100644 --- a/src/detection/font/font.c +++ b/src/detection/font/font.c @@ -1,5 +1,4 @@ #include "font.h" -#include "detection/internal.h" const char* ffDetectFontImpl(FFFontResult* font); diff --git a/src/detection/gpu/gpu.c b/src/detection/gpu/gpu.c index 3fd82ca6b..435d687aa 100644 --- a/src/detection/gpu/gpu.c +++ b/src/detection/gpu/gpu.c @@ -1,5 +1,4 @@ #include "gpu.h" -#include "detection/internal.h" #include "detection/vulkan/vulkan.h" #include "detection/opengl/opengl.h" diff --git a/src/detection/internal.h b/src/detection/internal.h deleted file mode 100644 index ef691f734..000000000 --- a/src/detection/internal.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once - -#include "common/thread.h" - -#define FF_DETECTION_INTERNAL_GUARD(ResultType, ...) \ - static ResultType result; \ - static bool init = false; \ - if(init) \ - return &result; \ - init = true; \ - __VA_ARGS__; \ - return &result; diff --git a/src/detection/media/media.c b/src/detection/media/media.c index 50604342b..c24d8a1c4 100644 --- a/src/detection/media/media.c +++ b/src/detection/media/media.c @@ -1,11 +1,13 @@ #include "media.h" -#include "detection/internal.h" void ffDetectMediaImpl(FFMediaResult* media); const FFMediaResult* ffDetectMedia(void) { - FF_DETECTION_INTERNAL_GUARD(FFMediaResult, + static FFMediaResult result; + + if (result.error.chars == NULL) + { ffStrbufInit(&result.error); ffStrbufInit(&result.playerId); ffStrbufInit(&result.player); @@ -14,10 +16,11 @@ const FFMediaResult* ffDetectMedia(void) ffStrbufInit(&result.album); ffStrbufInit(&result.url); ffStrbufInit(&result.status); - ffDetectMediaImpl(&result); if(result.song.length == 0 && result.error.length == 0) ffStrbufAppendS(&result.error, "No media found"); - ); + } + + return &result; } diff --git a/src/detection/os/os.c b/src/detection/os/os.c index c09935954..c8f10d5f1 100644 --- a/src/detection/os/os.c +++ b/src/detection/os/os.c @@ -1,11 +1,23 @@ #include "os.h" -#include "detection/internal.h" void ffDetectOSImpl(FFOSResult* os); const FFOSResult* ffDetectOS(void) { - FF_DETECTION_INTERNAL_GUARD(FFOSResult, - ffDetectOSImpl(&result) - ); + static FFOSResult result; + if (result.name.chars == NULL) + { + ffStrbufInit(&result.name); + ffStrbufInit(&result.prettyName); + ffStrbufInit(&result.id); + ffStrbufInit(&result.version); + ffStrbufInit(&result.versionID); + ffStrbufInit(&result.codename); + ffStrbufInit(&result.buildID); + ffStrbufInit(&result.idLike); + ffStrbufInit(&result.variant); + ffStrbufInit(&result.variantID); + ffDetectOSImpl(&result); + } + return &result; } diff --git a/src/detection/os/os_android.c b/src/detection/os/os_android.c index 1877aadfb..17752a27b 100644 --- a/src/detection/os/os_android.c +++ b/src/detection/os/os_android.c @@ -3,25 +3,17 @@ void ffDetectOSImpl(FFOSResult* os) { - ffStrbufInitStatic(&os->name, "Android"); + ffStrbufSetStatic(&os->name, "Android"); - ffStrbufInitStatic(&os->prettyName, "Android"); + ffStrbufSetStatic(&os->prettyName, "Android"); - ffStrbufInitStatic(&os->id, "android"); + ffStrbufSetStatic(&os->id, "android"); - ffStrbufInit(&os->version); ffSettingsGetAndroidProperty("ro.build.version.release", &os->version); - ffStrbufInit(&os->versionID); ffSettingsGetAndroidProperty("ro.build.version.release", &os->versionID); - ffStrbufInit(&os->codename); ffSettingsGetAndroidProperty("ro.build.version.codename", &os->codename); - ffStrbufInit(&os->buildID); ffSettingsGetAndroidProperty("ro.build.id", &os->buildID); - - ffStrbufInit(&os->idLike); - ffStrbufInit(&os->variant); - ffStrbufInit(&os->variantID); } diff --git a/src/detection/os/os_apple.m b/src/detection/os/os_apple.m index 1ce516e25..70687811e 100644 --- a/src/detection/os/os_apple.m +++ b/src/detection/os/os_apple.m @@ -98,18 +98,6 @@ static void parseOSXSoftwareLicense(FFOSResult* os) void ffDetectOSImpl(FFOSResult* os) { - ffStrbufInit(&os->name); - ffStrbufInit(&os->version); - ffStrbufInit(&os->buildID); - ffStrbufInit(&os->id); - ffStrbufInit(&os->prettyName); - ffStrbufInit(&os->versionID); - - ffStrbufInit(&os->codename); - ffStrbufInit(&os->idLike); - ffStrbufInit(&os->variant); - ffStrbufInit(&os->variantID); - parseSystemVersion(os); if(ffStrbufStartsWithIgnCaseS(&os->name, "MacOS")) diff --git a/src/detection/os/os_linux.c b/src/detection/os/os_linux.c index 84a213edc..5058033a2 100644 --- a/src/detection/os/os_linux.c +++ b/src/detection/os/os_linux.c @@ -167,17 +167,6 @@ static void detectOS(FFOSResult* os) void ffDetectOSImpl(FFOSResult* os) { - ffStrbufInit(&os->name); - ffStrbufInit(&os->prettyName); - ffStrbufInit(&os->id); - ffStrbufInit(&os->idLike); - ffStrbufInit(&os->variant); - ffStrbufInit(&os->variantID); - ffStrbufInit(&os->version); - ffStrbufInit(&os->versionID); - ffStrbufInit(&os->codename); - ffStrbufInit(&os->buildID); - detectOS(os); if(ffStrbufIgnCaseEqualS(&os->id, "ubuntu")) diff --git a/src/detection/os/os_windows.cpp b/src/detection/os/os_windows.cpp index 772f09500..bd442da7d 100644 --- a/src/detection/os/os_windows.cpp +++ b/src/detection/os/os_windows.cpp @@ -42,17 +42,6 @@ static const char* getOsNameByWinbrand(FFstrbuf* osName) extern "C" void ffDetectOSImpl(FFOSResult* os) { - ffStrbufInit(&os->name); - ffStrbufInit(&os->prettyName); - ffStrbufInit(&os->id); - ffStrbufInit(&os->idLike); - ffStrbufInit(&os->variant); - ffStrbufInit(&os->variantID); - ffStrbufInit(&os->version); - ffStrbufInit(&os->versionID); - ffStrbufInit(&os->codename); - ffStrbufInit(&os->buildID); - if(getOsNameByWinbrand(&os->variant) && getOsNameByWmi(&os->variant)) return; diff --git a/src/detection/packages/packages.c b/src/detection/packages/packages.c index 2d1268a80..b3549a16a 100644 --- a/src/detection/packages/packages.c +++ b/src/detection/packages/packages.c @@ -1,5 +1,4 @@ #include "packages.h" -#include "detection/internal.h" #include diff --git a/src/detection/terminalfont/terminalfont.c b/src/detection/terminalfont/terminalfont.c index e6b5ea66e..23932ef81 100644 --- a/src/detection/terminalfont/terminalfont.c +++ b/src/detection/terminalfont/terminalfont.c @@ -1,7 +1,6 @@ #include "terminalfont.h" #include "common/properties.h" #include "common/processing.h" -#include "detection/internal.h" #include "detection/terminalshell/terminalshell.h" static void detectAlacritty(FFTerminalFontResult* terminalFont)