cbfs: Adjust return value of file_cbfs_next_file()

At present this uses a true return to indicate it found a file. Adjust it
to use 0 for this, so it is consistent with other functions.

Update its callers accordingly and add a check for malloc() failure in
file_cbfs_fill_cache().

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Simon Glass 2020-05-24 17:38:15 -06:00 committed by Bin Meng
parent 381e1130a2
commit c7bef7cf90

View File

@ -77,11 +77,12 @@ static void swap_file_header(struct cbfs_fileheader *dest,
* @param used A pointer to the count of of bytes scanned through, * @param used A pointer to the count of of bytes scanned through,
* including the file if one is found. * including the file if one is found.
* *
* @return 1 if a file is found, 0 if one isn't. * @return 0 if a file is found, -ENOENT if one isn't, -EBADF if a bad header
* is found.
*/ */
static int file_cbfs_next_file(struct cbfs_priv *priv, u8 *start, u32 size, static int file_cbfs_next_file(struct cbfs_priv *priv, u8 *start, int size,
u32 align, struct cbfs_cachenode *new_node, int align, struct cbfs_cachenode *new_node,
u32 *used) int *used)
{ {
struct cbfs_fileheader header; struct cbfs_fileheader header;
@ -105,7 +106,7 @@ static int file_cbfs_next_file(struct cbfs_priv *priv, u8 *start, u32 size,
swap_file_header(&header, file_header); swap_file_header(&header, file_header);
if (header.offset < sizeof(struct cbfs_fileheader)) { if (header.offset < sizeof(struct cbfs_fileheader)) {
priv->result = CBFS_BAD_FILE; priv->result = CBFS_BAD_FILE;
return -1; return -EBADF;
} }
new_node->next = NULL; new_node->next = NULL;
new_node->type = header.type; new_node->type = header.type;
@ -122,14 +123,15 @@ static int file_cbfs_next_file(struct cbfs_priv *priv, u8 *start, u32 size,
step = step + align - step % align; step = step + align - step % align;
*used += step; *used += step;
return 1; return 0;
} }
return 0;
return -ENOENT;
} }
/* Look through a CBFS instance and copy file metadata into regular memory. */ /* Look through a CBFS instance and copy file metadata into regular memory. */
static void file_cbfs_fill_cache(struct cbfs_priv *priv, u8 *start, u32 size, static int file_cbfs_fill_cache(struct cbfs_priv *priv, u8 *start, u32 size,
u32 align) u32 align)
{ {
struct cbfs_cachenode *cache_node; struct cbfs_cachenode *cache_node;
struct cbfs_cachenode *new_node; struct cbfs_cachenode *new_node;
@ -145,20 +147,21 @@ static void file_cbfs_fill_cache(struct cbfs_priv *priv, u8 *start, u32 size,
priv->file_cache = NULL; priv->file_cache = NULL;
while (size >= align) { while (size >= align) {
int used;
int ret; int ret;
u32 used;
new_node = (struct cbfs_cachenode *) new_node = (struct cbfs_cachenode *)
malloc(sizeof(struct cbfs_cachenode)); malloc(sizeof(struct cbfs_cachenode));
if (!new_node)
return -ENOMEM;
ret = file_cbfs_next_file(priv, start, size, align, new_node, ret = file_cbfs_next_file(priv, start, size, align, new_node,
&used); &used);
if (ret < 0) { if (ret < 0) {
free(new_node); free(new_node);
return; if (ret == -ENOENT)
} else if (ret == 0) { break;
free(new_node); return ret;
break;
} }
*cache_tail = new_node; *cache_tail = new_node;
cache_tail = &new_node->next; cache_tail = &new_node->next;
@ -167,6 +170,8 @@ static void file_cbfs_fill_cache(struct cbfs_priv *priv, u8 *start, u32 size,
start += used; start += used;
} }
priv->result = CBFS_SUCCESS; priv->result = CBFS_SUCCESS;
return 0;
} }
/* Get the CBFS header out of the ROM and do endian conversion. */ /* Get the CBFS header out of the ROM and do endian conversion. */
@ -341,16 +346,14 @@ const struct cbfs_cachenode *file_cbfs_find_uncached(ulong end_of_rom,
while (size >= align) { while (size >= align) {
int ret; int ret;
u32 used; int used;
ret = file_cbfs_next_file(priv, start, size, align, &node, ret = file_cbfs_next_file(priv, start, size, align, &node,
&used); &used);
if (ret == -ENOENT)
if (ret < 0)
return NULL;
else if (ret == 0)
break; break;
else if (ret)
return NULL;
if (!strcmp(name, node.name)) if (!strcmp(name, node.name))
return &node; return &node;