Blame SOURCES/0022-Simplify-efidp_append_node-even-more.patch

ac385c
From 6e59831ea44426736c2ac615c5145c427418086a Mon Sep 17 00:00:00 2001
ac385c
From: Peter Jones <pjones@redhat.com>
ac385c
Date: Tue, 9 May 2017 15:15:55 -0400
ac385c
Subject: [PATCH 22/24] Simplify efidp_append_node() even more.
ac385c
ac385c
Covscan rightly notices that now we've got enough tests on dp and dn
ac385c
that some of them are provably dead code.
ac385c
ac385c
So take a bunch out.
ac385c
ac385c
Signed-off-by: Peter Jones <pjones@redhat.com>
ac385c
---
ac385c
 src/dp.c | 94 +++++++++++++++++++---------------------------------------------
ac385c
 1 file changed, 28 insertions(+), 66 deletions(-)
ac385c
ac385c
diff --git a/src/dp.c b/src/dp.c
ac385c
index eadb397..14f4cfe 100644
ac385c
--- a/src/dp.c
ac385c
+++ b/src/dp.c
ac385c
@@ -196,78 +196,38 @@ int
ac385c
 __attribute__((__visibility__ ("default")))
ac385c
 efidp_append_node(const_efidp dp, const_efidp dn, efidp *out)
ac385c
 {
ac385c
-	ssize_t lsz, rsz, newsz;
ac385c
+	ssize_t lsz = 0, rsz = 0, newsz;
ac385c
 	int rc;
ac385c
 
ac385c
-	if (!dp && !dn) {
ac385c
-		rc = efidp_duplicate_path(
ac385c
-			(const_efidp)(const efidp_header * const)&end_entire,
ac385c
-			out);
ac385c
-		if (rc < 0)
ac385c
-			efi_error("efidp_duplicate_path() failed");
ac385c
-		return rc;
ac385c
-	}
ac385c
-
ac385c
-	if (!dp && dn) {
ac385c
-		rc = efidp_duplicate_path(dn, out);
ac385c
-		if (rc < 0)
ac385c
-			efi_error("efidp_duplicate_path() failed");
ac385c
-		return rc;
ac385c
-	}
ac385c
-
ac385c
-	if (dp && !dn) {
ac385c
-		rc = efidp_duplicate_path(dp, out);
ac385c
-		if (rc < 0)
ac385c
-			efi_error("efidp_duplicate_path() failed");
ac385c
-		return rc;
ac385c
-	}
ac385c
-
ac385c
-	lsz = efidp_size(dp);
ac385c
-	if (lsz < 0) {
ac385c
-		efi_error("efidp_size(dp) returned error");
ac385c
-		return -1;
ac385c
-	}
ac385c
-
ac385c
-
ac385c
-	rsz = efidp_node_size(dn);
ac385c
-	if (rsz < 0) {
ac385c
-		efi_error("efidp_size(dn) returned error");
ac385c
-		return -1;
ac385c
-	}
ac385c
-
ac385c
-	if (!dp && dn) {
ac385c
-		if (add(rsz, sizeof(end_entire), &newsz)) {
ac385c
-			errno = EOVERFLOW;
ac385c
-			efi_error(
ac385c
-			  "arithmetic overflow computing allocation size");
ac385c
-			return -1;
ac385c
-		}
ac385c
-		efidp new = malloc(rsz + sizeof (end_entire));
ac385c
-		if (!new) {
ac385c
-			efi_error("allocation failed");
ac385c
+	if (dp) {
ac385c
+		lsz = efidp_size(dp);
ac385c
+		if (lsz < 0) {
ac385c
+			efi_error("efidp_size(dp) returned error");
ac385c
 			return -1;
ac385c
 		}
ac385c
 
ac385c
-		memcpy(new, dn, dn->length);
ac385c
-		memcpy((uint8_t *)new + dn->length, &end_entire,
ac385c
-		       sizeof (end_entire));
ac385c
-		*out = new;
ac385c
-		return 0;
ac385c
-	}
ac385c
+		const_efidp le;
ac385c
+		le = dp;
ac385c
+		while (1) {
ac385c
+			if (efidp_type(le) == EFIDP_END_TYPE &&
ac385c
+			    efidp_subtype(le) == EFIDP_END_ENTIRE) {
ac385c
+				ssize_t lesz = efidp_size(le);
ac385c
+				lsz -= lesz;
ac385c
+				break;
ac385c
+			}
ac385c
 
ac385c
-	const_efidp le;
ac385c
-	le = dp;
ac385c
-	while (1) {
ac385c
-		if (efidp_type(le) == EFIDP_END_TYPE &&
ac385c
-				efidp_subtype(le) == EFIDP_END_ENTIRE) {
ac385c
-			ssize_t lesz = efidp_size(le);
ac385c
-			lsz -= lesz;
ac385c
-			break;
ac385c
+			rc = efidp_get_next_end(le, &le);
ac385c
+			if (rc < 0) {
ac385c
+				efi_error("efidp_get_next_end() returned error");
ac385c
+				return -1;
ac385c
+			}
ac385c
 		}
ac385c
+	}
ac385c
 
ac385c
-		rc = efidp_get_next_end(le, &le);
ac385c
-		if (rc < 0) {
ac385c
-			efi_error("efidp_get_next_end() returned error");
ac385c
+	if (dn) {
ac385c
+		rsz = efidp_node_size(dn);
ac385c
+		if (rsz < 0) {
ac385c
+			efi_error("efidp_size(dn) returned error");
ac385c
 			return -1;
ac385c
 		}
ac385c
 	}
ac385c
@@ -285,8 +245,10 @@ efidp_append_node(const_efidp dp, const_efidp dn, efidp *out)
ac385c
 	}
ac385c
 
ac385c
 	*out = new;
ac385c
-	memcpy(new, dp, lsz);
ac385c
-	memcpy((uint8_t *)new + lsz, dn, rsz);
ac385c
+	if (dp)
ac385c
+		memcpy(new, dp, lsz);
ac385c
+	if (dn)
ac385c
+		memcpy((uint8_t *)new + lsz, dn, rsz);
ac385c
 	memcpy((uint8_t *)new + lsz + rsz, &end_entire, sizeof (end_entire));
ac385c
 
ac385c
 	return 0;
ac385c
-- 
ac385c
2.12.2
ac385c