Commit Diff


commit - 971405a7e47997a87d869bc30b3fca98083395dc
commit + e45311301ff386e9a2f9ff3e613d520f57ad119b
blob - 55321254697fa7c93407f495fdae6fe53a5efc06
blob + cf1c35d91591e39601a05ab6ad4cc83fc50c3a1f
--- lib/diff3.c
+++ lib/diff3.c
@@ -587,12 +587,12 @@ readin(size_t *n, char *name, struct diff **dd, struct
 		return got_error_from_errno2("fopen", name);
 	err = getchange(&p, f, d3s);
 	if (err)
-		return err;
+		goto done;
 	for (i = 0; p; i++) {
 		if (i >= d3s->szchanges - 1) {
 			err = increase(d3s);
 			if (err)
-				return err;
+				goto done;
 		}
 		a = b = number(&p);
 		if (*p == ',') {
@@ -618,18 +618,18 @@ readin(size_t *n, char *name, struct diff **dd, struct
 
 		err = getchange(&p, f, d3s);
 		if (err)
-			return err;
+			goto done;
 	}
 
 	if (i) {
 		(*dd)[i].old.from = (*dd)[i - 1].old.to;
 		(*dd)[i].new.from = (*dd)[i - 1].new.to;
 	}
-
-	if (fclose(f) != 0)
+done:
+	if (fclose(f) != 0 && err == NULL)
 		err = got_error_from_errno("fclose");
-
-	*n = i;
+	if (err == NULL)
+		*n = i;
 	return err;
 }