Use proper type to represent a path

This commit is contained in:
Chocobo1 2022-03-23 15:20:05 +08:00
parent bf8d993743
commit 8a708fd97e
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
2 changed files with 8 additions and 17 deletions

View File

@ -61,7 +61,6 @@
#include <QDBusInterface> #include <QDBusInterface>
#endif #endif
#include "base/path.h"
#include "base/types.h" #include "base/types.h"
#include "base/unicodestrings.h" #include "base/unicodestrings.h"
#include "base/utils/fs.h" #include "base/utils/fs.h"
@ -510,13 +509,13 @@ QString Utils::Misc::zlibVersionString()
} }
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
QString Utils::Misc::windowsSystemPath() Path Utils::Misc::windowsSystemPath()
{ {
static const QString path = []() -> QString static const Path path = []() -> Path
{ {
WCHAR systemPath[MAX_PATH] = {0}; WCHAR systemPath[MAX_PATH] = {0};
GetSystemDirectoryW(systemPath, sizeof(systemPath) / sizeof(WCHAR)); GetSystemDirectoryW(systemPath, sizeof(systemPath) / sizeof(WCHAR));
return QString::fromWCharArray(systemPath); return Path(QString::fromWCharArray(systemPath));
}(); }();
return path; return path;
} }

View File

@ -37,7 +37,7 @@
#include <QString> #include <QString>
#include "base/pathfwd.h" #include "base/path.h"
enum class ShutdownDialogAction; enum class ShutdownDialogAction;
@ -87,22 +87,14 @@ namespace Utils::Misc
QString getUserIDString(); QString getUserIDString();
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
QString windowsSystemPath(); Path windowsSystemPath();
template <typename T> template <typename T>
T loadWinAPI(const QString &source, const char *funcName) T loadWinAPI(const QString &source, const char *funcName)
{ {
QString path = windowsSystemPath(); const QString path = (windowsSystemPath() / Path(source)).toString();
if (!path.endsWith(u'\\')) return reinterpret_cast<T>(::GetProcAddress(::LoadLibraryW(
path += u'\\'; path.toStdWString().c_str()), funcName));
path += source;
auto pathWchar = std::make_unique<wchar_t[]>(path.length() + 1);
path.toWCharArray(pathWchar.get());
return reinterpret_cast<T>(
::GetProcAddress(::LoadLibraryW(pathWchar.get()), funcName));
} }
#endif // Q_OS_WIN #endif // Q_OS_WIN
} }