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

[PATCH v7 03/13] bisect--helper: introduce new `write_in_file()` function

From
Miriam Rubio <mirucam@gmail.com>
Date
Aug 31, 2020, 10:50 UTC
Message-ID
<20200831105043.97665-4-mirucam@gmail.com>
In-Reply-To
<20200831105043.97665-1-mirucam@gmail.com>

Let's refactor code adding a new `write_in_file()` function that opens a file for writing a message and closes it and a wrapper for writing mode.

This helper will be used in later steps and makes the code simpler and easier to understand.

Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Mentored-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Miriam Rubio <mirucam@gmail.com>
---
 builtin/bisect--helper.c | 43 +++++++++++++++++++++++++++++++++-------
 1 file changed, 36 insertions(+), 7 deletions(-)
diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
index b7345be3a5..bae09ce65d 100644
--- a/builtin/bisect--helper.c
+++ b/builtin/bisect--helper.c
@@ -74,6 +74,40 @@ static int one_of(const char *term, ...)
 	return res;
 }
 
+static int write_in_file(const char *path, const char *mode, const char *format, va_list args)
+{
+	FILE *fp = NULL;
+	int res = 0;
+
+	if (strcmp(mode, "w"))
+		BUG("write-in-file does not support '%s' mode", mode);
+	fp = fopen(path, mode);
+	if (!fp)
+		return error_errno(_("cannot open file '%s' in mode '%s'"), path, mode);
+	res = vfprintf(fp, format, args);
+
+	if (res < 0) {
+		int saved_errno = errno;
+		fclose(fp);
+		errno = saved_errno;
+		return error_errno(_("could not write to file '%s'"), path);
+	}
+
+	return fclose(fp);
+}
+
+static int write_to_file(const char *path, const char *format, ...)
+{
+	int res;
+	va_list args;
+
+	va_start(args, format);
+	res = write_in_file(path, "w", format, args);
+	va_end(args);
+
+	return res;
+}
+
 static int check_term_format(const char *term, const char *orig_term)
 {
 	int res;
@@ -104,7 +138,6 @@ static int check_term_format(const char *term, const char *orig_term)
 
 static int write_terms(const char *bad, const char *good)
 {
-	FILE *fp = NULL;
 	int res;
 
 	if (!strcmp(bad, good))
@@ -113,13 +146,9 @@ static int write_terms(const char *bad, const char *good)
 	if (check_term_format(bad, "bad") || check_term_format(good, "good"))
 		return -1;
 
-	fp = fopen(git_path_bisect_terms(), "w");
-	if (!fp)
-		return error_errno(_("could not open the file BISECT_TERMS"));
+	res = write_to_file(git_path_bisect_terms(), "%s\n%s\n", bad, good);
 
-	res = fprintf(fp, "%s\n%s\n", bad, good);
-	res |= fclose(fp);
-	return (res < 0) ? -1 : 0;
+	return res;
 }
 
 static int is_expected_rev(const char *expected_hex)
-- 
2.25.0
Previous: Miriam RubioNext: Miriam Rubio
Message 4 of 27 in “Finish converting git bisect to C part 2”
  1. 00/13 Finish converting git bisect to C part 2Miriam Rubio, Aug 31, 2020
  2. 01/13 bisect--helper: BUG() in cmd_*() on invalid subcommandMiriam Rubio, Aug 31, 2020
  3. 02/13 bisect--helper: use '-res' in 'cmd_bisect__helper' returnMiriam Rubio, Aug 31, 2020
  4. 03/13 bisect--helper: introduce new `write_in_file()` functionMiriam Rubio, Aug 31, 2020
  5. 04/13 bisect--helper: reimplement `bisect_autostart` shell function in CMiriam Rubio, Aug 31, 2020
  6. Johannes SchindelinSep 3, 2020
  7. 05/13 bisect: call 'clear_commit_marks_all()' in 'bisect_next_all()'Miriam Rubio, Aug 31, 2020
  8. 08/13 bisect--helper: retire `--bisect-clean-state` subcommandMiriam Rubio, Aug 31, 2020
  9. 13/13 bisect--helper: retire `--bisect-autostart` subcommandMiriam Rubio, Aug 31, 2020
  10. 11/13 bisect--helper: retire `--check-expected-revs` subcommandMiriam Rubio, Aug 31, 2020
  11. 12/13 bisect--helper: retire `--write-terms` subcommandMiriam Rubio, Aug 31, 2020
  12. 10/13 bisect--helper: reimplement `bisect_state` & `bisect_head` shell functions in CMiriam Rubio, Aug 31, 2020
  13. Johannes SchindelinSep 3, 2020
  14. 09/13 bisect--helper: retire `--next-all` subcommandMiriam Rubio, Aug 31, 2020
  15. 07/13 bisect--helper: finish porting `bisect_start()` to CMiriam Rubio, Aug 31, 2020
  16. Johannes SchindelinSep 3, 2020
  17. 06/13 bisect--helper: reimplement `bisect_next` and `bisect_auto_next` shell functions in CMiriam Rubio, Aug 31, 2020
  18. Johannes SchindelinSep 3, 2020
  19. Johannes SchindelinSep 3, 2020
  20. Miriam R.Sep 23, 2020
  21. Johannes SchindelinSep 23, 2020
  22. Johannes SchindelinSep 23, 2020
  23. Christian CouderSep 24, 2020
  24. Johannes SchindelinSep 24, 2020
  25. Christian CouderSep 24, 2020
  26. Miriam R.Sep 24, 2020
  27. Miriam R.Sep 24, 2020

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.