Commit 8251fdbcd71582c610ee8e416cae5c67e4f93796

Stefan Sperling 2018-01-12T23:00:06

introduce got_ferror() and use it

diff --git a/include/got_error.h b/include/got_error.h
index 59101dc..65bbcde 100644
--- a/include/got_error.h
+++ b/include/got_error.h
@@ -60,3 +60,4 @@ static const struct got_error {
 
 const struct got_error * got_error(int code);
 const struct got_error *got_error_from_errno();
+const struct got_error *got_ferror(FILE *, int);
diff --git a/lib/error.c b/lib/error.c
index 183e6da..d3b27c7 100644
--- a/lib/error.c
+++ b/lib/error.c
@@ -15,6 +15,7 @@
  */
 
 #include <errno.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -47,3 +48,11 @@ got_error_from_errno()
 	strerror_r(errno, msg, sizeof(msg));
 	return &err;
 }
+
+const struct got_error *
+got_ferror(FILE *f, int code)
+{
+	if (ferror(f))
+		return got_error_from_errno();
+	return got_error(code);
+}
diff --git a/lib/pack.c b/lib/pack.c
index 9e1a9b8..8519e44 100644
--- a/lib/pack.c
+++ b/lib/pack.c
@@ -83,8 +83,7 @@ get_packfile_size(size_t *size, const char *path_idx)
 
 	if (stat(path_pack, &sb) != 0) {
 		free(path_pack);
-		return got_error(GOT_ERR_IO);
-
+		return got_error_from_errno();
 	}
 
 	free(path_pack);
@@ -120,7 +119,7 @@ got_packidx_open(struct got_packidx_v2_hdr **packidx, const char *path)
 
 	n = fread(&p->magic, sizeof(p->magic), 1, f);
 	if (n != 1) {
-		err = got_error(ferror(f) ? GOT_ERR_IO : GOT_ERR_BAD_PACKIDX);
+		err = got_ferror(f, GOT_ERR_BAD_PACKIDX);
 		goto done;
 	}
 
@@ -133,7 +132,7 @@ got_packidx_open(struct got_packidx_v2_hdr **packidx, const char *path)
 
 	n = fread(&p->version, sizeof(p->version), 1, f);
 	if (n != 1) {
-		err = got_error(ferror(f) ? GOT_ERR_IO : GOT_ERR_BAD_PACKIDX);
+		err = got_ferror(f, GOT_ERR_BAD_PACKIDX);
 		goto done;
 	}
 
@@ -146,7 +145,7 @@ got_packidx_open(struct got_packidx_v2_hdr **packidx, const char *path)
 
 	n = fread(&p->fanout_table, sizeof(p->fanout_table), 1, f);
 	if (n != 1) {
-		err = got_error(ferror(f) ? GOT_ERR_IO : GOT_ERR_BAD_PACKIDX);
+		err = got_ferror(f, GOT_ERR_BAD_PACKIDX);
 		goto done;
 	}
 
@@ -166,7 +165,7 @@ got_packidx_open(struct got_packidx_v2_hdr **packidx, const char *path)
 
 	n = fread(p->sorted_ids, sizeof(*p->sorted_ids), nobj, f);
 	if (n != nobj) {
-		err = got_error(ferror(f) ? GOT_ERR_IO : GOT_ERR_BAD_PACKIDX);
+		err = got_ferror(f, GOT_ERR_BAD_PACKIDX);
 		goto done;
 	}
 
@@ -181,7 +180,7 @@ got_packidx_open(struct got_packidx_v2_hdr **packidx, const char *path)
 
 	n = fread(p->crc32, sizeof(*p->crc32), nobj, f);
 	if (n != nobj) {
-		err = got_error(ferror(f) ? GOT_ERR_IO : GOT_ERR_BAD_PACKIDX);
+		err = got_ferror(f, GOT_ERR_BAD_PACKIDX);
 		goto done;
 	}
 
@@ -195,7 +194,7 @@ got_packidx_open(struct got_packidx_v2_hdr **packidx, const char *path)
 
 	n = fread(p->offsets, sizeof(*p->offsets), nobj, f);
 	if (n != nobj) {
-		err = got_error(ferror(f) ? GOT_ERR_IO : GOT_ERR_BAD_PACKIDX);
+		err = got_ferror(f, GOT_ERR_BAD_PACKIDX);
 		goto done;
 	}
 
@@ -213,7 +212,7 @@ got_packidx_open(struct got_packidx_v2_hdr **packidx, const char *path)
 
 	n = fread(p->large_offsets, sizeof(*p->large_offsets), nobj, f);
 	if (n != nobj) {
-		err = got_error(ferror(f) ? GOT_ERR_IO : GOT_ERR_BAD_PACKIDX);
+		err = got_ferror(f, GOT_ERR_BAD_PACKIDX);
 		goto done;
 	}
 
@@ -223,7 +222,7 @@ got_packidx_open(struct got_packidx_v2_hdr **packidx, const char *path)
 checksum:
 	n = fread(&p->trailer, sizeof(p->trailer), 1, f);
 	if (n != 1) {
-		err = got_error(ferror(f) ? GOT_ERR_IO : GOT_ERR_BAD_PACKIDX);
+		err = got_ferror(f, GOT_ERR_BAD_PACKIDX);
 		goto done;
 	}
 
@@ -317,7 +316,7 @@ read_packfile_hdr(FILE *f, struct got_packidx_v2_hdr *packidx)
 
 	n = fread(&hdr, sizeof(hdr), 1, f);
 	if (n != 1)
-		return got_error(ferror(f) ? GOT_ERR_IO : GOT_ERR_BAD_PACKFILE);
+		return got_ferror(f, GOT_ERR_BAD_PACKIDX);
 
 	if (betoh32(hdr.signature) != GOT_PACKFILE_SIGNATURE ||
 	    betoh32(hdr.version) != GOT_PACKFILE_VERSION ||
@@ -360,10 +359,10 @@ dump_packed_object(FILE **f, FILE *packfile, off_t offset)
 
 		n = fread(&sizeN, sizeof(sizeN), 1, packfile);
 		if (n != 1) {
-			err = got_error(ferror(packfile) ?
-			    GOT_ERR_IO : GOT_ERR_BAD_PACKFILE);
+			err = got_ferror(packfile, GOT_ERR_BAD_PACKIDX);
 			goto done;
 		}
+
 		if (i == 0) {
 			type = (sizeN & GOT_PACK_OBJ_SIZE0_TYPE_MASK) >>
 			    GOT_PACK_OBJ_SIZE0_TYPE_MASK_SHIFT;
@@ -397,15 +396,13 @@ dump_packed_object(FILE **f, FILE *packfile, off_t offset)
 
 		n = fread(data, len, 1, packfile);
 		if (n != 1) {
-			err = got_error(ferror(packfile) ?
-			    GOT_ERR_IO : GOT_ERR_BAD_PACKFILE);
+			err = got_ferror(packfile, GOT_ERR_BAD_PACKIDX);
 			goto done;
 		}
 
 		n = fwrite(data, len, 1, *f);
 		if (n != 1) {
-			err = got_error(ferror(*f) ?
-			    GOT_ERR_IO : GOT_ERR_BAD_PACKFILE);
+			err = got_ferror(*f, GOT_ERR_BAD_PACKIDX);
 			goto done;
 		}