start_command(), if .in/.out > 0, closes file descriptors, not the callers
authorJohannes Sixt <johannes.sixt@telecom.at>
Thu, 21 Feb 2008 22:42:56 +0000 (23:42 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sat, 23 Feb 2008 19:59:44 +0000 (11:59 -0800)
commitc20181e3a3e39f2c8874567c219e9edddb84393a
treecd00a4c57338a71f2b77a0c795b8fed0a5007ba5
parente72ae28895b22052b7ca2eef36c039ac62671f7d
start_command(), if .in/.out > 0, closes file descriptors, not the callers

Callers of start_command() can set the members .in and .out of struct
child_process to a value > 0 to specify that this descriptor is used as
the stdin or stdout of the child process.

Previously, if start_command() was successful, this descriptor was closed
upon return. Here we now make sure that the descriptor is also closed in
case of failures. All callers are updated not to close the file descriptor
themselves after start_command() was called.

Note that earlier run_gpg_verify() of git-verify-tag set .out = 1, which
worked because start_command() treated this as a special case, but now
this is incorrect because it closes the descriptor. The intent here is to
inherit stdout to the child, which is achieved by .out = 0.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-send-pack.c
builtin-verify-tag.c
bundle.c
run-command.c
run-command.h