threads / patch / 15803

patchDo not use errno when pread() returns 0

Subject: [PATCH] Do not use errno when pread() returns 0

## tl;dr

One message between Oct 6, 2008 and Oct 6, 2008. Diffs are folded; open one to read it.

replies: 0people: 1as markdown or json

Samuel Tardieu· Oct 6, 2008, 17:28 UTC · lore

If we use pread() while at the end of the file, it will return 0, which is not an error from the operating system point of view. In this case, errno has not been set and must not be used.

Signed-off-by: Samuel Tardieu <sam@rfc1149.net>
---
 index-pack.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
Show changes to index-pack.c +4 −1
diff --git a/index-pack.c b/index-pack.c
index 2e4c088..73860bf 100644
--- a/index-pack.c
+++ b/index-pack.c
@@ -365,8 +365,11 @@ static void *get_data_from_pack(struct object_entry *obj)
 	data = src;
 	do {
 		ssize_t n = pread(pack_fd, data + rdy, len - rdy, from + rdy);
-		if (n <= 0)
+		if (n < 0)
 			die("cannot pread pack file: %s", strerror(errno));
+		if (!n)
+			die("premature end of pack file, %lu bytes missing",
+			    len - rdy);
 		rdy += n;
 	} while (rdy < len);
 	data = xmalloc(obj->size);
-- 
tg: (395ff9b..) short-pread (depends on: spearce/next)

← back to recent threads