From adecdb1d01487af16f5f708ae92a05ba4707187e Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 24 Mar 2020 01:54:19 +0100 Subject: [PATCH] dbghelp: Don't use elf_fetch_file_info and macho_fetch_file_info in module_find_cb. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- dlls/dbghelp/path.c | 45 ++++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/dlls/dbghelp/path.c b/dlls/dbghelp/path.c index 15e5d344e75..55571e6effb 100644 --- a/dlls/dbghelp/path.c +++ b/dlls/dbghelp/path.c @@ -24,6 +24,7 @@ #include #include "dbghelp_private.h" +#include "image_private.h" #include "winnls.h" #include "winternl.h" #include "wine/debug.h" @@ -523,34 +524,28 @@ static BOOL CALLBACK module_find_cb(PCWSTR buffer, PVOID user) if (timestamp == mf->dw1 && size == mf->dw2) matched++; } break; - case DMT_ELF: - if (elf_fetch_file_info(buffer, 0, &size, &checksum)) - { - matched++; - if (checksum == mf->dw1) matched++; - else - WARN("Found %s, but wrong checksums: %08x %08x\n", - debugstr_w(buffer), checksum, mf->dw1); - } - else - { - WARN("Couldn't read %s\n", debugstr_w(buffer)); - return FALSE; - } - break; case DMT_MACHO: - if (macho_fetch_file_info(NULL, buffer, 0, 0, &size, &checksum)) + case DMT_ELF: { - matched++; - if (checksum == mf->dw1) matched++; + HANDLE file; + + file = CreateFileW(buffer, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (file == INVALID_HANDLE_VALUE) break; + + checksum = calc_crc32(file); + if (checksum == mf->dw1) matched += 2; else - WARN("Found %s, but wrong checksums: %08x %08x\n", - debugstr_w(buffer), checksum, mf->dw1); - } - else - { - WARN("Couldn't read %s\n", debugstr_w(buffer)); - return FALSE; + { + struct image_file_map fmap; + WARN("Found %s, but wrong checksums: %08x %08x\n", debugstr_w(buffer), checksum, mf->dw1); + if (elf_map_handle(file, &fmap)) /* FIXME: validate macho files */ + { + image_unmap_file(&fmap); + matched++; + } + } + CloseHandle(file); } break; case DMT_PDB: