cbfs: Adjust return value of file_cbfs_next_file()
authorSimon Glass <sjg@chromium.org>
Sun, 24 May 2020 23:38:15 +0000 (17:38 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Wed, 27 May 2020 06:40:09 +0000 (14:40 +0800)
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>
fs/cbfs/cbfs.c

index 91d7af0493f800e38a1bf823c2ace461293533b1..c17f6d62505a24eb0a52509d6fa7f6fac01ecee8 100644 (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,
  *                     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;