Merge branch 'bw/forking-and-threading' into maint
The "run-command" API implementation has been made more robust against dead-locking in a threaded environment. * bw/forking-and-threading: usage.c: drop set_error_handle() run-command: restrict PATH search to executable files run-command: expose is_executable function run-command: block signals between fork and execve run-command: add note about forking and threading run-command: handle dup2 and close errors in child run-command: eliminate calls to error handling functions in child run-command: don't die in child when duping /dev/null run-command: prepare child environment before forking string-list: add string_list_remove function run-command: use the async-signal-safe execv instead of execvp run-command: prepare command before forking t0061: run_command executes scripts without a #! line t5550: use write_script to generate post-update hook
This commit is contained in:
10
usage.c
10
usage.c
@ -6,12 +6,9 @@
|
||||
#include "git-compat-util.h"
|
||||
#include "cache.h"
|
||||
|
||||
static FILE *error_handle;
|
||||
|
||||
void vreportf(const char *prefix, const char *err, va_list params)
|
||||
{
|
||||
char msg[4096];
|
||||
FILE *fh = error_handle ? error_handle : stderr;
|
||||
char *p;
|
||||
|
||||
vsnprintf(msg, sizeof(msg), err, params);
|
||||
@ -19,7 +16,7 @@ void vreportf(const char *prefix, const char *err, va_list params)
|
||||
if (iscntrl(*p) && *p != '\t' && *p != '\n')
|
||||
*p = '?';
|
||||
}
|
||||
fprintf(fh, "%s%s\n", prefix, msg);
|
||||
fprintf(stderr, "%s%s\n", prefix, msg);
|
||||
}
|
||||
|
||||
static NORETURN void usage_builtin(const char *err, va_list params)
|
||||
@ -88,11 +85,6 @@ void set_die_is_recursing_routine(int (*routine)(void))
|
||||
die_is_recursing = routine;
|
||||
}
|
||||
|
||||
void set_error_handle(FILE *fh)
|
||||
{
|
||||
error_handle = fh;
|
||||
}
|
||||
|
||||
void NORETURN usagef(const char *err, ...)
|
||||
{
|
||||
va_list params;
|
||||
|
Reference in New Issue
Block a user