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>
This commit is contained in:
Johannes Sixt 2007-10-19 21:48:05 +02:00 коммит произвёл Shawn O. Pearce
Родитель a0ae35ae2d
Коммит 7683b6e81f
1 изменённых файлов: 3 добавлений и 4 удалений

Просмотреть файл

@ -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]);