From cba352cca6cf56b217a6b78cbd09cdafb43626c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 12 Jun 2023 21:18:12 +0800 Subject: [PATCH] TerminalFont: don't use singleton Singleton doesn't work well with JSON config --- src/detection/terminalfont/terminalfont.c | 20 ++++++------ src/detection/terminalfont/terminalfont.h | 2 +- src/modules/terminalfont/terminalfont.c | 37 +++++++++++++---------- 3 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/detection/terminalfont/terminalfont.c b/src/detection/terminalfont/terminalfont.c index 2118c2013..46c390955 100644 --- a/src/detection/terminalfont/terminalfont.c +++ b/src/detection/terminalfont/terminalfont.c @@ -374,20 +374,18 @@ static bool detectTerminalFontCommon(const FFinstance* instance, const FFTermina return true; } -const FFTerminalFontResult* ffDetectTerminalFont(const FFinstance* instance) +bool ffDetectTerminalFont(const FFinstance* instance, FFTerminalFontResult* result) { - FF_DETECTION_INTERNAL_GUARD(FFTerminalFontResult, - ffStrbufInit(&result.error); + const FFTerminalShellResult* terminalShell = ffDetectTerminalShell(instance); - const FFTerminalShellResult* terminalShell = ffDetectTerminalShell(instance); + if(terminalShell->terminalProcessName.length == 0) + ffStrbufAppendS(&result->error, "Terminal font needs successful terminal detection"); - if(terminalShell->terminalProcessName.length == 0) - ffStrbufAppendS(&result.error, "Terminal font needs successful terminal detection"); + else if(!detectTerminalFontCommon(instance, terminalShell, result)) + ffDetectTerminalFontPlatform(instance, terminalShell, result); - else if(!detectTerminalFontCommon(instance, terminalShell, &result)) - ffDetectTerminalFontPlatform(instance, terminalShell, &result); + if(result->error.length == 0 && result->font.pretty.length == 0) + ffStrbufAppendF(&result->error, "Unknown terminal: %s", terminalShell->terminalProcessName.chars); - if(result.error.length == 0 && result.font.pretty.length == 0) - ffStrbufAppendF(&result.error, "Unknown terminal: %s", terminalShell->terminalProcessName.chars); - ); + return result->error.length == 0; } diff --git a/src/detection/terminalfont/terminalfont.h b/src/detection/terminalfont/terminalfont.h index 0adc2e2aa..a542d3226 100644 --- a/src/detection/terminalfont/terminalfont.h +++ b/src/detection/terminalfont/terminalfont.h @@ -12,6 +12,6 @@ typedef struct FFTerminalFontResult FFfont font; } FFTerminalFontResult; -const FFTerminalFontResult* ffDetectTerminalFont(const FFinstance* instance); +bool ffDetectTerminalFont(const FFinstance* instance, FFTerminalFontResult* result); #endif diff --git a/src/modules/terminalfont/terminalfont.c b/src/modules/terminalfont/terminalfont.c index eff1c5e5a..e290cc6fc 100644 --- a/src/modules/terminalfont/terminalfont.c +++ b/src/modules/terminalfont/terminalfont.c @@ -8,28 +8,33 @@ void ffPrintTerminalFont(FFinstance* instance, FFTerminalFontOptions* options) { - const FFTerminalFontResult* terminalFont = ffDetectTerminalFont(instance); + FFTerminalFontResult terminalFont; + ffStrbufInit(&terminalFont.error); - if(terminalFont->error.length > 0) + if(!ffDetectTerminalFont(instance, &terminalFont)) { - ffPrintError(instance, FF_TERMINALFONT_DISPLAY_NAME, 0, &options->moduleArgs, "%s", terminalFont->error.chars); - return; - } - - if(options->moduleArgs.outputFormat.length == 0) - { - ffPrintLogoAndKey(instance, FF_TERMINALFONT_DISPLAY_NAME, 0, &options->moduleArgs.key); - ffStrbufPutTo(&terminalFont->font.pretty, stdout); + ffPrintError(instance, FF_TERMINALFONT_DISPLAY_NAME, 0, &options->moduleArgs, "%s", terminalFont.error.chars); } else { - ffPrintFormat(instance, FF_TERMINALFONT_DISPLAY_NAME, 0, &options->moduleArgs, FF_TERMINALFONT_NUM_FORMAT_ARGS, (FFformatarg[]){ - {FF_FORMAT_ARG_TYPE_STRBUF, &terminalFont->font.pretty}, - {FF_FORMAT_ARG_TYPE_STRBUF, &terminalFont->font.name}, - {FF_FORMAT_ARG_TYPE_STRBUF, &terminalFont->font.size}, - {FF_FORMAT_ARG_TYPE_LIST, &terminalFont->font.styles} - }); + if(options->moduleArgs.outputFormat.length == 0) + { + ffPrintLogoAndKey(instance, FF_TERMINALFONT_DISPLAY_NAME, 0, &options->moduleArgs.key); + ffStrbufPutTo(&terminalFont.font.pretty, stdout); + } + else + { + ffPrintFormat(instance, FF_TERMINALFONT_DISPLAY_NAME, 0, &options->moduleArgs, FF_TERMINALFONT_NUM_FORMAT_ARGS, (FFformatarg[]){ + {FF_FORMAT_ARG_TYPE_STRBUF, &terminalFont.font.pretty}, + {FF_FORMAT_ARG_TYPE_STRBUF, &terminalFont.font.name}, + {FF_FORMAT_ARG_TYPE_STRBUF, &terminalFont.font.size}, + {FF_FORMAT_ARG_TYPE_LIST, &terminalFont.font.styles} + }); + } } + + ffStrbufDestroy(&terminalFont.error); + ffFontDestroy(&terminalFont.font); } void ffInitTerminalFontOptions(FFTerminalFontOptions* options)