diff options
author | midipix <writeonce@midipix.org> | 2018-07-30 11:12:23 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2018-08-03 21:13:29 -0400 |
commit | f1dbc60ab6cc4bc2422441c9028c7edc56684b82 (patch) | |
tree | 5a87872c2e7f8882355680dc56bda3d6d88a8b84 /src/driver/mdso_amain.c | |
parent | 69198475911da5e1f543178bc0a801aac5ff2bc0 (diff) | |
download | mdso-f1dbc60ab6cc4bc2422441c9028c7edc56684b82.tar.bz2 mdso-f1dbc60ab6cc4bc2422441c9028c7edc56684b82.tar.xz |
driver, library interfaces: support alternate fd's for input/output/error/log.
Diffstat (limited to 'src/driver/mdso_amain.c')
-rw-r--r-- | src/driver/mdso_amain.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/driver/mdso_amain.c b/src/driver/mdso_amain.c index 70fb44a..02daefb 100644 --- a/src/driver/mdso_amain.c +++ b/src/driver/mdso_amain.c @@ -6,9 +6,11 @@ #include <stdio.h> #include <unistd.h> + #include <mdso/mdso.h> #include <mdso/mdso_output.h> #include "mdso_driver_impl.h" +#include "mdso_dprintf_impl.h" #ifndef MDSO_DRIVER_FLAGS #define MDSO_DRIVER_FLAGS MDSO_DRIVER_VERBOSITY_ERRORS \ @@ -31,15 +33,16 @@ static const char * const mdso_ver_plain[6] = { "","" }; -static ssize_t mdso_version(struct mdso_driver_ctx * dctx) +static ssize_t mdso_version(int fdout, struct mdso_driver_ctx * dctx) { const struct mdso_source_version * verinfo; const char * const * verclr; verinfo = mdso_source_version(); - verclr = isatty(STDOUT_FILENO) ? mdso_ver_color : mdso_ver_plain; + verclr = isatty(fdout) ? mdso_ver_color : mdso_ver_plain; - return fprintf(stdout,vermsg, + return mdso_dprintf( + fdout,vermsg, verclr[0],dctx->program,verclr[1], verclr[2],verinfo->major,verinfo->minor, verinfo->revision,verclr[3], @@ -62,20 +65,25 @@ static int mdso_exit(struct mdso_driver_ctx * dctx, int ret) return ret; } -int mdso_main(int argc, char ** argv, char ** envp) +int mdso_main(int argc, char ** argv, char ** envp, const struct mdso_fd_ctx * fdctx) { int ret; + int fdout; + uint64_t flags; struct mdso_driver_ctx * dctx; struct mdso_unit_ctx * uctx; const char ** unit; - if ((ret = mdso_get_driver_ctx(argv,envp,MDSO_DRIVER_FLAGS,&dctx))) + flags = MDSO_DRIVER_FLAGS; + fdout = fdctx ? fdctx->fdout : STDOUT_FILENO; + + if ((ret = mdso_get_driver_ctx(argv,envp,flags,fdctx,&dctx))) return (ret == MDSO_USAGE) ? !--argc : MDSO_ERROR; if (dctx->cctx->drvflags & MDSO_DRIVER_VERSION) - if ((mdso_version(dctx)) < 0) + if ((mdso_version(fdout,dctx)) < 0) return mdso_exit(dctx,MDSO_ERROR); if (dctx->cctx->implib) |