Eric Pouech : dbghelp: Merge the A/W of elf_map_file into a single one.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Feb 22 05:56:50 CST 2007


Module: wine
Branch: master
Commit: 8d3167cc9af378f48a5d6198b466d73f9695cd0b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8d3167cc9af378f48a5d6198b466d73f9695cd0b

Author: Eric Pouech <eric.pouech at wanadoo.fr>
Date:   Wed Feb 21 21:56:42 2007 +0100

dbghelp: Merge the A/W of elf_map_file into a single one.

---

 dlls/dbghelp/elf_module.c |   33 ++++++++++++++-------------------
 1 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/dlls/dbghelp/elf_module.c b/dlls/dbghelp/elf_module.c
index 092dbc9..7758199 100644
--- a/dlls/dbghelp/elf_module.c
+++ b/dlls/dbghelp/elf_module.c
@@ -192,33 +192,39 @@ static inline unsigned elf_get_map_size(struct elf_file_map* fmap, int sidx)
  *
  * Maps an ELF file into memory (and checks it's a real ELF file)
  */
-static BOOL elf_map_fileA(const char* filename, struct elf_file_map* fmap)
+static BOOL elf_map_file(const WCHAR* filenameW, struct elf_file_map* fmap)
 {
     static const BYTE   elf_signature[4] = { ELFMAG0, ELFMAG1, ELFMAG2, ELFMAG3 };
     struct stat	        statbuf;
     int                 i;
     Elf32_Phdr          phdr;
     unsigned            tmp, page_mask = getpagesize() - 1;
+    char*               filename;
+    unsigned            len;
+    BOOL                ret = FALSE;
 
+    len = WideCharToMultiByte(CP_UNIXCP, 0, filenameW, -1, NULL, 0, NULL, NULL);
+    if (!(filename = HeapAlloc(GetProcessHeap(), 0, len))) return FALSE;
+    WideCharToMultiByte(CP_UNIXCP, 0, filenameW, -1, filename, len, NULL, NULL);
 
     fmap->fd = -1;
     fmap->with_crc = 0;
 
     /* check that the file exists, and that the module hasn't been loaded yet */
-    if (stat(filename, &statbuf) == -1 || S_ISDIR(statbuf.st_mode)) return FALSE;
+    if (stat(filename, &statbuf) == -1 || S_ISDIR(statbuf.st_mode)) goto done;
 
     /* Now open the file, so that we can mmap() it. */
-    if ((fmap->fd = open(filename, O_RDONLY)) == -1) return FALSE;
+    if ((fmap->fd = open(filename, O_RDONLY)) == -1) goto done;
 
     if (read(fmap->fd, &fmap->elfhdr, sizeof(fmap->elfhdr)) != sizeof(fmap->elfhdr))
-        return FALSE;
+        goto done;
     /* and check for an ELF header */
     if (memcmp(fmap->elfhdr.e_ident, 
-               elf_signature, sizeof(elf_signature))) return FALSE;
+               elf_signature, sizeof(elf_signature))) goto done;
 
     fmap->sect = HeapAlloc(GetProcessHeap(), 0,
                            fmap->elfhdr.e_shnum * sizeof(fmap->sect[0]));
-    if (!fmap->sect) return FALSE;
+    if (!fmap->sect) goto done;
 
     lseek(fmap->fd, fmap->elfhdr.e_shoff, SEEK_SET);
     for (i = 0; i < fmap->elfhdr.e_shnum; i++)
@@ -245,19 +251,8 @@ static BOOL elf_map_fileA(const char* filename, struct elf_file_map* fmap)
      * otherwise, all addresses are zero based and start has no effect
      */
     fmap->elf_size -= fmap->elf_start;
-    return TRUE;
-}
-
-static BOOL elf_map_file(const WCHAR* filenameW, struct elf_file_map* fmap)
-{
-    char*       filename;
-    unsigned    len;
-    BOOL        ret;
-
-    len = WideCharToMultiByte(CP_UNIXCP, 0, filenameW, -1, NULL, 0, NULL, NULL);
-    if (!(filename = HeapAlloc(GetProcessHeap(), 0, len))) return FALSE;
-    WideCharToMultiByte(CP_UNIXCP, 0, filenameW, -1, filename, len, NULL, NULL);
-    ret = elf_map_fileA(filename, fmap);
+    ret = TRUE;
+done:
     HeapFree(GetProcessHeap(), 0, filename);
     return ret;
 }




More information about the wine-cvs mailing list