@@ -110,6 +110,7 @@ int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
int ret;
u32 addr;
u32 size = 0;
+ char buf[32];
if (!ubifs_mounted) {
printf("UBIFS not mounted, use ubifs mount to mount volume first!\n");
@@ -132,12 +133,14 @@ int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
}
debug("Loading file '%s' to address 0x%08x (size %d)\n", filename, addr, size);
- ret = ubifs_load(filename, addr, size);
+ ret = ubifs_load(filename, addr, &size);
if (ret) {
printf("** File not found %s **\n", filename);
ret = CMD_RET_FAILURE;
+ } else {
+ sprintf(buf, "%X", size);
+ setenv("filesize", buf);
}
-
return ret;
}
@@ -677,7 +677,7 @@ error:
return err;
}
-int ubifs_load(char *filename, u32 addr, u32 size)
+int ubifs_load(char *filename, u32 addr, u32 *size)
{
struct ubifs_info *c = ubifs_sb->s_fs_info;
unsigned long inum;
@@ -711,12 +711,12 @@ int ubifs_load(char *filename, u32 addr, u32 size)
* If no size was specified or if size bigger than filesize
* set size to filesize
*/
- if ((size == 0) || (size > inode->i_size))
- size = inode->i_size;
+ if ((*size == 0) || (*size > inode->i_size))
+ *size = inode->i_size;
- count = (size + UBIFS_BLOCK_SIZE - 1) >> UBIFS_BLOCK_SHIFT;
+ count = (*size + UBIFS_BLOCK_SIZE - 1) >> UBIFS_BLOCK_SHIFT;
printf("Loading file '%s' to addr 0x%08x with size %d (0x%08x)...\n",
- filename, addr, size, size);
+ filename, addr, *size, *size);
page.addr = (void *)addr;
page.index = 0;
@@ -725,8 +725,8 @@ int ubifs_load(char *filename, u32 addr, u32 size)
/*
* Make sure to not read beyond the requested size
*/
- if (((i + 1) == count) && (size < inode->i_size))
- last_block_size = size - (i * PAGE_SIZE);
+ if (((i + 1) == count) && (*size < inode->i_size))
+ last_block_size = *size - (i * PAGE_SIZE);
err = do_readpage(c, inode, &page, last_block_size);
if (err)
@@ -2142,7 +2142,7 @@ int ubifs_init(void);
int ubifs_mount(char *vol_name);
void ubifs_umount(struct ubifs_info *c);
int ubifs_ls(char *dir_name);
-int ubifs_load(char *filename, u32 addr, u32 size);
+int ubifs_load(char *filename, u32 addr, u32 *size);
#include "debug.h"
#include "misc.h"