aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/Debugging/WheatyExceptionReport.cpp18
-rw-r--r--src/common/Platform/ServiceWin32.cpp36
2 files changed, 37 insertions, 17 deletions
diff --git a/src/common/Debugging/WheatyExceptionReport.cpp b/src/common/Debugging/WheatyExceptionReport.cpp
index 434d9cd1e07..c9e3a985543 100644
--- a/src/common/Debugging/WheatyExceptionReport.cpp
+++ b/src/common/Debugging/WheatyExceptionReport.cpp
@@ -41,7 +41,7 @@ inline LPTSTR ErrorMessage(DWORD dw)
else
{
LPTSTR msgBuf = (LPTSTR)LocalAlloc(LPTR, 30);
- snprintf(msgBuf, 30, "Unknown error: %u", dw);
+ _sntprintf(msgBuf, 30, _T("Unknown error: %d"), (int)dw);
return msgBuf;
}
@@ -125,19 +125,25 @@ PEXCEPTION_POINTERS pExceptionInfo)
++pos;
TCHAR crash_folder_path[MAX_PATH];
- _stprintf_s(crash_folder_path, "%s\\%s", module_folder_name, CrashFolder);
+ _stprintf_s(crash_folder_path, _T("%s\\%s"), module_folder_name, CrashFolder);
if (!CreateDirectory(crash_folder_path, nullptr))
{
if (GetLastError() != ERROR_ALREADY_EXISTS)
return 0;
}
+#ifdef _UNICODE
+#define PRSTRc "S"
+#else
+#define PRSTRc "s"
+#endif
+
SYSTEMTIME systime;
GetLocalTime(&systime);
- _stprintf_s(m_szDumpFileName, "%s\\%s_%s_[%u-%u_%u-%u-%u].dmp",
+ _stprintf_s(m_szDumpFileName, _T("%s\\%" PRSTRc "_%s_[%u-%u_%u-%u-%u].dmp"),
crash_folder_path, GitRevision::GetHash(), pos, systime.wDay, systime.wMonth, systime.wHour, systime.wMinute, systime.wSecond);
- _stprintf_s(m_szLogFileName, _T("%s\\%s_%s_[%u-%u_%u-%u-%u].txt"),
+ _stprintf_s(m_szLogFileName, _T("%s\\%" PRSTRc "_%s_[%u-%u_%u-%u-%u].txt"),
crash_folder_path, GitRevision::GetHash(), pos, systime.wDay, systime.wMonth, systime.wHour, systime.wMinute, systime.wSecond);
m_hDumpFile = CreateFile(m_szDumpFileName,
@@ -226,7 +232,7 @@ template<size_t size>
void ToTchar(wchar_t const* src, TCHAR (&dst)[size])
{
if constexpr (std::is_same_v<TCHAR, char>)
- ::wcstombs_s(nullptr, dst, src, size);
+ ::wcstombs_s(nullptr, dst, src, _TRUNCATE);
else
::wcscpy_s(dst, size, src);
}
@@ -551,7 +557,7 @@ BOOL WheatyExceptionReport::_GetWindowsVersionFromWMI(TCHAR* szVersion, DWORD cn
_tcsncat(szVersion, _T(" "), cntMax);
memset(buf, 0, sizeof(buf));
ToTchar(field.bstrVal, buf);
- if (strlen(buf))
+ if (_tcslen(buf))
_tcsncat(szVersion, buf, cntMax);
}
VariantClear(&field);
diff --git a/src/common/Platform/ServiceWin32.cpp b/src/common/Platform/ServiceWin32.cpp
index be827a8308a..72964701a0c 100644
--- a/src/common/Platform/ServiceWin32.cpp
+++ b/src/common/Platform/ServiceWin32.cpp
@@ -19,6 +19,7 @@
#include "Log.h"
#include <cstring>
+#include <tchar.h>
#include <windows.h>
#include <winsvc.h>
@@ -31,9 +32,9 @@
#endif
extern int main(int argc, char ** argv);
-extern char serviceLongName[];
-extern char serviceName[];
-extern char serviceDescription[];
+extern TCHAR serviceLongName[];
+extern TCHAR serviceName[];
+extern TCHAR serviceDescription[];
extern int m_ServiceStatus;
@@ -49,11 +50,11 @@ bool WinServiceInstall()
if (serviceControlManager)
{
- char path[_MAX_PATH + 10];
+ TCHAR path[_MAX_PATH + 10];
if (GetModuleFileName( nullptr, path, sizeof(path)/sizeof(path[0]) ) > 0)
{
SC_HANDLE service;
- std::strcat(path, " --service run");
+ _tcscat(path, _T(" --service run"));
service = CreateService(serviceControlManager,
serviceName, // name of service
serviceLongName, // service name to display
@@ -70,7 +71,7 @@ bool WinServiceInstall()
nullptr); // no password
if (service)
{
- HMODULE advapi32 = GetModuleHandle("ADVAPI32.DLL");
+ HMODULE advapi32 = GetModuleHandle(_T("ADVAPI32.DLL"));
if (!advapi32)
{
CloseServiceHandle(service);
@@ -182,7 +183,16 @@ void WINAPI ServiceControlHandler(DWORD controlCode)
SetServiceStatus(serviceStatusHandle, &serviceStatus);
}
-void WINAPI ServiceMain(DWORD argc, char *argv[])
+template<size_t size>
+void TCharToChar(TCHAR const* src, char(&dst)[size])
+{
+ if constexpr (std::is_same_v<TCHAR, char>)
+ ::strcpy_s(dst, src, size);
+ else
+ ::wcstombs_s(nullptr, dst, src, _TRUNCATE);
+}
+
+void WINAPI ServiceMain(DWORD /*argc*/, TCHAR *argv[])
{
// initialise service status
serviceStatus.dwServiceType = SERVICE_WIN32;
@@ -197,12 +207,12 @@ void WINAPI ServiceMain(DWORD argc, char *argv[])
if ( serviceStatusHandle )
{
- char path[_MAX_PATH + 1];
+ TCHAR path[_MAX_PATH + 1];
unsigned int i, last_slash = 0;
GetModuleFileName(nullptr, path, sizeof(path)/sizeof(path[0]));
- size_t pathLen = std::strlen(path);
+ size_t pathLen = _tcslen(path);
for (i = 0; i < pathLen; i++)
{
if (path[i] == '\\') last_slash = i;
@@ -227,8 +237,12 @@ void WINAPI ServiceMain(DWORD argc, char *argv[])
////////////////////////
m_ServiceStatus = 1;
- argc = 1;
- main(argc, argv);
+
+ char cArg[_MAX_PATH + 1];
+ TCharToChar(argv[0], cArg);
+ char* cArgv[] = { cArg };
+
+ main(1, cArgv);
// service was stopped
serviceStatus.dwCurrentState = SERVICE_STOP_PENDING;