summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2015-11-22 14:13:56 -0500
committermidipix <writeonce@midipix.org>2016-11-10 23:35:26 -0500
commitfa22b4823aab053f0500b117527fa910db70277a (patch)
tree91433321cf15a053b456936dcbd351ff690f8653
parent8f16136058b89e3f1f4c0fad9cad21fe26978483 (diff)
downloadperk-fa22b4823aab053f0500b117527fa910db70277a.tar.bz2
perk-fa22b4823aab053f0500b117527fa910db70277a.tar.xz
driver integration 6/9: image map & meta logic: API changes (fd,free,ret).
-rw-r--r--include/perk/perk.h6
-rw-r--r--src/logic/pe_get_image_meta.c23
-rw-r--r--src/logic/pe_map_raw_image.c24
3 files changed, 22 insertions, 31 deletions
diff --git a/include/perk/perk.h b/include/perk/perk.h
index 22f7bd5..f05ae89 100644
--- a/include/perk/perk.h
+++ b/include/perk/perk.h
@@ -151,10 +151,10 @@ struct pe_unit_ctx {
/* driver api */
perk_api int pe_get_driver_ctx (const char ** argv, const char ** envp, uint32_t flags, struct pe_driver_ctx **);
-perk_api int pe_free_driver_ctx (struct pe_driver_ctx *);
+perk_api void pe_free_driver_ctx (struct pe_driver_ctx *);
perk_api int pe_get_unit_ctx (struct pe_driver_ctx *, const char * name, struct pe_unit_ctx **);
-perk_api int pe_free_unit_ctx (struct pe_unit_ctx *);
+perk_api void pe_free_unit_ctx (struct pe_unit_ctx *);
/* utility api */
perk_api int pe_output_export_symbols (const struct pe_image_meta *, const struct pe_common_ctx *, FILE *);
@@ -164,7 +164,7 @@ perk_api int pe_map_raw_image (int fd, const char * name, int prot, struct pe_r
perk_api int pe_unmap_raw_image (struct pe_raw_image *);
perk_api int pe_get_image_meta (const struct pe_raw_image *, struct pe_image_meta **);
-perk_api int pe_free_image_meta (struct pe_image_meta *);
+perk_api void pe_free_image_meta (struct pe_image_meta *);
perk_api int pe_get_named_section_index (const struct pe_image_meta *, const char * name);
perk_api int pe_get_block_section_index (const struct pe_image_meta *, const struct pe_block *);
diff --git a/src/logic/pe_get_image_meta.c b/src/logic/pe_get_image_meta.c
index 350abe3..540ac87 100644
--- a/src/logic/pe_get_image_meta.c
+++ b/src/logic/pe_get_image_meta.c
@@ -2,7 +2,6 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
-#include <errno.h>
#include <perk/perk.h>
#include "perk_impl.h"
@@ -11,21 +10,19 @@ static int pe_free_image_meta_impl (struct pe_image_meta * meta, int status)
{
unsigned i;
- if (!meta) return 0;
+ if (meta) {
+ for (i=0; i<meta->summary.num_of_implibs; i++)
+ free(meta->idata[i].items);
- for (i=0; i<meta->summary.num_of_implibs; i++)
- free(meta->idata[i].items);
-
- free(meta->idata);
- free(meta->sectbl);
- free(meta);
-
- return status;
+ free(meta->idata);
+ free(meta->sectbl);
+ free(meta);
+ }
}
-int pe_free_image_meta (struct pe_image_meta * meta)
+void pe_free_image_meta (struct pe_image_meta * meta)
{
- return pe_free_image_meta_impl(meta,0);
+ pe_free_image_meta_impl(meta,0);
}
int pe_get_named_section_index (const struct pe_image_meta * m, const char * name)
@@ -60,7 +57,7 @@ int pe_get_image_meta (const struct pe_raw_image * image, struct pe_image_meta *
char * base = image->addr;
if (!(m = calloc(1,sizeof(*m))))
- return errno;
+ return -1;
m->ados = (struct pe_image_dos_hdr *)base;
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);
}