summaryrefslogtreecommitdiffhomepage
path: root/src/driver/mdso_amain.c
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2018-07-30 11:12:23 +0000
committermidipix <writeonce@midipix.org>2018-08-03 21:13:29 -0400
commitf1dbc60ab6cc4bc2422441c9028c7edc56684b82 (patch)
tree5a87872c2e7f8882355680dc56bda3d6d88a8b84 /src/driver/mdso_amain.c
parent69198475911da5e1f543178bc0a801aac5ff2bc0 (diff)
downloadmdso-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.c20
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)