From 503398bd5f325447f7d801306222e5fc142cacae Mon Sep 17 00:00:00 2001 From: Demonstrandum Date: Wed, 5 Aug 2020 22:50:38 +0100 Subject: [PATCH] Redirect stdout to correct file. --- stagit.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/stagit.c b/stagit.c index ed6c932..9a8ccd0 100644 --- a/stagit.c +++ b/stagit.c @@ -397,15 +397,20 @@ writefooter(FILE *fp) int syntax_highlight(const char *filename, FILE *fp, const char *s, size_t len) { + // Copy STDOUT + int stdout_copy = dup(1); + // Redirect STDOUT + dup2(fileno(fp), 1); + // Ruby script for syntax highlighting. FILE *child = popen("./highlight", "w"); if (child == NULL) { printf("child is null: %s", strerror(errno)); exit(1); } - // Give filename: + // Give filename through STDIN: fprintf(child, "%s\n", filename); - // Give code to highlight: + // Give code to highlight through STDIN: int lc; size_t i; for (i = 0; *s && i < len; s++, i++) { @@ -413,12 +418,9 @@ syntax_highlight(const char *filename, FILE *fp, const char *s, size_t len) fprintf(child, "%c", *s); } - // Write returned HTML to the HTML file. - char c; - while ((c = fgetc(child)) != EOF) - fprintf(fp, "%c", c); - pclose(child); + // Give back STDOUT. + dup2(stdout_copy, 1); return lc; } -- 2.39.2