From 7eaefe163a8a617eafc2beefc31ebea347375ca3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 15 Jul 2024 10:05:35 +0800 Subject: [PATCH] TerminalFont (Linux): improve detection for xterm Fix #1095 --- src/common/properties.c | 12 ++++-------- src/common/properties.h | 8 +++++++- src/detection/terminalshell/terminalshell.c | 14 +++++++++----- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/common/properties.c b/src/common/properties.c index f45c9928c..fbf11416e 100644 --- a/src/common/properties.c +++ b/src/common/properties.c @@ -4,11 +4,12 @@ #include "util/mallocHelper.h" #include +#include #ifdef _WIN32 #include "util/windows/getline.h" #endif -static bool parsePropLinePointer(const char** line, const char* start, FFstrbuf* buffer) +bool ffParsePropLinePointer(const char** line, const char* start, FFstrbuf* buffer) { if(**line == '\0') return false; @@ -32,7 +33,7 @@ static bool parsePropLinePointer(const char** line, const char* start, FFstrbuf* } //Line doesn't match start, skip it - if(**line != *start || **line == '\0') + if(tolower(**line) != tolower(*start) || **line == '\0') return false; //Line and start match, continue testing @@ -69,14 +70,9 @@ static bool parsePropLinePointer(const char** line, const char* start, FFstrbuf* return true; } -bool ffParsePropLine(const char* line, const char* start, FFstrbuf* buffer) -{ - return parsePropLinePointer(&line, start, buffer); -} - bool ffParsePropLines(const char* lines, const char* start, FFstrbuf* buffer) { - while(!parsePropLinePointer(&lines, start, buffer)) + while(!ffParsePropLinePointer(&lines, start, buffer)) { while(*lines != '\0' && *lines != '\n') ++lines; diff --git a/src/common/properties.h b/src/common/properties.h index 69ea5ddf4..9cc9ff34f 100644 --- a/src/common/properties.h +++ b/src/common/properties.h @@ -8,12 +8,18 @@ typedef struct FFpropquery FFstrbuf* buffer; } FFpropquery; -bool ffParsePropLine(const char* line, const char* start, FFstrbuf* buffer); bool ffParsePropLines(const char* lines, const char* start, FFstrbuf* buffer); bool ffParsePropFileValues(const char* filename, uint32_t numQueries, FFpropquery* queries); bool ffParsePropFileHomeValues(const char* relativeFile, uint32_t numQueries, FFpropquery* queries); bool ffParsePropFileListValues(const FFlist* list, const char* relativeFile, uint32_t numQueries, FFpropquery* queries); +bool ffParsePropLinePointer(const char** line, const char* start, FFstrbuf* buffer); + +static inline bool ffParsePropLine(const char* line, const char* start, FFstrbuf* buffer) +{ + return ffParsePropLinePointer(&line, start, buffer); +} + static inline bool ffParsePropFile(const char* filename, const char* start, FFstrbuf* buffer) { return ffParsePropFileValues(filename, 1, (FFpropquery[]){{start, buffer}}); diff --git a/src/detection/terminalshell/terminalshell.c b/src/detection/terminalshell/terminalshell.c index f125523ec..2bc80b56b 100644 --- a/src/detection/terminalshell/terminalshell.c +++ b/src/detection/terminalshell/terminalshell.c @@ -352,11 +352,15 @@ FF_MAYBE_UNUSED static bool getTerminalVersionCockpit(FFstrbuf* exe, FFstrbuf* v FF_MAYBE_UNUSED static bool getTerminalVersionXterm(FFstrbuf* exe, FFstrbuf* version) { - if(ffProcessAppendStdOut(version, (char* const[]){ - exe->chars, - "-v", - NULL - })) return false; + ffStrbufSetS(version, getenv("XTERM_VERSION")); + if (!version->length) + { + if(ffProcessAppendStdOut(version, (char* const[]){ + exe->chars, + "-v", + NULL + })) return false; + } //xterm(273) ffStrbufTrimRight(version, ')');