Skip to content

Commit

Permalink
Use start_command() to run content filters instead of explicit fork/e…
Browse files Browse the repository at this point in the history
…xec.

The previous code already used finish_command() to wait for the process
to terminate, but did not use start_command() to run it.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
  • Loading branch information
Johannes Sixt authored and Shawn O. Pearce committed Oct 21, 2007
1 parent f364cb8 commit dc1bfdc
Showing 1 changed file with 7 additions and 23 deletions.
30 changes: 7 additions & 23 deletions convert.c
Original file line number Diff line number Diff line change
Expand Up @@ -199,34 +199,18 @@ static int filter_buffer(const char *path, const char *src,
* Spawn cmd and feed the buffer contents through its stdin.
*/
struct child_process child_process;
int pipe_feed[2];
int write_err, status;
const char *argv[] = { "sh", "-c", cmd, NULL };

memset(&child_process, 0, sizeof(child_process));
child_process.argv = argv;
child_process.in = -1;

if (pipe(pipe_feed) < 0) {
error("cannot create pipe to run external filter %s", cmd);
return 1;
}

child_process.pid = fork();
if (child_process.pid < 0) {
error("cannot fork to run external filter %s", cmd);
close(pipe_feed[0]);
close(pipe_feed[1]);
return 1;
}
if (!child_process.pid) {
dup2(pipe_feed[0], 0);
close(pipe_feed[0]);
close(pipe_feed[1]);
execlp("sh", "sh", "-c", cmd, NULL);
return 1;
}
close(pipe_feed[0]);
if (start_command(&child_process))
return error("cannot fork to run external filter %s", cmd);

write_err = (write_in_full(pipe_feed[1], src, size) < 0);
if (close(pipe_feed[1]))
write_err = (write_in_full(child_process.in, src, size) < 0);
if (close(child_process.in))
write_err = 1;
if (write_err)
error("cannot feed the input to external filter %s", cmd);
Expand Down

0 comments on commit dc1bfdc

Please sign in to comment.