util: add a helper function to convert wide strings (Windows)

This commit is contained in:
李通洲
2022-11-22 01:33:22 +08:00
parent 9ef95e43a3
commit 629c2de253
4 changed files with 31 additions and 5 deletions
+2
View File
@@ -449,6 +449,7 @@ elseif(WIN32)
src/util/windows/getline.c
src/util/windows/pwd.c
src/util/windows/register.c
src/util/windows/unicode.c
src/util/windows/utsname.c
src/util/windows/wmi.cpp
)
@@ -546,6 +547,7 @@ elseif(WIN32)
PRIVATE "ws2_32"
PRIVATE "ntdll"
PRIVATE "version"
PRIVATE "setupapi"
)
if(USE_WIN_NTAPI)
target_compile_definitions(libfastfetch PRIVATE FF_USE_WIN_NTAPI)
+2 -5
View File
@@ -1,5 +1,6 @@
extern "C" {
#include "os.h"
#include "util/windows/unicode.h"
}
#include "util/windows/wmi.hpp"
@@ -36,11 +37,7 @@ static const char* getOsNameByWinbrand(FFstrbuf* osName)
return "GetProcAddress(BrandingFormatString) failed";
const wchar_t* rawName = BrandingFormatString(L"%WINDOWS_LONG%");
int size_needed = WideCharToMultiByte(CP_UTF8, 0, rawName, -1, nullptr, 0, nullptr, nullptr);
ffStrbufEnsureFree(osName, (uint32_t)size_needed);
WideCharToMultiByte(CP_UTF8, 0, rawName, -1, osName->chars, size_needed, nullptr, nullptr);
osName->length = (uint32_t)size_needed;
osName->chars[size_needed] = '\0';
ffWcharToUtf8(rawName, osName);
GlobalFree((HGLOBAL)rawName);
return NULL;
}
+17
View File
@@ -0,0 +1,17 @@
#include "unicode.h"
void ffWcharToUtf8(const wchar_t* input, FFstrbuf* result)
{
int len = (int)wcslen(input);
if(len <= 0)
{
ffStrbufClear(result);
return;
}
int size_needed = WideCharToMultiByte(CP_UTF8, 0, input, len, NULL, 0, NULL, NULL);
ffStrbufEnsureFree(result, (uint32_t)size_needed);
WideCharToMultiByte(CP_UTF8, 0, input, len, result->chars, size_needed, NULL, NULL);
result->length = (uint32_t)size_needed;
result->chars[size_needed] = '\0';
}
+10
View File
@@ -0,0 +1,10 @@
#pragma once
#ifndef FASTFETCH_INCLUDED_UNICODE_H
#define FASTFETCH_INCLUDED_UNICODE_H
#include "fastfetch.h"
void ffWcharToUtf8(const wchar_t* input, FFstrbuf* result);
#endif