X-Git-Url: https://git.armaanb.net/?p=stagit.git;a=blobdiff_plain;f=stagit.c;h=9a8ccd0245b1e55af35fad1dd86f3477ec779e22;hp=ed6c9323c37204365b6d6c2d724b55f424e68e48;hb=503398bd5f325447f7d801306222e5fc142cacae;hpb=2c756c40777d33d10e27d514eb9c7bc52206a894 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; }