mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 02:42:09 +02:00
Kernel: add support for Windows
This commit is contained in:
@@ -269,6 +269,7 @@ if(LINUX OR APPLE OR ANDROID OR BSD)
|
||||
src/detection/disk/disk.c
|
||||
src/detection/terminalShell/terminalShell_linux.c
|
||||
src/detection/packages/packages_linux.c
|
||||
src/detection/kernel/kernel_linux.c
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -340,6 +341,7 @@ if(WIN_MSYS)
|
||||
src/detection/terminalShell/terminalShell_windows.cpp
|
||||
src/detection/packages/packages_linux.c
|
||||
src/detection/packages/packages_windows.c
|
||||
src/detection/kernel/kernel_windows.cpp
|
||||
src/util/windows/wmi.cpp
|
||||
|
||||
# Shared
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
#ifndef FF_INCLUDED_detection_kernel_kernel
|
||||
#define FF_INCLUDED_detection_kernel_kernel
|
||||
|
||||
#include "fastfetch.h"
|
||||
|
||||
typedef struct FFKernelResult
|
||||
{
|
||||
FFstrbuf sysname;
|
||||
FFstrbuf release;
|
||||
FFstrbuf version;
|
||||
FFstrbuf error;
|
||||
} FFKernelResult;
|
||||
|
||||
void ffDetectKernel(FFinstance* instance, FFKernelResult* result);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,9 @@
|
||||
#include "kernel.h"
|
||||
|
||||
void ffDetectKernel(FFinstance* instance, FFKernelResult* result)
|
||||
{
|
||||
ffStrbufInit(&result->error);
|
||||
ffStrbufInitS(&result->sysname, instance->state.utsname.sysname);
|
||||
ffStrbufInitS(&result->release, instance->state.utsname.release);
|
||||
ffStrbufInitS(&result->version, instance->state.utsname.version);
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
extern "C" {
|
||||
#include "kernel.h"
|
||||
}
|
||||
#include "util/windows/wmi.hpp"
|
||||
|
||||
extern "C" void ffDetectKernel(FFinstance* instance, FFKernelResult* kernel)
|
||||
{
|
||||
FF_UNUSED(instance);
|
||||
|
||||
ffStrbufInit(&kernel->error);
|
||||
|
||||
ffStrbufInitS(&kernel->sysname, "Windows_NT");
|
||||
ffStrbufInit(&kernel->release);
|
||||
ffStrbufInit(&kernel->version);
|
||||
|
||||
IEnumWbemClassObject* pEnumerator = ffQueryWmi(L"SELECT Version FROM Win32_OperatingSystem", &kernel->error);
|
||||
if(!pEnumerator)
|
||||
return;
|
||||
|
||||
IWbemClassObject *pclsObj = NULL;
|
||||
ULONG uReturn = 0;
|
||||
|
||||
if(FAILED(pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn)) || uReturn == 0)
|
||||
{
|
||||
ffStrbufInitS(&kernel->error, "No WMI result returned");
|
||||
pEnumerator->Release();
|
||||
return;
|
||||
}
|
||||
|
||||
ffGetWmiObjString(pclsObj, L"Version", &kernel->release);
|
||||
|
||||
pclsObj->Release();
|
||||
pEnumerator->Release();
|
||||
}
|
||||
+20
-4
@@ -1,22 +1,38 @@
|
||||
#include "fastfetch.h"
|
||||
#include "common/printing.h"
|
||||
#include "detection/kernel/kernel.h"
|
||||
|
||||
#define FF_KERNEL_MODULE_NAME "Kernel"
|
||||
#define FF_KERNEL_NUM_FORMAT_ARGS 3
|
||||
|
||||
void ffPrintKernel(FFinstance* instance)
|
||||
{
|
||||
FFKernelResult result;
|
||||
ffDetectKernel(instance, &result);
|
||||
|
||||
if(result.error.length > 0)
|
||||
{
|
||||
ffPrintError(instance, FF_KERNEL_MODULE_NAME, 0, &instance->config.kernel, "%*s", result.error.length, result.error.chars);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if(instance->config.kernel.outputFormat.length == 0)
|
||||
{
|
||||
ffPrintLogoAndKey(instance, FF_KERNEL_MODULE_NAME, 0, &instance->config.kernel.key);
|
||||
puts(instance->state.utsname.release);
|
||||
ffStrbufPutTo(&result.release, stdout);
|
||||
}
|
||||
else
|
||||
{
|
||||
ffPrintFormat(instance, FF_KERNEL_MODULE_NAME, 0, &instance->config.kernel, FF_KERNEL_NUM_FORMAT_ARGS, (FFformatarg[]){
|
||||
{FF_FORMAT_ARG_TYPE_STRING, instance->state.utsname.sysname},
|
||||
{FF_FORMAT_ARG_TYPE_STRING, instance->state.utsname.release},
|
||||
{FF_FORMAT_ARG_TYPE_STRING, instance->state.utsname.version}
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &result.sysname},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &result.release},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &result.version}
|
||||
});
|
||||
}
|
||||
|
||||
exit:
|
||||
ffStrbufDestroy(&result.error);
|
||||
ffStrbufDestroy(&result.sysname);
|
||||
ffStrbufDestroy(&result.release);
|
||||
ffStrbufDestroy(&result.version);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user