зеркало из https://github.com/microsoft/git.git
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:
Родитель
a0ae35ae2d
Коммит
7683b6e81f
|
@ -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]);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче