diff options
Diffstat (limited to 'common-main.c')
-rw-r--r-- | common-main.c | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/common-main.c b/common-main.c index 71e21dd..033778b 100644 --- a/common-main.c +++ b/common-main.c @@ -1,6 +1,11 @@ -#include "cache.h" +#include "git-compat-util.h" #include "exec-cmd.h" +#include "gettext.h" #include "attr.h" +#include "repository.h" +#include "setup.h" +#include "strbuf.h" +#include "trace2.h" /* * Many parts of Git have subprograms communicate via pipe, expect the @@ -26,6 +31,7 @@ static void restore_sigpipe_to_default(void) int main(int argc, const char **argv) { int result; + struct strbuf tmp = STRBUF_INIT; trace2_initialize_clock(); @@ -39,6 +45,7 @@ int main(int argc, const char **argv) git_resolve_executable_dir(argv[0]); + setlocale(LC_CTYPE, ""); git_setup_gettext(); initialize_the_repository(); @@ -49,9 +56,35 @@ int main(int argc, const char **argv) trace2_cmd_start(argv); trace2_collect_process_info(TRACE2_PROCESS_INFO_STARTUP); + if (!strbuf_getcwd(&tmp)) + tmp_original_cwd = strbuf_detach(&tmp, NULL); + result = cmd_main(argc, argv); - trace2_cmd_exit(result); + /* Not exit(3), but a wrapper calling our common_exit() */ + exit(result); +} + +static void check_bug_if_BUG(void) +{ + if (!bug_called_must_BUG) + return; + BUG("on exit(): had bug() call(s) in this process without explicit BUG_if_bug()"); +} + +/* We wrap exit() to call common_exit() in git-compat-util.h */ +int common_exit(const char *file, int line, int code) +{ + /* + * For non-POSIX systems: Take the lowest 8 bits of the "code" + * to e.g. turn -1 into 255. On a POSIX system this is + * redundant, see exit(3) and wait(2), but as it doesn't harm + * anything there we don't need to guard this with an "ifdef". + */ + code &= 0xff; + + check_bug_if_BUG(); + trace2_cmd_exit_fl(file, line, code); - return result; + return code; } |