Skip to content

Commit e081a7c

Browse files
avargitster
authored andcommitted
usage.c API users: use die_message() for "fatal :" + exit 128
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 18568ee commit e081a7c

File tree

4 files changed

+15
-18
lines changed

4 files changed

+15
-18
lines changed

builtin/fast-import.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -401,16 +401,18 @@ static void dump_marks(void);
401401

402402
static NORETURN void die_nicely(const char *err, va_list params)
403403
{
404+
va_list cp;
404405
static int zombie;
405-
char message[2 * PATH_MAX];
406+
report_fn die_message_fn = get_die_message_routine();
406407

407-
vsnprintf(message, sizeof(message), err, params);
408-
fputs("fatal: ", stderr);
409-
fputs(message, stderr);
410-
fputc('\n', stderr);
408+
va_copy(cp, params);
409+
die_message_fn(err, params);
411410

412411
if (!zombie) {
412+
char message[2 * PATH_MAX];
413+
413414
zombie = 1;
415+
vsnprintf(message, sizeof(message), err, cp);
414416
write_crash_report(message);
415417
end_packfile();
416418
unkeep_all_packs();

http-backend.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -659,8 +659,9 @@ static NORETURN void die_webcgi(const char *err, va_list params)
659659
{
660660
if (dead <= 1) {
661661
struct strbuf hdr = STRBUF_INIT;
662+
report_fn die_message_fn = get_die_message_routine();
662663

663-
vreportf("fatal: ", err, params);
664+
die_message_fn(err, params);
664665

665666
http_status(&hdr, 500, "Internal Server Error");
666667
hdr_nocache(&hdr);

parse-options.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1075,6 +1075,6 @@ void NORETURN usage_msg_opt(const char *msg,
10751075
const char * const *usagestr,
10761076
const struct option *options)
10771077
{
1078-
fprintf(stderr, "fatal: %s\n\n", msg);
1078+
die_message("%s\n", msg); /* The extra \n is intentional */
10791079
usage_with_options(usagestr, options);
10801080
}

run-command.c

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -340,15 +340,6 @@ static void child_close_pair(int fd[2])
340340
child_close(fd[1]);
341341
}
342342

343-
/*
344-
* parent will make it look like the child spewed a fatal error and died
345-
* this is needed to prevent changes to t0061.
346-
*/
347-
static void fake_fatal(const char *err, va_list params)
348-
{
349-
vreportf("fatal: ", err, params);
350-
}
351-
352343
static void child_error_fn(const char *err, va_list params)
353344
{
354345
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)
372363
static void child_err_spew(struct child_process *cmd, struct child_err *cerr)
373364
{
374365
static void (*old_errfn)(const char *err, va_list params);
366+
report_fn die_message_routine = get_die_message_routine();
375367

376368
old_errfn = get_error_routine();
377-
set_error_routine(fake_fatal);
369+
set_error_routine(die_message_routine);
378370
errno = cerr->syserr;
379371

380372
switch (cerr->err) {
@@ -1082,7 +1074,9 @@ static void *run_thread(void *data)
10821074

10831075
static NORETURN void die_async(const char *err, va_list params)
10841076
{
1085-
vreportf("fatal: ", err, params);
1077+
report_fn die_message_fn = get_die_message_routine();
1078+
1079+
die_message_fn(err, params);
10861080

10871081
if (in_async()) {
10881082
struct async *async = pthread_getspecific(async_key);

0 commit comments

Comments
 (0)