From 3c7afcf29f4bbc5f4728d33c13b0ea547dfdfe86 Mon Sep 17 00:00:00 2001 From: Sergey Semushin Date: Thu, 6 Jun 2019 09:53:32 +0300 Subject: [PATCH] Clean up log_create. --- Source/logging.cpp | 75 +++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/Source/logging.cpp b/Source/logging.cpp index e71279b25..44e1cefd3 100644 --- a/Source/logging.cpp +++ b/Source/logging.cpp @@ -11,7 +11,7 @@ DWORD nNumberOfBytesToWrite; // idb /* data */ -int log_not_created = 1; // weak +BOOL log_not_created = 1; HANDLE log_file = INVALID_HANDLE_VALUE; void __cdecl log_flush(BOOL force_close) @@ -44,53 +44,54 @@ void __cdecl log_flush(BOOL force_close) HANDLE log_create() { - char *v0; // eax - HANDLE v1; // ebx - HANDLE v2; // eax - char *v3; // edx - char Filename[MAX_PATH]; // [esp+Ch] [ebp-15Ch] - VS_FIXEDFILEINFO file_info; // [esp+110h] [ebp-58h] - char Buffer[32]; // [esp+144h] [ebp-24h] - DWORD pcbBuffer; // [esp+164h] [ebp-4h] + char *last_slash_pos; + HANDLE fh; + VS_FIXEDFILEINFO file_info; + DWORD i, j; + char buf[32]; if (log_not_created) { - if (GetModuleFileName(0, Filename, sizeof(Filename)) && (v0 = strrchr(Filename, '\\')) != 0) - v0[1] = 0; - else - Filename[0] = 0; - pcbBuffer = 32; - if (!GetUserName(Buffer, &pcbBuffer)) - Buffer[0] = 0; + char filename_tmp[MAX_PATH]; + if (GetModuleFileName(NULL, filename_tmp, sizeof filename_tmp) == 0) + filename_tmp[0] = '\0'; + else { + last_slash_pos = strrchr(filename_tmp, '\\'); + if (last_slash_pos == NULL) + filename_tmp[0] = '\0'; + else + *(last_slash_pos + 1) = '\0'; + } + i = 32; + if (!GetUserName(buf, &i)) + buf[0] = '\0'; log_get_version(&file_info); _snprintf( FileName, - sizeof(Filename), + sizeof(filename_tmp), "%s%s%02u%02u%02u.ERR", - Filename, - Buffer, - _LOWORD(file_info.dwProductVersionMS), + filename_tmp, + buf, + file_info.dwProductVersionMS & 0xFFFF, file_info.dwProductVersionLS >> 16, - _LOWORD(file_info.dwProductVersionLS)); + file_info.dwProductVersionLS & 0xFFFF); } - v1 = INVALID_HANDLE_VALUE; - for (pcbBuffer = log_not_created == 0; (signed int)pcbBuffer < 2; ++pcbBuffer) { - v2 = CreateFile(FileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - v1 = v2; - if (v2 != INVALID_HANDLE_VALUE) { - if (GetFileSize(v2, 0) > 0x10000) - SetEndOfFile(v1); + fh = INVALID_HANDLE_VALUE; + for (i = log_not_created ? 0 : 1; (int)i < 2; i++) { + fh = CreateFile(FileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + if (fh != INVALID_HANDLE_VALUE) { + if (GetFileSize(fh, NULL) > 0x10000) + SetEndOfFile(fh); break; } - v3 = strrchr(FileName, '\\'); - if (!v3) - v3 = FileName; - strcpy(Filename, "c:\\"); - memset(&Filename[4], 0, 0x100u); - strcat(Filename, v3); - strcpy(FileName, Filename); + last_slash_pos = strrchr(FileName, '\\'); + if (!last_slash_pos) + last_slash_pos = FileName; + char filename_tmp[MAX_PATH] = "c:\\"; + strcat(filename_tmp, last_slash_pos); + strcpy(FileName, filename_tmp); } - log_not_created = 0; - return v1; + log_not_created = FALSE; + return fh; } // 4947D4: using guessed type int log_not_created;