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

[PATCH 2/2] merge-recursive: eliminate flush_buffer() in favor of write_in_full()

From
Thomas Rast <trast@student.ethz.ch>
Date
Aug 3, 2012, 12:16 UTC
Message-ID
<853d452639066df2487b5766160ec2ebb692eab4.1343995614.git.trast@student.ethz.ch>
In-Reply-To
<6668871a0573c4d82d914137e3c7ff31fa8ce1ef.1343995614.git.trast@student.ethz.ch>

flush_buffer() is a thin wrapper around write_in_full() with two very confusing properties:

* It runs a loop to handle short reads, ensuring that we write
  everything.  But that is precisely what write_in_full() does!
* It checks for a return value of 0 from write_in_full(), which cannot
  happen: it returns this value only if count=0, but flush_buffer()
  will never call write_in_full() in this case.
Remove it.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
Much easier than worrying about the "disk full?" message.
 merge-recursive.c | 19 +------------------
 1 file changed, 1 insertion(+), 18 deletions(-)
diff --git a/merge-recursive.c b/merge-recursive.c
index a7bb212..3d4eb82 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -613,23 +613,6 @@ static char *unique_path(struct merge_options *o, const char *path, const char *
 	return newpath;
 }
 
-static void flush_buffer(int fd, const char *buf, unsigned long size)
-{
-	while (size > 0) {
-		long ret = write_in_full(fd, buf, size);
-		if (ret < 0) {
-			/* Ignore epipe */
-			if (errno == EPIPE)
-				break;
-			die_errno("merge-recursive");
-		} else if (!ret) {
-			die(_("merge-recursive: disk full?"));
-		}
-		size -= ret;
-		buf += ret;
-	}
-}
-
 static int dir_in_way(const char *path, int check_working_copy)
 {
 	int pos, pathlen = strlen(path);
@@ -788,7 +771,7 @@ static void update_file_flags(struct merge_options *o,
 			fd = open(path, O_WRONLY | O_TRUNC | O_CREAT, mode);
 			if (fd < 0)
 				die_errno(_("failed to open '%s'"), path);
-			flush_buffer(fd, buf, size);
+			write_in_full(fd, buf, size);
 			close(fd);
 		} else if (S_ISLNK(mode)) {
 			char *lnk = xmemdupz(buf, size);
-- 
1.7.12.rc1.219.gb14e69c
Previous: Thomas RastNext: Thomas Rast
Message 2 of 3 in “diff_setup_done(): return void”
  1. 1/2 diff_setup_done(): return voidThomas Rast, Aug 3, 2012
  2. 2/2 merge-recursive: eliminate flush_buffer() in favor of write_in_full()Thomas Rast, Aug 3, 2012
  3. Thomas RastAug 3, 2012

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.