<p>Daisuke Nojiri has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/22239">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">cbfstool: Add '-p' option to specify the order<br><br>This patch adds '-p' to the 'add' command. It allows the add<br>command to specify the file after which the new file will be<br>added. This is useful to create a padding for a file which might<br>be replaced with a larger file.<br><br>BUG=b:68660966<br>BRANCH=none<br>TEST=emerge-fizz coreboot && cbfstool image.bin print -r FW_MAIN_A<br>prints ecrw.pad after ecrw.<br><br>Change-Id: I64bc54fd10a453b4da467bc69d9590e61b0f7ead<br>Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org><br>---<br>M util/cbfstool/cbfs_image.c<br>M util/cbfstool/cbfs_image.h<br>M util/cbfstool/cbfstool.c<br>3 files changed, 23 insertions(+), 7 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/39/22239/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">diff --git a/util/cbfstool/cbfs_image.c b/util/cbfstool/cbfs_image.c<br>index 306fc29..f3398cc 100644<br>--- a/util/cbfstool/cbfs_image.c<br>+++ b/util/cbfstool/cbfs_image.c<br>@@ -734,7 +734,7 @@<br> <br> int cbfs_add_entry(struct cbfs_image *image, struct buffer *buffer,<br>                   uint32_t content_offset,<br>-             struct cbfs_file *header)<br>+            struct cbfs_file *header, const char *after)<br> {<br>   assert(image);<br>        assert(buffer);<br>@@ -760,7 +760,13 @@<br>         for (entry = cbfs_find_first_entry(image);<br>         entry && cbfs_is_valid_entry(image, entry);<br>           entry = cbfs_find_next_entry(image, entry)) {<br>-<br>+                if (after) {<br>+                 if (strcasecmp(entry->filename, after))<br>+                           continue;<br>+                    entry = cbfs_find_next_entry(image, entry);<br>+                  if (!entry || !cbfs_is_valid_entry(image, entry))<br>+                            break;<br>+               }<br>             entry_type = ntohl(entry->type);<br>           if (entry_type != CBFS_COMPONENT_NULL)<br>                        continue;<br>diff --git a/util/cbfstool/cbfs_image.h b/util/cbfstool/cbfs_image.h<br>index 5772b1b..e6c3814 100644<br>--- a/util/cbfstool/cbfs_image.h<br>+++ b/util/cbfstool/cbfs_image.h<br>@@ -105,7 +105,8 @@<br>  * Never pass this function a top-aligned address: convert it to an offset.<br>  * Returns 0 on success, otherwise non-zero. */<br> int cbfs_add_entry(struct cbfs_image *image, struct buffer *buffer,<br>-                   uint32_t content_offset, struct cbfs_file *header);<br>+                  uint32_t content_offset, struct cbfs_file *header,<br>+                   const char *after);<br> <br> /* Removes an entry from CBFS image. Returns 0 on success, otherwise non-zero. */<br> int cbfs_remove_entry(struct cbfs_image *image, const char *name);<br>diff --git a/util/cbfstool/cbfstool.c b/util/cbfstool/cbfstool.c<br>index 3263a91..c25d1f4 100644<br>--- a/util/cbfstool/cbfstool.c<br>+++ b/util/cbfstool/cbfstool.c<br>@@ -52,6 +52,7 @@<br>        struct buffer *image_region;<br>  const char *name;<br>     const char *filename;<br>+        const char *after;<br>    const char *fmap;<br>     const char *region_name;<br>      const char *source_region;<br>@@ -239,7 +240,7 @@<br> <br>    header = cbfs_create_file_header(CBFS_COMPONENT_RAW,<br>          buffer.size, name);<br>-  if (cbfs_add_entry(&image, &buffer, offset, header) != 0) {<br>+  if (cbfs_add_entry(&image, &buffer, offset, header, NULL) != 0) {<br>             ERROR("Failed to add %llu into ROM image as '%s'.\n",<br>                                       (long long unsigned)u64val, name);<br>            goto done;<br>@@ -303,7 +304,7 @@<br> <br>    header = cbfs_create_file_header(CBFS_COMPONENT_CBFSHEADER,<br>           buffer_size(&buffer), name);<br>-     if (cbfs_add_entry(&image, &buffer, 0, header) != 0) {<br>+       if (cbfs_add_entry(&image, &buffer, 0, header, NULL) != 0) {<br>          ERROR("Failed to add cbfs master header into ROM image.\n");<br>                goto done;<br>    }<br>@@ -333,6 +334,7 @@<br> <br> static int cbfs_add_component(const char *filename,<br>                             const char *name,<br>+                            const char *after,<br>                            uint32_t type,<br>                        uint32_t offset,<br>                              uint32_t headeroffset,<br>@@ -425,7 +427,7 @@<br>             offset = convert_to_from_top_aligned(param.image_region,<br>                                                              -offset);<br> <br>- if (cbfs_add_entry(&image, &buffer, offset, header) != 0) {<br>+  if (cbfs_add_entry(&image, &buffer, offset, header, after) != 0) {<br>            ERROR("Failed to add '%s' into ROM image.\n", filename);<br>            free(header);<br>                 buffer_delete(&buffer);<br>@@ -678,6 +680,7 @@<br> <br>   return cbfs_add_component(param.filename,<br>                               param.name,<br>+                                  param.after,<br>                                  param.type,<br>                                   local_baseaddress,<br>                            param.headeroffset,<br>@@ -700,6 +703,7 @@<br> <br>         return cbfs_add_component(param.filename,<br>                               param.name,<br>+                                  param.after,<br>                                  CBFS_COMPONENT_STAGE,<br>                                 param.baseaddress,<br>                            param.headeroffset,<br>@@ -710,6 +714,7 @@<br> {<br>        return cbfs_add_component(param.filename,<br>                               param.name,<br>+                                  param.after,<br>                                  CBFS_COMPONENT_PAYLOAD,<br>                               param.baseaddress,<br>                            param.headeroffset,<br>@@ -730,6 +735,7 @@<br>    }<br>     return cbfs_add_component(param.filename,<br>                               param.name,<br>+                                  param.after,<br>                                  CBFS_COMPONENT_PAYLOAD,<br>                               param.baseaddress,<br>                            param.headeroffset,<br>@@ -1139,7 +1145,7 @@<br> }<br> <br> static const struct command commands[] = {<br>-     {"add", "H:r:f:n:t:c:b:a:yvA:gh?", cbfs_add, true, true},<br>+        {"add", "H:r:f:n:t:c:b:a:p:yvA:gh?", cbfs_add, true, true},<br>       {"add-flat-binary", "H:r:f:n:l:e:c:b:vA:gh?", cbfs_add_flat_binary,<br>                               true, true},<br>  {"add-payload", "H:r:f:n:t:c:b:C:I:vA:gh?", cbfs_add_payload,<br>@@ -1505,6 +1511,9 @@<br>                                      return 1;<br>                             }<br>                             break;<br>+                       case 'p':<br>+                            param.after = optarg;<br>+                                break;<br>                        case 'P':<br>                             param.pagesize = strtoul(optarg, &suffix, 0);<br>                             if (!*optarg || (suffix && *suffix)) {<br></pre><p>To view, visit <a href="https://review.coreboot.org/22239">change 22239</a>. To unsubscribe, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/22239"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I64bc54fd10a453b4da467bc69d9590e61b0f7ead </div>
<div style="display:none"> Gerrit-Change-Number: 22239 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Daisuke Nojiri <dnojiri@chromium.org> </div>