[coreboot-gerrit] Patch set updated for coreboot: cbfstool: prefer fmap data over cbfs master header if it exists

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Mon Sep 21 15:02:26 CET 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/11629

-gerrit

commit 62d676521f244bfaac9ca138ff720097138046cd
Author: Patrick Georgi <pgeorgi at chromium.org>
Date:   Fri Sep 11 18:34:39 2015 +0200

    cbfstool: prefer fmap data over cbfs master header if it exists
    
    Up to now, if both fmap and a master header existed, the master header
    was used. Now, use the master header only if no fmap is found.
    
    Change-Id: Iafbf2c9dc325597e23a9780b495549b5d912e9ad
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
---
 util/cbfstool/cbfs_image.c       | 12 +++++++-----
 util/cbfstool/cbfstool.c         |  9 +--------
 util/cbfstool/partitioned_file.c | 15 +--------------
 util/cbfstool/partitioned_file.h | 24 +++++-------------------
 4 files changed, 14 insertions(+), 46 deletions(-)

diff --git a/util/cbfstool/cbfs_image.c b/util/cbfstool/cbfs_image.c
index 55f8084..24ab0c4 100644
--- a/util/cbfstool/cbfs_image.c
+++ b/util/cbfstool/cbfs_image.c
@@ -343,20 +343,22 @@ int cbfs_image_from_buffer(struct cbfs_image *out, struct buffer *in,
 	buffer_clone(&out->buffer, in);
 	out->has_header = false;
 
+	if (cbfs_is_valid_cbfs(out)) {
+		return 0;
+	}
+
 	void *header_loc = cbfs_find_header(in->data, in->size, offset);
 	if (header_loc) {
 		cbfs_get_header(&out->header, header_loc);
 		out->has_header = true;
 		cbfs_fix_legacy_size(out, header_loc);
+		return 0;
 	} else if (offset != ~0u) {
 		ERROR("The -H switch is only valid on legacy images having CBFS master headers.\n");
 		return 1;
-	} else if (!cbfs_is_valid_cbfs(out)) {
-		ERROR("Selected image region is not a valid CBFS.\n");
-		return 1;
 	}
-
-	return 0;
+	ERROR("Selected image region is not a valid CBFS.\n");
+	return 1;
 }
 
 int cbfs_copy_instance(struct cbfs_image *image, size_t copy_offset,
diff --git a/util/cbfstool/cbfstool.c b/util/cbfstool/cbfstool.c
index 4dd2843..8bb1732 100644
--- a/util/cbfstool/cbfstool.c
+++ b/util/cbfstool/cbfstool.c
@@ -882,12 +882,6 @@ static int cbfs_copy(void)
 	return cbfs_copy_instance(&image, param.copyoffset, param.size);
 }
 
-static bool cbfs_is_legacy_format(struct buffer *buffer)
-{
-	// Legacy CBFSes are those containing the deprecated CBFS master header.
-	return cbfs_find_header(buffer->data, buffer->size, -1);
-}
-
 static const struct command commands[] = {
 	{"add", "H:r:f:n:t:c:b:a:vh?", cbfs_add, true, true},
 	{"add-flat-binary", "H:r:f:n:l:e:c:b:vh?", cbfs_add_flat_binary, true,
@@ -1251,8 +1245,7 @@ int main(int argc, char **argv)
 			}
 		} else {
 			param.image_file =
-				partitioned_file_reopen(image_name,
-							cbfs_is_legacy_format);
+				partitioned_file_reopen(image_name);
 		}
 		if (!param.image_file)
 			return 1;
diff --git a/util/cbfstool/partitioned_file.c b/util/cbfstool/partitioned_file.c
index 9d67832..041ef11 100644
--- a/util/cbfstool/partitioned_file.c
+++ b/util/cbfstool/partitioned_file.c
@@ -165,8 +165,7 @@ partitioned_file_t *partitioned_file_create(const char *filename,
 	return file;
 }
 
-partitioned_file_t *partitioned_file_reopen(const char *filename,
-				partitioned_file_flat_decider_t flat_override)
+partitioned_file_t *partitioned_file_reopen(const char *filename)
 {
 	assert(filename);
 
@@ -174,11 +173,6 @@ partitioned_file_t *partitioned_file_reopen(const char *filename,
 	if (!file)
 		return NULL;
 
-	if (flat_override && flat_override(&file->buffer)) {
-		INFO("Opening image as a flat file in response to explicit request\n");
-		return file;
-	}
-
 	long fmap_region_offset = fmap_find((const uint8_t *)file->buffer.data,
 							file->buffer.size);
 	if (fmap_region_offset < 0) {
@@ -365,10 +359,3 @@ static bool select_parents_of(const struct fmap_area *parent, const void *arg)
 }
 const partitioned_file_fmap_selector_t partitioned_file_fmap_select_parents_of =
 							select_parents_of;
-
-static bool open_as_flat(unused struct buffer *buffer)
-{
-	return true;
-}
-const partitioned_file_flat_decider_t partitioned_file_open_as_flat =
-								open_as_flat;
diff --git a/util/cbfstool/partitioned_file.h b/util/cbfstool/partitioned_file.h
index 4583316..3698a19 100644
--- a/util/cbfstool/partitioned_file.h
+++ b/util/cbfstool/partitioned_file.h
@@ -28,15 +28,6 @@
 
 typedef struct partitioned_file partitioned_file_t;
 
-/** @return Whether the specific existing file should be opened in flat mode. */
-typedef bool (*partitioned_file_flat_decider_t)(struct buffer *buffer);
-
-/** Pass to partitioned_file_reopen() to force opening as a partitioned file. */
-#define partitioned_file_open_as_partitioned NULL
-
-/** Pass to partitioned_file_reopen() to force opening as a flat file. */
-extern const partitioned_file_flat_decider_t partitioned_file_open_as_flat;
-
 /**
  * Create a new filesystem-backed flat buffer.
  * This backwards-compatibility function creates a new in-memory buffer and
@@ -76,22 +67,17 @@ partitioned_file_t *partitioned_file_create(const char *filename,
 
 /**
  * Read a file back in from the disk.
- * An in-memory buffer is created and populated with the file's contents. If
- * flat_override is NULL and the image contains an FMAP, it will be opened as a
- * full partitioned file; otherwise, it will be opened as a flat file as if it
- * had been created by partitioned_file_create_flat(). This selection behavior
- * is extensible: if a flat_override function is provided, it is invoked before
- * searching for an FMAP, and has the option of explicitly instructing the
- * module to open the image as a flat file based on its contents.
+ * An in-memory buffer is created and populated with the file's
+ * contents. If the image contains an FMAP, it will be opened as a
+ * full partitioned file; otherwise, it will be opened as a flat file as
+ * if it had been created by partitioned_file_create_flat().
  * The partitioned_file_t returned from this function is separately owned by the
  * caller, and must later be passed to partitioned_file_close();
  *
  * @param filename      Name of the file to read in
- * @param flat_override Callback that can decide to open it as flat, or NULL
  * @return              Caller-owned partitioned file, or NULL on error
  */
-partitioned_file_t *partitioned_file_reopen(const char *filename,
-				partitioned_file_flat_decider_t flat_override);
+partitioned_file_t *partitioned_file_reopen(const char *filename);
 
 /**
  * Write a buffer's contents to its original region within a segmented file.



More information about the coreboot-gerrit mailing list