From 939165d4cf71a282d200d274e8f837fd1a1a00ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 18 Sep 2023 13:52:25 +0800 Subject: [PATCH] Platform: align logic of getting host name to neofetch Fixes: #561 --- src/modules/separator/separator.c | 2 +- src/modules/title/title.c | 12 ++++----- src/util/platform/FFPlatform.c | 5 ---- src/util/platform/FFPlatform.h | 1 - src/util/platform/FFPlatform_unix.c | 36 +------------------------- src/util/platform/FFPlatform_windows.c | 11 ++++---- 6 files changed, 13 insertions(+), 54 deletions(-) diff --git a/src/modules/separator/separator.c b/src/modules/separator/separator.c index fa2161228..555bb2a04 100644 --- a/src/modules/separator/separator.c +++ b/src/modules/separator/separator.c @@ -29,7 +29,7 @@ void ffPrintSeparator(FFSeparatorOptions* options) uint32_t titleLength = 1 // @ + getWcsWidth(&platform->userName, wstr, &state) // user name - + (fqdn ? platform->domainName.length : platform->hostName.length); // host name + + (fqdn ? platform->hostName.length : ffStrbufFirstIndexC(&platform->hostName, '.')); // host name ffLogoPrintLine(); if(options->string.length == 0) diff --git a/src/modules/title/title.c b/src/modules/title/title.c index 7cfd087be..3399f3c20 100644 --- a/src/modules/title/title.c +++ b/src/modules/title/title.c @@ -23,9 +23,10 @@ static inline void printTitlePart(const FFstrbuf* content, const FFstrbuf* color void ffPrintTitle(FFTitleOptions* options) { - FFstrbuf* host = options->fqdn ? - &instance.state.platform.domainName : - &instance.state.platform.hostName; + FF_STRBUF_AUTO_DESTROY hostName = ffStrbufCreateCopy(&instance.state.platform.hostName); + + if (!options->fqdn) + ffStrbufSubstrBeforeFirstC(&hostName, '.'); if (options->moduleArgs.outputFormat.length == 0) { @@ -37,14 +38,14 @@ void ffPrintTitle(FFTitleOptions* options) ffPrintColor(&options->colorAt); putchar('@'); - printTitlePart(host, &options->colorHost); + printTitlePart(&hostName, &options->colorHost); putchar('\n'); } else { ffPrintFormat(FF_TITLE_MODULE_NAME, 0, &options->moduleArgs, FF_TITLE_NUM_FORMAT_ARGS, (FFformatarg[]){ {FF_FORMAT_ARG_TYPE_STRBUF, &instance.state.platform.userName}, - {FF_FORMAT_ARG_TYPE_STRBUF, host}, + {FF_FORMAT_ARG_TYPE_STRBUF, &hostName}, }); } } @@ -147,7 +148,6 @@ void ffGenerateTitleJson(FF_MAYBE_UNUSED FFTitleOptions* options, yyjson_mut_doc yyjson_mut_obj_add_strbuf(doc, obj, "userName", &instance.state.platform.userName); yyjson_mut_obj_add_strbuf(doc, obj, "homeDir", &instance.state.platform.homeDir); yyjson_mut_obj_add_strbuf(doc, obj, "hostName", &instance.state.platform.hostName); - yyjson_mut_obj_add_strbuf(doc, obj, "domainName", &instance.state.platform.domainName); yyjson_mut_obj_add_strbuf(doc, obj, "exePath", &instance.state.platform.exePath); yyjson_mut_obj_add_strbuf(doc, obj, "userShell", &instance.state.platform.userShell); } diff --git a/src/util/platform/FFPlatform.c b/src/util/platform/FFPlatform.c index ad0a179da..baa69e1e1 100644 --- a/src/util/platform/FFPlatform.c +++ b/src/util/platform/FFPlatform.c @@ -12,7 +12,6 @@ void ffPlatformInit(FFPlatform* platform) ffStrbufInit(&platform->userName); ffStrbufInit(&platform->hostName); - ffStrbufInit(&platform->domainName); ffStrbufInit(&platform->userShell); ffStrbufInit(&platform->systemName); @@ -22,9 +21,6 @@ void ffPlatformInit(FFPlatform* platform) ffPlatformInitImpl(platform); - if(platform->domainName.length == 0) - ffStrbufAppend(&platform->domainName, &platform->hostName); - if(platform->systemName.length == 0) { #if defined(__linux__) @@ -59,7 +55,6 @@ void ffPlatformDestroy(FFPlatform* platform) ffStrbufDestroy(&platform->userName); ffStrbufDestroy(&platform->hostName); - ffStrbufDestroy(&platform->domainName); ffStrbufDestroy(&platform->userShell); ffStrbufDestroy(&platform->systemArchitecture); diff --git a/src/util/platform/FFPlatform.h b/src/util/platform/FFPlatform.h index fa646f9de..536b09aed 100644 --- a/src/util/platform/FFPlatform.h +++ b/src/util/platform/FFPlatform.h @@ -15,7 +15,6 @@ typedef struct FFPlatform { FFstrbuf userName; FFstrbuf hostName; - FFstrbuf domainName; FFstrbuf userShell; FFstrbuf systemName; diff --git a/src/util/platform/FFPlatform_unix.c b/src/util/platform/FFPlatform_unix.c index 3f7aada12..2c9b0f4c6 100644 --- a/src/util/platform/FFPlatform_unix.c +++ b/src/util/platform/FFPlatform_unix.c @@ -141,38 +141,9 @@ static void getUserName(FFPlatform* platform, const struct passwd* pwd) static void getHostName(FFPlatform* platform, const struct utsname* uts) { - char hostname[256]; - if(gethostname(hostname, sizeof(hostname)) == 0) - ffStrbufAppendS(&platform->hostName, hostname); - - if(platform->hostName.length == 0) - ffStrbufAppendS(&platform->hostName, uts->nodename); + ffStrbufAppendS(&platform->hostName, uts->nodename); } -#ifdef __linux__ -#include -static void getDomainName(FFPlatform* platform) -{ - struct addrinfo hints = {0}; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = AI_CANONNAME; - - struct addrinfo* info = NULL; - - if(getaddrinfo(platform->hostName.chars, "80", &hints, &info) != 0) - return; - - struct addrinfo* current = info; - while(platform->domainName.length == 0 && current != NULL) - { - ffStrbufAppendS(&platform->domainName, current->ai_canonname); - current = current->ai_next; - } - - freeaddrinfo(info); -} -#endif - static void getUserShell(FFPlatform* platform, const struct passwd* pwd) { const char* shell = getenv("SHELL"); @@ -198,11 +169,6 @@ void ffPlatformInitImpl(FFPlatform* platform) getUserName(platform, pwd); getHostName(platform, &uts); - - #ifdef __linux__ - getDomainName(platform); - #endif - getUserShell(platform, pwd); ffStrbufAppendS(&platform->systemName, uts.sysname); diff --git a/src/util/platform/FFPlatform_windows.c b/src/util/platform/FFPlatform_windows.c index 02389e63b..fea0c26c6 100644 --- a/src/util/platform/FFPlatform_windows.c +++ b/src/util/platform/FFPlatform_windows.c @@ -130,12 +130,11 @@ static void getHostName(FFPlatform* platform) ffStrbufSetWS(&platform->hostName, buffer); } -static void getDomainName(FFPlatform* platform) +static void getUserShell(FFPlatform* platform) { - wchar_t buffer[128]; - DWORD len = sizeof(buffer) / sizeof(*buffer); - if(GetComputerNameExW(ComputerNameDnsDomain, buffer, &len)) - ffStrbufSetWS(&platform->domainName, buffer); + // Works in MSYS2 + ffStrbufAppendS(&platform->userShell, getenv("SHELL")); + ffStrbufReplaceAllC(&platform->userShell, '\\', '/'); } static void getSystemName(FFPlatform* platform) @@ -233,7 +232,7 @@ void ffPlatformInitImpl(FFPlatform* platform) getUserName(platform); getHostName(platform); - getDomainName(platform); + getUserShell(platform); getSystemName(platform); getSystemReleaseAndVersion(platform);