From fa22b4823aab053f0500b117527fa910db70277a Mon Sep 17 00:00:00 2001 From: midipix Date: Nov 11 2016 04:35:26 +0000 Subject: driver integration 6/9: image map & meta logic: API changes (fd,free,ret). --- 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 #include #include -#include #include #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; isummary.num_of_implibs; i++) + free(meta->idata[i].items); - for (i=0; isummary.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 +#include #include #include -#include -#include #include #include #include @@ -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); }