summaryrefslogtreecommitdiffhomepage
path: root/src/logic/pe_map_raw_image.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/logic/pe_map_raw_image.c')
-rw-r--r--src/logic/pe_map_raw_image.c24
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);
}