diff options
Diffstat (limited to 'payloads')
-rw-r--r-- | payloads/libpayload/include/cbfs_core.h | 5 | ||||
-rw-r--r-- | payloads/libpayload/libcbfs/cbfs_core.c | 21 |
2 files changed, 20 insertions, 6 deletions
diff --git a/payloads/libpayload/include/cbfs_core.h b/payloads/libpayload/include/cbfs_core.h index 3878e55f23..ec59a20d72 100644 --- a/payloads/libpayload/include/cbfs_core.h +++ b/payloads/libpayload/include/cbfs_core.h @@ -170,6 +170,11 @@ struct cbfs_file_attribute *cbfs_file_first_attr(struct cbfs_file *file); struct cbfs_file_attribute *cbfs_file_next_attr(struct cbfs_file *file, struct cbfs_file_attribute *attr); +/* Given a cbfs_file and an attribute tag, return the first instance of the + * attribute or NULL if none found. */ +struct cbfs_file_attribute *cbfs_file_find_attr(struct cbfs_file *file, + uint32_t tag); + /*** Component sub-headers ***/ /* Following are component sub-headers for the "standard" diff --git a/payloads/libpayload/libcbfs/cbfs_core.c b/payloads/libpayload/libcbfs/cbfs_core.c index 5a46af8daa..153dc8a939 100644 --- a/payloads/libpayload/libcbfs/cbfs_core.c +++ b/payloads/libpayload/libcbfs/cbfs_core.c @@ -212,12 +212,8 @@ void *cbfs_get_file_content(struct cbfs_media *media, const char *name, void *file_content = (void *)CBFS_SUBHEADER(file); - struct cbfs_file_attribute *attr = cbfs_file_first_attr(file); - while (attr) { - if (ntohl(attr->tag) == CBFS_FILE_ATTR_TAG_COMPRESSION) - break; - attr = cbfs_file_next_attr(file, attr); - } + struct cbfs_file_attribute *attr = + cbfs_file_find_attr(file, CBFS_FILE_ATTR_TAG_COMPRESSION); int compression_algo = CBFS_COMPRESS_NONE; if (attr) { @@ -285,6 +281,19 @@ struct cbfs_file_attribute *cbfs_file_next_attr(struct cbfs_file *file, return next; } +struct cbfs_file_attribute *cbfs_file_find_attr(struct cbfs_file *file, + uint32_t tag) +{ + struct cbfs_file_attribute *attr = cbfs_file_first_attr(file); + while (attr) { + if (ntohl(attr->tag) == tag) + break; + attr = cbfs_file_next_attr(file, attr); + } + return attr; + +} + int cbfs_decompress(int algo, void *src, void *dst, int len) { switch (algo) { |