diff options
author | midipix <writeonce@midipix.org> | 2015-11-23 15:35:04 -0500 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2016-11-10 23:35:27 -0500 |
commit | 7cd8bca5bbc93ed1352e02089d03c34a23609444 (patch) | |
tree | 3edea4ea54e62f9730b4c025950fffad5ad9393e /src/internal | |
parent | 8fd1f503fdfc593aed4b296cfa7024a4a09d540c (diff) | |
download | perk-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.h | 31 |
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; +} |