diff --git a/appveyor.yml b/appveyor.yml index 1b5c690..e4587c4 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: 1.0.0.{build} +version: 1.0.1.{build} branches: only: - master diff --git a/src/wufuc/log.c b/src/wufuc/log.c index 398ac9a..b397702 100644 --- a/src/wufuc/log.c +++ b/src/wufuc/log.c @@ -3,54 +3,55 @@ #include -HANDLE m_hFile = INVALID_HANDLE_VALUE; +static HANDLE m_hFile = INVALID_HANDLE_VALUE; +static DWORD m_dwProcessId; +static wchar_t m_szExeFilePath[MAX_PATH]; +static wchar_t *m_pszExeName; -BOOL CALLBACK init_file_handle( - PINIT_ONCE pInitOnce, - ParamData *pParam, - PVOID *ppContext) +BOOL CALLBACK init_once_callback( + PINIT_ONCE InitOnce, + PVOID *Parameter, + PVOID *lpContext) { - BOOL result = FALSE; - HANDLE hFile; + BOOL result; HRESULT hr; wchar_t *pszPath; wchar_t szFilePath[MAX_PATH]; int ret; - pParam->dwProcessId = GetCurrentProcessId(); - if ( !GetModuleFileNameW(NULL, pParam->szExeFilePath, _countof(pParam->szExeFilePath)) ) { + m_dwProcessId = GetCurrentProcessId(); + if ( !GetModuleFileNameW(NULL, m_szExeFilePath, _countof(m_szExeFilePath)) ) { log_debug(L"GetModuleFileNameW failed! (GLE=%lu)", GetLastError()); - return result; + return FALSE; } - pParam->pszExeName = PathFindFileNameW(pParam->szExeFilePath); + m_pszExeName = PathFindFileNameW(m_szExeFilePath); hr = SHGetKnownFolderPath(&FOLDERID_ProgramData, 0, NULL, &pszPath); if ( hr != S_OK ) { log_debug(L"SHGetKnownFolderPath failed! (HRESULT=0x%08X)", hr); - return result; + return FALSE; } ret = wcscpy_s(szFilePath, _countof(szFilePath), pszPath); CoTaskMemFree(pszPath); if ( ret ) { log_debug(L"wcscpy_s failed! (Return value=%d)", ret); - return result; + return FALSE; } - if ( !PathAppendW(szFilePath, L"wufuc") ) { append_fail: log_debug(L"PathAppendW failed!"); - return result; + return FALSE; } if ( !CreateDirectoryW(szFilePath, NULL) && GetLastError() != ERROR_ALREADY_EXISTS ) { log_debug(L"CreateDirectoryW failed! (GLE=%lu)", GetLastError()); - return result; + return FALSE; } - if ( !PathAppendW(szFilePath, L"wufuc.log") ) + if ( !PathAppendW(szFilePath, L"wufuc.1.log") ) goto append_fail; - hFile = CreateFileW(szFilePath, + m_hFile = CreateFileW(szFilePath, FILE_APPEND_DATA, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, @@ -58,12 +59,9 @@ append_fail: FILE_ATTRIBUTE_NORMAL, NULL); - if ( hFile != INVALID_HANDLE_VALUE ) { - *ppContext = (PVOID)hFile; - result = TRUE; - } else { + result = m_hFile != INVALID_HANDLE_VALUE; + if ( !result ) log_debug(L"CreateFileW failed! (GLE=%lu)", GetLastError()); - } return result; } @@ -93,9 +91,7 @@ void log_debug_(const wchar_t *const format, ...) void log_trace_(const wchar_t *const format, ...) { static INIT_ONCE InitOnce = INIT_ONCE_STATIC_INIT; - static ParamData data; BOOL bStatus; - errno_t e; wchar_t datebuf[9]; wchar_t timebuf[9]; va_list ap; @@ -108,46 +104,44 @@ void log_trace_(const wchar_t *const format, ...) char *buf3; DWORD written; - bStatus = InitOnceExecuteOnce(&InitOnce, - (PINIT_ONCE_FN)init_file_handle, - &data, - &(LPVOID)m_hFile); + bStatus = InitOnceExecuteOnce(&InitOnce, init_once_callback, NULL, NULL); - e = _wstrdate_s(datebuf, _countof(datebuf)); - if ( e ) return; - e = _wstrtime_s(timebuf, _countof(timebuf)); - if ( e ) return; + if ( _wstrdate_s(datebuf, _countof(datebuf)) + || _wstrtime_s(timebuf, _countof(timebuf)) ) + return; va_start(ap, format); - count = _vscwprintf(format, ap); + ret = _vscwprintf(format, ap); va_end(ap); - if ( count == -1 ) return; + if ( ret == -1 ) return; + count = ret + 1; - buf1 = calloc(count + 1, sizeof *buf1); + buf1 = calloc(count, sizeof *buf1); if ( !buf1 ) return; va_start(ap, format); - ret = vswprintf_s(buf1, count + 1, format, ap); + ret = vswprintf_s(buf1, count, format, ap); va_end(ap); if ( ret == -1 ) goto free_buf1; - count = _scwprintf(fmt, datebuf, timebuf, data.pszExeName, data.dwProcessId, buf1); - if ( count == -1 ) goto free_buf1; + ret = _scwprintf(fmt, datebuf, timebuf, m_pszExeName, m_dwProcessId, buf1); + if ( ret == -1 ) goto free_buf1; + count = ret + 1; - buf2 = calloc(count + 1, sizeof *buf2); + buf2 = calloc(count, sizeof *buf2); if ( !buf2 ) goto free_buf1; - count = swprintf_s(buf2, count + 1, fmt, datebuf, timebuf, data.pszExeName, data.dwProcessId, buf1); - if ( count == -1 ) goto free_buf2; + ret = swprintf_s(buf2, count, fmt, datebuf, timebuf, m_pszExeName, m_dwProcessId, buf1); + if ( ret == -1 ) goto free_buf2; if ( bStatus ) { - size = WideCharToMultiByte(CP_UTF8, 0, buf2, count, NULL, 0, NULL, NULL); + size = WideCharToMultiByte(CP_UTF8, 0, buf2, ret, NULL, 0, NULL, NULL); if ( !size ) goto fallback; buf3 = malloc(size); if ( !buf3 ) goto fallback; - ret = WideCharToMultiByte(CP_UTF8, 0, buf2, count, buf3, size, NULL, NULL) + ret = WideCharToMultiByte(CP_UTF8, 0, buf2, ret, buf3, size, NULL, NULL) && WriteFile(m_hFile, buf3, size, &written, NULL); free(buf3); if ( !ret ) goto fallback; diff --git a/src/wufuc/log.h b/src/wufuc/log.h index b784b12..f2f54c1 100644 --- a/src/wufuc/log.h +++ b/src/wufuc/log.h @@ -1,12 +1,5 @@ #pragma once -typedef struct -{ - DWORD dwProcessId; - wchar_t szExeFilePath[MAX_PATH]; - wchar_t *pszExeName; -} ParamData; - void log_debug_(const wchar_t *const format, ...); void log_trace_(const wchar_t *const format, ...); void log_close(void); diff --git a/src/wufuc/resource.h b/src/wufuc/resource.h index 704ba3b..a8ce4af 100644 --- a/src/wufuc/resource.h +++ b/src/wufuc/resource.h @@ -1,11 +1,11 @@ #pragma once #ifndef BUILD_COMMIT_VERSION -#define BUILD_COMMIT_VERSION 1.0.0.0 +#define BUILD_COMMIT_VERSION 1.0.1.0 #endif #ifndef BUILD_VERSION_COMMA -#define BUILD_VERSION_COMMA 1,0,0,0 +#define BUILD_VERSION_COMMA 1,0,1,0 #endif #define S_(x) #x