Platform: align logic of getting host name to neofetch

Fixes: #561
This commit is contained in:
李通洲
2023-09-18 13:52:25 +08:00
committed by 李通洲
parent b4f063e1da
commit 939165d4cf
6 changed files with 13 additions and 54 deletions
+1 -1
View File
@@ -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)
+6 -6
View File
@@ -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);
}
-5
View File
@@ -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);
-1
View File
@@ -15,7 +15,6 @@ typedef struct FFPlatform {
FFstrbuf userName;
FFstrbuf hostName;
FFstrbuf domainName;
FFstrbuf userShell;
FFstrbuf systemName;
+1 -35
View File
@@ -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 <netdb.h>
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);
+5 -6
View File
@@ -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);