From abf92311681c10ed589ac05f0f2b451e01fbc63e Mon Sep 17 00:00:00 2001 From: midipix Date: Sat, 4 Aug 2018 12:37:44 -0400 Subject: driver, library interfaces: support alternate fd's for input/output/error/log. --- src/driver/amgc_amain.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/driver/amgc_amain.c') diff --git a/src/driver/amgc_amain.c b/src/driver/amgc_amain.c index d86cc96..096b960 100644 --- a/src/driver/amgc_amain.c +++ b/src/driver/amgc_amain.c @@ -8,6 +8,7 @@ #include #include #include "apimagic_driver_impl.h" +#include "apimagic_dprintf_impl.h" #ifndef AMGC_DRIVER_FLAGS #define AMGC_DRIVER_FLAGS AMGC_DRIVER_VERBOSITY_ERRORS \ @@ -30,15 +31,16 @@ static const char * const amgc_ver_plain[6] = { "","" }; -static ssize_t amgc_version(struct amgc_driver_ctx * dctx) +static ssize_t amgc_version(struct amgc_driver_ctx * dctx, int fdout) { const struct amgc_source_version * verinfo; const char * const * verclr; verinfo = amgc_source_version(); - verclr = isatty(STDOUT_FILENO) ? amgc_ver_color : amgc_ver_plain; + verclr = isatty(fdout) ? amgc_ver_color : amgc_ver_plain; - return fprintf(stdout,vermsg, + return amgc_dprintf( + fdout,vermsg, verclr[0],dctx->program,verclr[1], verclr[2],verinfo->major,verinfo->minor, verinfo->revision,verclr[3], @@ -60,20 +62,25 @@ static int amgc_exit(struct amgc_driver_ctx * dctx, int ret) return ret; } -int amgc_main(int argc, char ** argv, char ** envp) +int amgc_main(int argc, char ** argv, char ** envp, const struct amgc_fd_ctx * fdctx) { int ret; + int fdout; + uint64_t flags; struct amgc_driver_ctx * dctx; struct amgc_unit_ctx * uctx; const char ** unit; - if ((ret = amgc_get_driver_ctx(argv,envp,AMGC_DRIVER_FLAGS,&dctx))) + flags = AMGC_DRIVER_FLAGS; + fdout = fdctx ? fdctx->fdout : STDOUT_FILENO; + + if ((ret = amgc_get_driver_ctx(argv,envp,flags,fdctx,&dctx))) return (ret == AMGC_USAGE) ? !--argc : AMGC_ERROR; if (dctx->cctx->drvflags & AMGC_DRIVER_VERSION) - if ((amgc_version(dctx)) < 0) + if ((amgc_version(dctx,fdout)) < 0) return amgc_exit(dctx,AMGC_ERROR); for (unit=dctx->units; *unit && !dctx->errv[0]; unit++) { -- cgit v1.2.3