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:
parent
381e1130a2
commit
c7bef7cf90
@ -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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user