libpayload: provide cbfs_file_find_attr()

cbfs_file_find_attr(file, tag) finds the first attribute of file with
the given tag.

Change-Id: I78ee3b996b4b086605244c5d7d57ef7e3fc1db47
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Reviewed-on: http://review.coreboot.org/11678
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Tested-by: build bot (Jenkins)
This commit is contained in:
Patrick Georgi 2015-09-17 20:45:52 +02:00 committed by Patrick Georgi
parent 1bb487c474
commit eb33b3f80e
2 changed files with 20 additions and 6 deletions

View File

@ -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 *cbfs_file_next_attr(struct cbfs_file *file,
struct cbfs_file_attribute *attr); 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 ***/ /*** Component sub-headers ***/
/* Following are component sub-headers for the "standard" /* Following are component sub-headers for the "standard"

View File

@ -212,12 +212,8 @@ void *cbfs_get_file_content(struct cbfs_media *media, const char *name,
void *file_content = (void *)CBFS_SUBHEADER(file); void *file_content = (void *)CBFS_SUBHEADER(file);
struct cbfs_file_attribute *attr = cbfs_file_first_attr(file); struct cbfs_file_attribute *attr =
while (attr) { cbfs_file_find_attr(file, CBFS_FILE_ATTR_TAG_COMPRESSION);
if (ntohl(attr->tag) == CBFS_FILE_ATTR_TAG_COMPRESSION)
break;
attr = cbfs_file_next_attr(file, attr);
}
int compression_algo = CBFS_COMPRESS_NONE; int compression_algo = CBFS_COMPRESS_NONE;
if (attr) { if (attr) {
@ -285,6 +281,19 @@ struct cbfs_file_attribute *cbfs_file_next_attr(struct cbfs_file *file,
return next; 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) int cbfs_decompress(int algo, void *src, void *dst, int len)
{ {
switch (algo) { switch (algo) {