summaryrefslogtreecommitdiff
path: root/src/internal
diff options
context:
space:
mode:
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;
+}