From a85d3ea1cc6fc5f9e011a1b29e93c776da108a0b Mon Sep 17 00:00:00 2001 From: midipix Date: Sat, 21 Jul 2018 20:32:45 -0400 Subject: driver, library interfaces: support alternate fd's for input/output/error/log. --- src/driver/pe_amain.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/driver/pe_amain.c') diff --git a/src/driver/pe_amain.c b/src/driver/pe_amain.c index 8fb1788..4ea62ef 100644 --- a/src/driver/pe_amain.c +++ b/src/driver/pe_amain.c @@ -9,6 +9,7 @@ #include #include #include "perk_driver_impl.h" +#include "perk_dprintf_impl.h" #ifndef PERK_DRIVER_FLAGS #define PERK_DRIVER_FLAGS PERK_DRIVER_VERBOSITY_ERRORS \ @@ -31,15 +32,16 @@ static const char * const pe_ver_plain[6] = { "","" }; -static ssize_t pe_version(struct pe_driver_ctx * dctx) +static ssize_t pe_version(int fdout, struct pe_driver_ctx * dctx) { const struct pe_source_version * verinfo; const char * const * verclr; verinfo = pe_source_version(); - verclr = isatty(STDOUT_FILENO) ? pe_ver_color : pe_ver_plain; + verclr = isatty(fdout) ? pe_ver_color : pe_ver_plain; - return fprintf(stdout,vermsg, + return pe_dprintf( + fdout,vermsg, verclr[0],dctx->program,verclr[1], verclr[2],verinfo->major,verinfo->minor, verinfo->revision,verclr[3], @@ -81,20 +83,25 @@ static int pe_exit(struct pe_driver_ctx * dctx, int ret) return ret; } -int pe_main(int argc, char ** argv, char ** envp) +int pe_main(int argc, char ** argv, char ** envp, const struct pe_fd_ctx * fdctx) { int ret; + int fdout; + uint64_t flags; struct pe_driver_ctx * dctx; struct pe_unit_ctx * uctx; const char ** unit; - if ((ret = pe_get_driver_ctx(argv,envp,PERK_DRIVER_FLAGS,&dctx))) + flags = PERK_DRIVER_FLAGS; + fdout = fdctx ? fdctx->fdout : STDOUT_FILENO; + + if ((ret = pe_get_driver_ctx(argv,envp,flags,fdctx,&dctx))) return (ret == PERK_USAGE) ? !--argc : PERK_ERROR; if (dctx->cctx->drvflags & PERK_DRIVER_VERSION) - if ((pe_version(dctx)) < 0) + if ((pe_version(fdout,dctx)) < 0) return pe_exit(dctx,PERK_ERROR); for (unit=dctx->units; *unit; unit++) { -- cgit v1.2.3