diff --git a/src/crashlog.cpp b/src/crashlog.cpp index 1692f32c64..38ba39568b 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -99,11 +99,6 @@ void CrashLog::LogCompiler(std::back_insert_iterator &output_iterat #endif } -/* virtual */ void CrashLog::LogModules(std::back_insert_iterator &output_iterator) const -{ - /* Stub implementation; not all OSes support this. */ -} - /** * Writes OpenTTD's version to the buffer. * @param output_iterator Iterator to write the output to. @@ -343,7 +338,6 @@ void CrashLog::FillCrashLog(std::back_insert_iterator &output_itera this->LogCompiler(output_iterator); this->LogConfiguration(output_iterator); this->LogLibraries(output_iterator); - this->LogModules(output_iterator); this->LogGamelog(output_iterator); this->LogRecentNews(output_iterator); diff --git a/src/crashlog.h b/src/crashlog.h index c310689d72..7f486c2bac 100644 --- a/src/crashlog.h +++ b/src/crashlog.h @@ -44,14 +44,6 @@ protected: */ virtual void LogStacktrace(std::back_insert_iterator &output_iterator) const = 0; - /** - * Writes the dynamically linked libraries/modules to the buffer, if there - * is information about it available. - * @param output_iterator Iterator to write the output to. - */ - virtual void LogModules(std::back_insert_iterator &output_iterator) const; - - void LogOpenTTDVersion(std::back_insert_iterator &output_iterator) const; void LogConfiguration(std::back_insert_iterator &output_iterator) const; void LogLibraries(std::back_insert_iterator &output_iterator) const; diff --git a/src/os/windows/crashlog_win.cpp b/src/os/windows/crashlog_win.cpp index 786c7cb9b4..5b4005ee51 100644 --- a/src/os/windows/crashlog_win.cpp +++ b/src/os/windows/crashlog_win.cpp @@ -43,7 +43,6 @@ class CrashLogWindows : public CrashLog { void LogOSVersion(std::back_insert_iterator &output_iterator) const override; void LogError(std::back_insert_iterator &output_iterator, const std::string_view message) const override; void LogStacktrace(std::back_insert_iterator &output_iterator) const override; - void LogModules(std::back_insert_iterator &output_iterator) const override; public: #ifdef WITH_UNOFFICIAL_BREAKPAD @@ -112,113 +111,6 @@ public: ); } -struct DebugFileInfo { - uint32_t size; - uint32_t crc32; - SYSTEMTIME file_time; -}; - -static uint32_t _crc_table[256]; - -static void MakeCRCTable() -{ - uint32_t crc, poly = 0xEDB88320L; - int i; - int j; - - for (i = 0; i != 256; i++) { - crc = i; - for (j = 8; j != 0; j--) { - crc = (crc & 1 ? (crc >> 1) ^ poly : crc >> 1); - } - _crc_table[i] = crc; - } -} - -static uint32_t CalcCRC(byte *data, uint size, uint32_t crc) -{ - for (; size > 0; size--) { - crc = ((crc >> 8) & 0x00FFFFFF) ^ _crc_table[(crc ^ *data++) & 0xFF]; - } - return crc; -} - -static void GetFileInfo(DebugFileInfo *dfi, const wchar_t *filename) -{ - HANDLE file; - memset(dfi, 0, sizeof(*dfi)); - - file = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, 0); - if (file != INVALID_HANDLE_VALUE) { - byte buffer[1024]; - DWORD numread; - uint32_t filesize = 0; - FILETIME write_time; - uint32_t crc = (uint32_t)-1; - - for (;;) { - if (ReadFile(file, buffer, sizeof(buffer), &numread, nullptr) == 0 || numread == 0) { - break; - } - filesize += numread; - crc = CalcCRC(buffer, numread, crc); - } - dfi->size = filesize; - dfi->crc32 = crc ^ (uint32_t)-1; - - if (GetFileTime(file, nullptr, nullptr, &write_time)) { - FileTimeToSystemTime(&write_time, &dfi->file_time); - } - CloseHandle(file); - } -} - - -static void PrintModuleInfo(std::back_insert_iterator &output_iterator, HMODULE mod) -{ - wchar_t buffer[MAX_PATH]; - DebugFileInfo dfi; - - GetModuleFileName(mod, buffer, MAX_PATH); - GetFileInfo(&dfi, buffer); - fmt::format_to(output_iterator, " {:20s} handle: {:X} size: {} crc: {:8X} date: {}-{:02}-{:02} {:02}:{:02}:{:02}\n", - FS2OTTD(buffer), - (size_t)mod, - dfi.size, - dfi.crc32, - dfi.file_time.wYear, - dfi.file_time.wMonth, - dfi.file_time.wDay, - dfi.file_time.wHour, - dfi.file_time.wMinute, - dfi.file_time.wSecond - ); -} - -/* virtual */ void CrashLogWindows::LogModules(std::back_insert_iterator &output_iterator) const -{ - MakeCRCTable(); - - fmt::format_to(output_iterator, "Module information:\n"); - - HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId()); - if (proc != nullptr) { - HMODULE modules[100]; - DWORD needed; - BOOL res = EnumProcessModules(proc, modules, sizeof(modules), &needed); - CloseHandle(proc); - if (res) { - size_t count = std::min(needed / sizeof(HMODULE), lengthof(modules)); - - for (size_t i = 0; i != count; i++) PrintModuleInfo(output_iterator, modules[i]); - fmt::format_to(output_iterator, "\n"); - return; - } - } - PrintModuleInfo(output_iterator, nullptr); - fmt::format_to(output_iterator, "\n"); -} - /* virtual */ void CrashLogWindows::LogStacktrace(std::back_insert_iterator &output_iterator) const { fmt::format_to(output_iterator, "Stack trace:\n");