|
|
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 |
|