]> git.ipfire.org Git - thirdparty/git.git/commitdiff
usage.c API users: use die_message() for "fatal :" + exit 128
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Tue, 7 Dec 2021 18:26:30 +0000 (19:26 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 7 Dec 2021 21:25:15 +0000 (13:25 -0800)
Change code that printed its own "fatal: " message and exited with a
status code of 128 to use the die_message() function added in a
preceding commit.

This change also demonstrates why the return value of
die_message_routine() needed to be that of "report_fn". We have
callers such as the run-command.c::child_err_spew() which would like
to replace its error routine with the return value of
"get_die_message_routine()".

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fast-import.c
http-backend.c
parse-options.c
run-command.c

index 20406f677542c0c1e34b623fc3f4b2b349700525..2b2e28bad79cbaef25b4eb8fea4c0f800ba4a89d 100644 (file)
@@ -401,16 +401,18 @@ static void dump_marks(void);
 
 static NORETURN void die_nicely(const char *err, va_list params)
 {
+       va_list cp;
        static int zombie;
-       char message[2 * PATH_MAX];
+       report_fn die_message_fn = get_die_message_routine();
 
-       vsnprintf(message, sizeof(message), err, params);
-       fputs("fatal: ", stderr);
-       fputs(message, stderr);
-       fputc('\n', stderr);
+       va_copy(cp, params);
+       die_message_fn(err, params);
 
        if (!zombie) {
+               char message[2 * PATH_MAX];
+
                zombie = 1;
+               vsnprintf(message, sizeof(message), err, cp);
                write_crash_report(message);
                end_packfile();
                unkeep_all_packs();
index 3d6e2ff17f83c7c5d1fd42578f9dc073686becab..982cb62c7cb5e009fa95dd7162bdbd444a5609de 100644 (file)
@@ -659,8 +659,9 @@ static NORETURN void die_webcgi(const char *err, va_list params)
 {
        if (dead <= 1) {
                struct strbuf hdr = STRBUF_INIT;
+               report_fn die_message_fn = get_die_message_routine();
 
-               vreportf("fatal: ", err, params);
+               die_message_fn(err, params);
 
                http_status(&hdr, 500, "Internal Server Error");
                hdr_nocache(&hdr);
index fc5b43ff0b2566abd1d4b5aa198cb21aa01f2045..8bc0a21f1d77276c12a4beb88db32fd3149e0b9d 100644 (file)
@@ -1075,6 +1075,6 @@ void NORETURN usage_msg_opt(const char *msg,
                   const char * const *usagestr,
                   const struct option *options)
 {
-       fprintf(stderr, "fatal: %s\n\n", msg);
+       die_message("%s\n", msg); /* The extra \n is intentional */
        usage_with_options(usagestr, options);
 }
index f40df01c77247c404062c9dfcbb9dddf534544e1..a790fe9799d668b847efa1899f780400be583e02 100644 (file)
@@ -340,15 +340,6 @@ static void child_close_pair(int fd[2])
        child_close(fd[1]);
 }
 
-/*
- * parent will make it look like the child spewed a fatal error and died
- * this is needed to prevent changes to t0061.
- */
-static void fake_fatal(const char *err, va_list params)
-{
-       vreportf("fatal: ", err, params);
-}
-
 static void child_error_fn(const char *err, va_list params)
 {
        const char msg[] = "error() should not be called in child\n";
@@ -372,9 +363,10 @@ static void NORETURN child_die_fn(const char *err, va_list params)
 static void child_err_spew(struct child_process *cmd, struct child_err *cerr)
 {
        static void (*old_errfn)(const char *err, va_list params);
+       report_fn die_message_routine = get_die_message_routine();
 
        old_errfn = get_error_routine();
-       set_error_routine(fake_fatal);
+       set_error_routine(die_message_routine);
        errno = cerr->syserr;
 
        switch (cerr->err) {
@@ -1082,7 +1074,9 @@ static void *run_thread(void *data)
 
 static NORETURN void die_async(const char *err, va_list params)
 {
-       vreportf("fatal: ", err, params);
+       report_fn die_message_fn = get_die_message_routine();
+
+       die_message_fn(err, params);
 
        if (in_async()) {
                struct async *async = pthread_getspecific(async_key);