summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2020-05-24 17:38:15 -0600
committerBin Meng <bmeng.cn@gmail.com>2020-05-27 14:40:09 +0800
commitc7bef7cf908449c39a23f712644d58a4836e987c (patch)
treeb55addaae14475724d76caff25c387e9cecc0a2b /fs
parent381e1130a2c0cd4cf1d605bf9345673a9240ec30 (diff)
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>
Diffstat (limited to 'fs')
-rw-r--r--fs/cbfs/cbfs.c43
1 files changed, 23 insertions, 20 deletions
diff --git a/fs/cbfs/cbfs.c b/fs/cbfs/cbfs.c
index 91d7af0493..c17f6d6250 100644
--- a/fs/cbfs/cbfs.c
+++ b/fs/cbfs/cbfs.c
@@ -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,
* 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,
- u32 align, struct cbfs_cachenode *new_node,
- u32 *used)
+static int file_cbfs_next_file(struct cbfs_priv *priv, u8 *start, int size,
+ int align, struct cbfs_cachenode *new_node,
+ int *used)
{
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);
if (header.offset < sizeof(struct cbfs_fileheader)) {
priv->result = CBFS_BAD_FILE;
- return -1;
+ return -EBADF;
}
new_node->next = NULL;
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;
*used += step;
- return 1;
+ return 0;
}
- return 0;
+
+ return -ENOENT;
}
/* 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,
- u32 align)
+static int file_cbfs_fill_cache(struct cbfs_priv *priv, u8 *start, u32 size,
+ u32 align)
{
struct cbfs_cachenode *cache_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;
while (size >= align) {
+ int used;
int ret;
- u32 used;
new_node = (struct cbfs_cachenode *)
malloc(sizeof(struct cbfs_cachenode));
+ if (!new_node)
+ return -ENOMEM;
ret = file_cbfs_next_file(priv, start, size, align, new_node,
&used);
if (ret < 0) {
free(new_node);
- return;
- } else if (ret == 0) {
- free(new_node);
- break;
+ if (ret == -ENOENT)
+ break;
+ return ret;
}
*cache_tail = new_node;
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;
}
priv->result = CBFS_SUCCESS;
+
+ return 0;
}
/* 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) {
int ret;
- u32 used;
+ int used;
ret = file_cbfs_next_file(priv, start, size, align, &node,
&used);
-
- if (ret < 0)
- return NULL;
- else if (ret == 0)
+ if (ret == -ENOENT)
break;
-
+ else if (ret)
+ return NULL;
if (!strcmp(name, node.name))
return &node;