From ffb4956f4a7e8bfb784b0b3c044025810e7536f2 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Sat, 1 Jun 2002 02:47:58 +0000 Subject: [PATCH] Added fallback read() for missing/failing mmap(). --- tools/winedump/pe.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/tools/winedump/pe.c b/tools/winedump/pe.c index d5611a9f4e2..14a71ff4752 100644 --- a/tools/winedump/pe.c +++ b/tools/winedump/pe.c @@ -822,8 +822,13 @@ int pe_analysis(const char* name, void (*fn)(void), enum FileSig wanted_sig) if (fstat(fd, &s) < 0) fatal("Can't get size"); total_len = s.st_size; - base = mmap(NULL, total_len, PROT_READ, MAP_PRIVATE, fd, 0); - if (base == (void*)-1) fatal("Can't map file"); +#ifdef HAVE_MMAP + if ((base = mmap(NULL, total_len, PROT_READ, MAP_PRIVATE, fd, 0)) == (void *)-1) +#endif + { + if (!(base = malloc( total_len ))) fatal( "Out of memory" ); + if (read( fd, base, total_len ) != total_len) fatal( "Cannot read file" ); + } effective_sig = check_headers(); @@ -856,7 +861,12 @@ int pe_analysis(const char* name, void (*fn)(void), enum FileSig wanted_sig) } if (ret) printf("Done dumping %s\n", name); - munmap(base, total_len); +#ifdef HAVE_MMAP + if (munmap(base, total_len) == -1) +#endif + { + free( base ); + } close(fd); return ret;