17
diff.c
17
diff.c
@ -3883,6 +3883,7 @@ static char *run_textconv(const char *pgm, struct diff_filespec *spec,
|
||||
const char **arg = argv;
|
||||
struct child_process child;
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
int err = 0;
|
||||
|
||||
temp = prepare_temp_file(spec->path, spec);
|
||||
*arg++ = pgm;
|
||||
@ -3893,16 +3894,20 @@ static char *run_textconv(const char *pgm, struct diff_filespec *spec,
|
||||
child.use_shell = 1;
|
||||
child.argv = argv;
|
||||
child.out = -1;
|
||||
if (start_command(&child) != 0 ||
|
||||
strbuf_read(&buf, child.out, 0) < 0 ||
|
||||
finish_command(&child) != 0) {
|
||||
close(child.out);
|
||||
strbuf_release(&buf);
|
||||
if (start_command(&child)) {
|
||||
remove_tempfile();
|
||||
error("error running textconv command '%s'", pgm);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (strbuf_read(&buf, child.out, 0) < 0)
|
||||
err = error("error reading from textconv command '%s'", pgm);
|
||||
close(child.out);
|
||||
|
||||
if (finish_command(&child) || err) {
|
||||
strbuf_release(&buf);
|
||||
remove_tempfile();
|
||||
return NULL;
|
||||
}
|
||||
remove_tempfile();
|
||||
|
||||
return strbuf_detach(&buf, outsize);
|
||||
|
Reference in New Issue
Block a user