summaryrefslogtreecommitdiffhomepage
path: root/src/perk.c
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2015-12-04 22:56:15 -0500
committermidipix <writeonce@midipix.org>2016-11-10 23:35:30 -0500
commitd7ed3e2faf8e3bc1aeb1e7fed27cd8a1ff4b2290 (patch)
tree0fa55ad7eccd35b3f7cbb3194045d5bcc9f83032 /src/perk.c
parentc61328dfece5c7346aabd4bc0027a9eb8126dd08 (diff)
downloadperk-d7ed3e2faf8e3bc1aeb1e7fed27cd8a1ff4b2290.tar.bz2
perk-d7ed3e2faf8e3bc1aeb1e7fed27cd8a1ff4b2290.tar.xz
API redesign 5/10: pe_unit_ctx: protect members against direct modification.
Diffstat (limited to 'src/perk.c')
-rw-r--r--src/perk.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/perk.c b/src/perk.c
index c057fc2..85a601f 100644
--- a/src/perk.c
+++ b/src/perk.c
@@ -27,8 +27,8 @@ static ssize_t perk_paragraph_break(struct pe_unit_ctx * uctx, int * fpara)
if (*fpara) {
*fpara = 0;
- if (uctx->cctx.fdout >= 0)
- return write(uctx->cctx.fdout,"\n",1);
+ if (uctx->cctx->fdout >= 0)
+ return write(uctx->cctx->fdout,"\n",1);
else
return fputc('\n',stdout);
} else
@@ -38,24 +38,26 @@ static ssize_t perk_paragraph_break(struct pe_unit_ctx * uctx, int * fpara)
static void perk_perform_unit_actions(struct pe_unit_ctx * uctx)
{
int fpara = 0;
- uint64_t flags = uctx->cctx.fmtflags;
+ uint64_t flags = uctx->cctx->fmtflags;
if (flags & PERK_OUTPUT_EXPORT_SYMS) {
- uctx->cctx.status = pe_output_export_symbols(uctx->meta,&uctx->cctx,0);
+ uctx->status = pe_output_export_symbols(uctx->meta,uctx->cctx,0);
+ uctx->nerrors += !!uctx->status;
fpara += uctx->meta->summary.num_of_export_syms;
}
if ((flags & PERK_OUTPUT_IMPORT_LIBS) || (flags & PERK_OUTPUT_IMPORT_SYMS)) {
perk_paragraph_break(uctx,&fpara);
- uctx->cctx.status = pe_output_import_libraries(uctx->meta,&uctx->cctx,0);
+ uctx->status = pe_output_import_libraries(uctx->meta,uctx->cctx,0);
+ uctx->nerrors += !!uctx->status;
fpara += (uctx->meta->summary.num_of_implibs > 0);
}
}
-static int perk_exit(struct pe_driver_ctx * dctx, int status)
+static int perk_exit(struct pe_driver_ctx * dctx, int nerrors)
{
pe_free_driver_ctx(dctx);
- return (status < 0) ? 2 : status;
+ return nerrors ? 2 : 0;
}
static int perk_main(int argc, const char ** argv, const char ** envp)
@@ -75,7 +77,7 @@ static int perk_main(int argc, const char ** argv, const char ** envp)
for (unit=dctx->units; *unit; unit++) {
if (!(pe_get_unit_ctx(dctx,*unit,&uctx))) {
perk_perform_unit_actions(uctx);
- ret = uctx->cctx.status ? uctx->cctx.status : ret;
+ ret += uctx->nerrors;
pe_free_unit_ctx(uctx);
}
}