summaryrefslogtreecommitdiffhomepage
path: root/src/internal
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2015-11-23 15:35:04 -0500
committermidipix <writeonce@midipix.org>2016-11-10 23:35:27 -0500
commit7cd8bca5bbc93ed1352e02089d03c34a23609444 (patch)
tree3edea4ea54e62f9730b4c025950fffad5ad9393e /src/internal
parent8fd1f503fdfc593aed4b296cfa7024a4a09d540c (diff)
downloadperk-7cd8bca5bbc93ed1352e02089d03c34a23609444.tar.bz2
perk-7cd8bca5bbc93ed1352e02089d03c34a23609444.tar.xz
pretty printer: use common prolog/epilog for output stream selection.
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/perk_output.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/internal/perk_output.h b/src/internal/perk_output.h
new file mode 100644
index 0000000..d60d78d
--- /dev/null
+++ b/src/internal/perk_output.h
@@ -0,0 +1,31 @@
+#include <perk/perk.h>
+
+static inline FILE * pe_output_prolog(const struct pe_common_ctx * cctx, FILE * fout, FILE ** ftmp)
+{
+ int fdout;
+
+ *ftmp = (FILE *)0;
+
+ if (fout)
+ return fout;
+ else if (!cctx)
+ return 0;
+ else if (cctx->fdout < 0)
+ return stdout;
+
+ if ((fdout = dup(cctx->fdout)) < 0)
+ return 0;
+
+ if ((*ftmp = fdopen(fdout,"a")))
+ return *ftmp;
+
+ close(fdout);
+ return 0;
+}
+
+static inline int pe_output_epilog(int ret, FILE * f)
+{
+ if (f)
+ fclose(f);
+ return ret;
+}