cbfstool: factor out parsing compression file attributes
cbfstool extract also needs it. Change-Id: I8302bb18c5f797eb0a43ec4e4269790f3d49a896 Signed-off-by: Patrick Georgi <patrick@georgi-clan.de> Reviewed-on: http://review.coreboot.org/11361 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
committed by
Patrick Georgi
parent
c82725c5b9
commit
a71c83fa5c
@@ -178,6 +178,26 @@ static void cbfs_decode_payload_segment(struct cbfs_payload_segment *output,
|
|||||||
assert(seg.size == 0);
|
assert(seg.size == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int cbfs_file_get_compression_info(struct cbfs_file *entry,
|
||||||
|
uint32_t *decompressed_size)
|
||||||
|
{
|
||||||
|
unsigned int compression = CBFS_COMPRESS_NONE;
|
||||||
|
*decompressed_size = ntohl(entry->len);
|
||||||
|
for (struct cbfs_file_attribute *attr = cbfs_file_first_attr(entry);
|
||||||
|
attr != NULL;
|
||||||
|
attr = cbfs_file_next_attr(entry, attr)) {
|
||||||
|
if (ntohl(attr->tag) == CBFS_FILE_ATTR_TAG_COMPRESSION) {
|
||||||
|
struct cbfs_file_attr_compression *ac =
|
||||||
|
(struct cbfs_file_attr_compression *)attr;
|
||||||
|
compression = ntohl(ac->compression);
|
||||||
|
if (decompressed_size)
|
||||||
|
*decompressed_size =
|
||||||
|
ntohl(ac->decompressed_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return compression;
|
||||||
|
}
|
||||||
|
|
||||||
void cbfs_get_header(struct cbfs_header *header, void *src)
|
void cbfs_get_header(struct cbfs_header *header, void *src)
|
||||||
{
|
{
|
||||||
struct buffer outheader;
|
struct buffer outheader;
|
||||||
@@ -777,18 +797,9 @@ int cbfs_print_entry_info(struct cbfs_image *image, struct cbfs_file *entry,
|
|||||||
if (!fp)
|
if (!fp)
|
||||||
fp = stdout;
|
fp = stdout;
|
||||||
|
|
||||||
unsigned int compression = CBFS_COMPRESS_NONE;
|
|
||||||
unsigned int decompressed_size = 0;
|
unsigned int decompressed_size = 0;
|
||||||
for (struct cbfs_file_attribute *attr = cbfs_file_first_attr(entry);
|
unsigned int compression = cbfs_file_get_compression_info(entry,
|
||||||
attr != NULL;
|
&decompressed_size);
|
||||||
attr = cbfs_file_next_attr(entry, attr)) {
|
|
||||||
if (ntohl(attr->tag) == CBFS_FILE_ATTR_TAG_COMPRESSION) {
|
|
||||||
struct cbfs_file_attr_compression *ac =
|
|
||||||
(struct cbfs_file_attr_compression *)attr;
|
|
||||||
compression = ntohl(ac->compression);
|
|
||||||
decompressed_size = ntohl(ac->decompressed_size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (compression == CBFS_COMPRESS_NONE) {
|
if (compression == CBFS_COMPRESS_NONE) {
|
||||||
fprintf(fp, "%-30s 0x%-8x %-12s %d\n",
|
fprintf(fp, "%-30s 0x%-8x %-12s %d\n",
|
||||||
|
Reference in New Issue
Block a user