summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2015-12-06 08:28:32 -0500
committermidipix <writeonce@midipix.org>2016-11-10 23:35:31 -0500
commit76aabf2c240c67ede7734f544be94f64da2c55c5 (patch)
tree460af7b94992a3635b380e5cef0a5663c61a69a3 /src
parentd7ed3e2faf8e3bc1aeb1e7fed27cd8a1ff4b2290 (diff)
downloadperk-76aabf2c240c67ede7734f544be94f64da2c55c5.tar.bz2
perk-76aabf2c240c67ede7734f544be94f64da2c55c5.tar.xz
API redesign 6/10: pe_common_ctx: protect i/o members against direct modification.
Diffstat (limited to 'src')
-rw-r--r--src/driver/pe_driver_ctx.c23
-rw-r--r--src/driver/pe_unit_ctx.c4
-rw-r--r--src/internal/perk_impl.h2
-rw-r--r--src/internal/perk_output_impl.h4
-rw-r--r--src/perk.c8
5 files changed, 22 insertions, 19 deletions
diff --git a/src/driver/pe_driver_ctx.c b/src/driver/pe_driver_ctx.c
index 9f9dd88..e3e9cdb 100644
--- a/src/driver/pe_driver_ctx.c
+++ b/src/driver/pe_driver_ctx.c
@@ -105,6 +105,7 @@ static struct pe_driver_ctx_impl * pe_driver_ctx_alloc(struct argv_meta * meta,
ictx->ctx.cctx.outctx = &ictx->outctx;
ictx->ctx.cctx.lnkctx = &ictx->lnkctx;
ictx->ctx.cctx.srvctx = &ictx->srvctx;
+ ictx->ctx.cctx.ioctx = &ictx->ctx.ioctx;
for (entry=meta->entries,units=ictx->units; entry->fopt || entry->arg; entry++)
if (!entry->fopt)
@@ -205,14 +206,14 @@ int pe_get_driver_ctx(
ctx->cctx.drvflags = dflags;
ctx->cctx.fmtflags = fflags;
ctx->cctx.output = output;
- ctx->cctx.fdout = output ? fdout : -1;
+ ctx->ioctx.fdout = output ? fdout : -1;
- ctx->cctx.fdin = -1;
- ctx->cctx.fderr = -1;
- ctx->cctx.fdlog = -1;
- ctx->cctx.fdsrc = AT_FDCWD;
- ctx->cctx.fddst = AT_FDCWD;
- ctx->cctx.fdtmp = AT_FDCWD;
+ ctx->ioctx.fdin = -1;
+ ctx->ioctx.fderr = -1;
+ ctx->ioctx.fdlog = -1;
+ ctx->ioctx.fdsrc = AT_FDCWD;
+ ctx->ioctx.fddst = AT_FDCWD;
+ ctx->ioctx.fdtmp = AT_FDCWD;
ctx->ctx.cctx = &ctx->cctx;
@@ -222,11 +223,11 @@ int pe_get_driver_ctx(
static void pe_driver_close_fds(struct pe_common_ctx * cctx)
{
- if (cctx->status && cctx->output)
- unlinkat(cctx->fddst,cctx->output,0);
+ if (cctx->ioctx->status && cctx->output)
+ unlinkat(cctx->ioctx->fddst,cctx->output,0);
- if (cctx->fdout >= 0)
- close(cctx->fdout);
+ if (cctx->ioctx->fdout >= 0)
+ close(cctx->ioctx->fdout);
}
static void pe_free_driver_ctx_impl(struct pe_driver_ctx_alloc * ictx)
diff --git a/src/driver/pe_unit_ctx.c b/src/driver/pe_unit_ctx.c
index df5409b..40e88ab 100644
--- a/src/driver/pe_unit_ctx.c
+++ b/src/driver/pe_unit_ctx.c
@@ -33,7 +33,7 @@ int pe_get_unit_ctx(
? PROT_READ | PROT_WRITE
: PROT_READ;
- if (pe_map_raw_image(dctx->cctx->fdin,path,prot,&ctx->map))
+ if (pe_map_raw_image(dctx->cctx->ioctx->fdin,path,prot,&ctx->map))
return pe_free_unit_ctx_impl(ctx,-1);
if (pe_get_image_meta(&ctx->map,&ctx->meta))
@@ -43,7 +43,7 @@ int pe_get_unit_ctx(
sizeof(ctx->cctx));
ctx->path = ctx->path;
- ctx->cctx.prot = prot;
+ ctx->ioctx.prot = prot;
ctx->uctx.path = &ctx->path;
ctx->uctx.map = &ctx->map;
diff --git a/src/internal/perk_impl.h b/src/internal/perk_impl.h
index 77a64ae..7cfc590 100644
--- a/src/internal/perk_impl.h
+++ b/src/internal/perk_impl.h
@@ -9,6 +9,7 @@
#include <perk/perk_meta.h>
struct pe_driver_ctx_impl {
+ struct pe_io_ctx ioctx;
struct pe_common_ctx cctx;
struct pe_driver_ctx ctx;
};
@@ -17,6 +18,7 @@ struct pe_unit_ctx_impl {
const char * path;
struct pe_raw_image map;
struct pe_image_meta * meta;
+ struct pe_io_ctx ioctx;
struct pe_common_ctx cctx;
struct pe_unit_ctx uctx;
};
diff --git a/src/internal/perk_output_impl.h b/src/internal/perk_output_impl.h
index d6f328a..62f0322 100644
--- a/src/internal/perk_output_impl.h
+++ b/src/internal/perk_output_impl.h
@@ -14,10 +14,10 @@ static inline FILE * pe_output_prolog(
return fout;
else if (!cctx)
return 0;
- else if (cctx->fdout < 0)
+ else if (cctx->ioctx->fdout < 0)
return stdout;
- if ((fdout = dup(cctx->fdout)) < 0)
+ if ((fdout = dup(cctx->ioctx->fdout)) < 0)
return 0;
if ((*ftmp = fdopen(fdout,"a")))
diff --git a/src/perk.c b/src/perk.c
index 85a601f..993478c 100644
--- a/src/perk.c
+++ b/src/perk.c
@@ -15,9 +15,9 @@ static ssize_t perk_version(struct pe_driver_ctx * dctx)
char buf[512];
size_t len;
- if (dctx->cctx->fdout >= 0) {
+ if (dctx->cctx->ioctx->fdout >= 0) {
len = sprintf(buf,vermsg,dctx->program,PERK_GIT_VERSION);
- return write(dctx->cctx->fdout,buf,len);
+ return write(dctx->cctx->ioctx->fdout,buf,len);
} else
return fprintf(stdout,vermsg,dctx->program,PERK_GIT_VERSION);
}
@@ -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->ioctx->fdout >= 0)
+ return write(uctx->cctx->ioctx->fdout,"\n",1);
else
return fputc('\n',stdout);
} else