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:

committed by
Michael Trimarchi

parent
d12689af6c
commit
cead69c528
@@ -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
6
env/ubi.c
vendored
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user