|
@@ -53,7 +53,7 @@ int ext2fs_set_blk_dev(block_dev_desc_t *rbdd, int part)
|
|
int ext2fs_devread(int sector, int byte_offset, int byte_len, char *buf)
|
|
int ext2fs_devread(int sector, int byte_offset, int byte_len, char *buf)
|
|
{
|
|
{
|
|
char sec_buf[SECTOR_SIZE];
|
|
char sec_buf[SECTOR_SIZE];
|
|
- unsigned block_len;
|
|
|
|
|
|
+ unsigned sectors;
|
|
|
|
|
|
/*
|
|
/*
|
|
* Check partition boundaries
|
|
* Check partition boundaries
|
|
@@ -98,35 +98,23 @@ int ext2fs_devread(int sector, int byte_offset, int byte_len, char *buf)
|
|
sector++;
|
|
sector++;
|
|
}
|
|
}
|
|
|
|
|
|
- if (byte_len == 0)
|
|
|
|
- return 1;
|
|
|
|
-
|
|
|
|
/* read sector aligned part */
|
|
/* read sector aligned part */
|
|
- block_len = byte_len & ~(SECTOR_SIZE - 1);
|
|
|
|
-
|
|
|
|
- if (block_len == 0) {
|
|
|
|
- u8 p[SECTOR_SIZE];
|
|
|
|
-
|
|
|
|
- block_len = SECTOR_SIZE;
|
|
|
|
- ext2fs_block_dev_desc->block_read(ext2fs_block_dev_desc->dev,
|
|
|
|
- part_info.start + sector,
|
|
|
|
- 1, (unsigned long *)p);
|
|
|
|
- memcpy(buf, p, byte_len);
|
|
|
|
- return 1;
|
|
|
|
- }
|
|
|
|
|
|
+ sectors = byte_len / SECTOR_SIZE;
|
|
|
|
+
|
|
|
|
+ if (sectors > 0) {
|
|
|
|
+ if (ext2fs_block_dev_desc->block_read(
|
|
|
|
+ ext2fs_block_dev_desc->dev,
|
|
|
|
+ part_info.start + sector,
|
|
|
|
+ sectors,
|
|
|
|
+ (unsigned long *) buf) != sectors) {
|
|
|
|
+ printf(" ** %s read error - block\n", __func__);
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
|
|
- if (ext2fs_block_dev_desc->block_read(ext2fs_block_dev_desc->dev,
|
|
|
|
- part_info.start + sector,
|
|
|
|
- block_len / SECTOR_SIZE,
|
|
|
|
- (unsigned long *) buf) !=
|
|
|
|
- block_len / SECTOR_SIZE) {
|
|
|
|
- printf(" ** %s read error - block\n", __func__);
|
|
|
|
- return 0;
|
|
|
|
|
|
+ buf += sectors * SECTOR_SIZE;
|
|
|
|
+ byte_len -= sectors * SECTOR_SIZE;
|
|
|
|
+ sector += sectors;
|
|
}
|
|
}
|
|
- block_len = byte_len & ~(SECTOR_SIZE - 1);
|
|
|
|
- buf += block_len;
|
|
|
|
- byte_len -= block_len;
|
|
|
|
- sector += block_len / SECTOR_SIZE;
|
|
|
|
|
|
|
|
if (byte_len != 0) {
|
|
if (byte_len != 0) {
|
|
/* read rest of data which are not in whole sector */
|
|
/* read rest of data which are not in whole sector */
|