git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 2/6] usage.c API users: use die_message() where appropriate

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Oct 22, 2021, 18:19 UTC
Message-ID
<patch-v3-2.6-dfc3a8fbccb-20211022T175227Z-avarab@gmail.com>
In-Reply-To
<cover-v3-0.6-00000000000-20211022T175227Z-avarab@gmail.com>

Change code that either called error() and proceeded to exit with 128, or emitted its own "fatal: " messages to use the die_message() function added in a preceding commit.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 builtin/fast-import.c | 13 ++++++++-----
 builtin/notes.c       |  9 +++++----
 http-backend.c        |  3 ++-
 parse-options.c       |  2 +-
 run-command.c         | 16 +++++-----------
 5 files changed, 21 insertions(+), 22 deletions(-)
diff --git a/builtin/fast-import.c b/builtin/fast-import.c
index 20406f67754..11cd5b0c56c 100644
--- a/builtin/fast-import.c
+++ b/builtin/fast-import.c
@@ -401,16 +401,19 @@ 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);
+	if (!zombie)
+		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();
diff --git a/builtin/notes.c b/builtin/notes.c
index 71c59583a17..2812d1eac40 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -201,11 +201,12 @@ static void prepare_note_data(const struct object_id *object, struct note_data *
 static void write_note_data(struct note_data *d, struct object_id *oid)
 {
 	if (write_object_file(d->buf.buf, d->buf.len, blob_type, oid)) {
-		error(_("unable to write note object"));
+		int status = die_message(_("unable to write note object"));
+
 		if (d->edit_path)
-			error(_("the note contents have been left in %s"),
-				d->edit_path);
-		exit(128);
+			die_message(_("the note contents have been left in %s"),
+				    d->edit_path);
+		exit(status);
 	}
 }
 
diff --git a/http-backend.c b/http-backend.c
index e7c0eeab230..bc853356e73 100644
--- a/http-backend.c
+++ b/http-backend.c
@@ -661,8 +661,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);
diff --git a/parse-options.c b/parse-options.c
index 6e0535bdaad..c892641d9a1 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -1049,7 +1049,7 @@ 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);
 }
 
diff --git a/run-command.c b/run-command.c
index 7ef5cc712a9..220cf53deb4 100644
--- a/run-command.c
+++ b/run-command.c
@@ -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);
-- 
2.33.1.1494.g88b39a443e1
Previous: Junio C HamanoNext: Ævar Arnfjörð Bjarmason
Message 18 of 26 in “leak tests: free() before die for two API functions”
  1. leak tests: free() before die for two API functionsÆvar Arnfjörð Bjarmason, Oct 21, 2021
  2. Andrzej HuntOct 21, 2021
  3. Junio C HamanoOct 21, 2021
  4. Martin ÅgrenOct 21, 2021
  5. 0/3 refs.c + config.c: plug memory leaksÆvar Arnfjörð Bjarmason, Oct 21, 2021
  6. 2/3 config.c: don't leak memory in handle_path_include()Ævar Arnfjörð Bjarmason, Oct 21, 2021
  7. Junio C HamanoOct 21, 2021
  8. Ævar Arnfjörð BjarmasonOct 22, 2021
  9. Junio C HamanoOct 22, 2021
  10. Ævar Arnfjörð BjarmasonOct 22, 2021
  11. 1/3 refs.c: make "repo_default_branch_name" static, remove xstrfmt()Ævar Arnfjörð Bjarmason, Oct 21, 2021
  12. Junio C HamanoOct 21, 2021
  13. 3/3 config.c: free(expanded) before die(), work around GCC oddityÆvar Arnfjörð Bjarmason, Oct 21, 2021
  14. Junio C HamanoOct 21, 2021
  15. 0/6 usage.c: add die_message() & plug memory leaks in refs.c & config.cÆvar Arnfjörð Bjarmason, Oct 22, 2021
  16. 1/6 usage.c: add a die_message() routineÆvar Arnfjörð Bjarmason, Oct 22, 2021
  17. Junio C HamanoOct 24, 2021
  18. 2/6 usage.c API users: use die_message() where appropriateÆvar Arnfjörð Bjarmason, Oct 22, 2021
  19. 3/6 usage.c + gc: add and use a die_message_errno()Ævar Arnfjörð Bjarmason, Oct 22, 2021
  20. Junio C HamanoOct 24, 2021
  21. 4/6 config.c: don't leak memory in handle_path_include()Ævar Arnfjörð Bjarmason, Oct 22, 2021
  22. Junio C HamanoOct 24, 2021
  23. 5/6 config.c: free(expanded) before die(), work around GCC oddityÆvar Arnfjörð Bjarmason, Oct 22, 2021
  24. Jeff KingOct 26, 2021
  25. 6/6 refs: plug memory leak in repo_default_branch_name()Ævar Arnfjörð Bjarmason, Oct 22, 2021
  26. Jonathan TanOct 27, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.