diff options
Diffstat (limited to 'src/logic/pe_map_raw_image.c')
-rw-r--r-- | src/logic/pe_map_raw_image.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/src/logic/pe_map_raw_image.c b/src/logic/pe_map_raw_image.c index caf14b9..5792f78 100644 --- a/src/logic/pe_map_raw_image.c +++ b/src/logic/pe_map_raw_image.c @@ -1,8 +1,7 @@ #include <stdint.h> +#include <stdbool.h> #include <unistd.h> #include <fcntl.h> -#include <limits.h> -#include <errno.h> #include <sys/mman.h> #include <sys/types.h> #include <sys/stat.h> @@ -11,30 +10,25 @@ int pe_map_raw_image (int fd, const char * fname, int prot, struct pe_raw_image * map) { - struct stat stat; - int nfd, ret; + struct stat stat; + bool fnew; - if ((nfd = !fd)) + if (fnew = (fd < 0)) fd = open(fname,O_RDONLY | O_CLOEXEC); if ((fd < 0) || (fstat(fd,&stat) < 0)) - return errno; + return -1; map->size = stat.st_size; map->addr = mmap(0,map->size,prot,MAP_PRIVATE,fd,0); - if (map->addr == MAP_FAILED) { - map->addr = 0; - ret = PERK_MAP_ERROR; - } else - ret = 0; + if (fnew) + close(fd); - if (nfd) close(fd); - - return ret; + return (map->addr == MAP_FAILED) ? -1 : 0; } int pe_unmap_raw_image (struct pe_raw_image * map) { - return munmap(map->addr, map->size); + return munmap(map->addr,map->size); } |