ubi: allow to read from volume with offset

Now user can pass an additional parameter 'offset'
to ubi_volume_read() function.

Signed-off-by: Alexey Romanov <avromanov@salutedevices.com>
Reviewed-by: Heiko Schocher <hs@denx.de>
Acked-by: Heiko Schocher <hs@denx.de>
Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
This commit is contained in:
Alexey Romanov
2024-07-18 08:45:23 +03:00
committed by Michael Trimarchi
parent d12689af6c
commit cead69c528
3 changed files with 7 additions and 7 deletions

View File

@@ -428,13 +428,13 @@ int ubi_volume_write(char *volume, void *buf, size_t size)
return ubi_volume_begin_write(volume, buf, size, size); return ubi_volume_begin_write(volume, buf, size, size);
} }
int ubi_volume_read(char *volume, char *buf, size_t size) int ubi_volume_read(char *volume, char *buf, loff_t offset, size_t size)
{ {
int err, lnum, off, len, tbuf_size; int err, lnum, off, len, tbuf_size;
void *tbuf; void *tbuf;
unsigned long long tmp; unsigned long long tmp;
struct ubi_volume *vol; struct ubi_volume *vol;
loff_t offp = 0; loff_t offp = offset;
size_t len_read; size_t len_read;
vol = ubi_find_volume(volume); vol = ubi_find_volume(volume);
@@ -795,7 +795,7 @@ static int do_ubi(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
} }
if (argc == 3) { if (argc == 3) {
return ubi_volume_read(argv[3], (char *)addr, size); return ubi_volume_read(argv[3], (char *)addr, 0, size);
} }
} }

6
env/ubi.c vendored
View File

@@ -134,14 +134,14 @@ static int env_ubi_load(void)
return -EIO; return -EIO;
} }
read1_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME, (void *)tmp_env1, read1_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME, (void *)tmp_env1, 0,
CONFIG_ENV_SIZE); CONFIG_ENV_SIZE);
if (read1_fail) if (read1_fail)
printf("\n** Unable to read env from %s:%s **\n", printf("\n** Unable to read env from %s:%s **\n",
CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME); CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME);
read2_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME_REDUND, read2_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME_REDUND,
(void *)tmp_env2, CONFIG_ENV_SIZE); (void *)tmp_env2, 0, CONFIG_ENV_SIZE);
if (read2_fail) if (read2_fail)
printf("\n** Unable to read redundant env from %s:%s **\n", printf("\n** Unable to read redundant env from %s:%s **\n",
CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME_REDUND); CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME_REDUND);
@@ -171,7 +171,7 @@ static int env_ubi_load(void)
return -EIO; return -EIO;
} }
if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, buf, CONFIG_ENV_SIZE)) { if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, buf, 0, CONFIG_ENV_SIZE)) {
printf("\n** Unable to read env from %s:%s **\n", printf("\n** Unable to read env from %s:%s **\n",
CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME); CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME);
env_set_default(NULL, 0); env_set_default(NULL, 0);

View File

@@ -49,7 +49,7 @@ extern int ubi_init(void);
extern void ubi_exit(void); extern void ubi_exit(void);
extern int ubi_part(char *part_name, const char *vid_header_offset); extern int ubi_part(char *part_name, const char *vid_header_offset);
extern int ubi_volume_write(char *volume, void *buf, size_t size); extern int ubi_volume_write(char *volume, void *buf, size_t size);
extern int ubi_volume_read(char *volume, char *buf, size_t size); extern int ubi_volume_read(char *volume, char *buf, loff_t offset, size_t size);
extern struct ubi_device *ubi_devices[]; extern struct ubi_device *ubi_devices[];
int cmd_ubifs_mount(char *vol_name); int cmd_ubifs_mount(char *vol_name);