diff options
author | Johannes Sixt <johannes.sixt@telecom.at> | 2007-10-19 21:48:05 +0200 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2007-10-21 01:30:42 -0400 |
commit | 7683b6e81fa0f1f55d4974d69fb87c7c7b6b394e (patch) | |
tree | 84ad5197c3affed0a06bb51c3dd1ae115bbde0ca | |
parent | t0021-conversion.sh: Test that the clean filter really cleans content. (diff) | |
download | tgif-7683b6e81fa0f1f55d4974d69fb87c7c7b6b394e.tar.xz |
Avoid a dup2(2) in apply_filter() - start_command() can do it for us.
When apply_filter() runs the external (clean or smudge) filter program, it
needs to pass the writable end of a pipe as its stdout. For this purpose,
it used to dup2(2) the file descriptor explicitly to stdout. Now we use
the facilities of start_command() to do it for us.
Furthermore, the path argument of a subordinate function, filter_buffer(),
was not used, so here we replace it to pass the fd instead.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rw-r--r-- | convert.c | 7 |
1 files changed, 3 insertions, 4 deletions
@@ -192,7 +192,7 @@ static int crlf_to_worktree(const char *path, const char *src, size_t len, return 1; } -static int filter_buffer(const char *path, const char *src, +static int filter_buffer(int fd, const char *src, unsigned long size, const char *cmd) { /* @@ -205,6 +205,7 @@ static int filter_buffer(const char *path, const char *src, memset(&child_process, 0, sizeof(child_process)); child_process.argv = argv; child_process.in = -1; + child_process.out = fd; if (start_command(&child_process)) return error("cannot fork to run external filter %s", cmd); @@ -254,10 +255,8 @@ static int apply_filter(const char *path, const char *src, size_t len, return 0; } if (!child_process.pid) { - dup2(pipe_feed[1], 1); close(pipe_feed[0]); - close(pipe_feed[1]); - exit(filter_buffer(path, src, len, cmd)); + exit(filter_buffer(pipe_feed[1], src, len, cmd)); } close(pipe_feed[1]); |