summaryrefslogtreecommitdiff
path: root/fs/ext2/dev.c
diff options
context:
space:
mode:
authorMarian Balakowicz <m8@semihalf.com>2008-03-12 12:23:02 +0100
committerMarian Balakowicz <m8@semihalf.com>2008-03-12 12:23:02 +0100
commit7e492d8258182e31c988bbf9917d4a3d41949d56 (patch)
treee9c9db79d797cf487107c019537c6bb00b854c6c /fs/ext2/dev.c
parentafe45c87e3c5d77bad76b1a57dccd20764d45b5d (diff)
parent30f1806f60978d707b0cff2d7bf89d141fc24290 (diff)
downloadu-boot-imx-7e492d8258182e31c988bbf9917d4a3d41949d56.zip
u-boot-imx-7e492d8258182e31c988bbf9917d4a3d41949d56.tar.gz
u-boot-imx-7e492d8258182e31c988bbf9917d4a3d41949d56.tar.bz2
Merge branch 'master' of git://www.denx.de/git/u-boot into new-image
Diffstat (limited to 'fs/ext2/dev.c')
-rw-r--r--fs/ext2/dev.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/fs/ext2/dev.c b/fs/ext2/dev.c
index 643a1a8..1728b34 100644
--- a/fs/ext2/dev.c
+++ b/fs/ext2/dev.c
@@ -96,8 +96,23 @@ int ext2fs_devread (int sector, int byte_offset, int byte_len, char *buf) {
sector++;
}
+ if (byte_len == 0)
+ return 1;
+
/* 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;
+ }
+
if (ext2fs_block_dev_desc->block_read (ext2fs_block_dev_desc->dev,
part_info.start + sector,
block_len / SECTOR_SIZE,
@@ -106,6 +121,7 @@ int ext2fs_devread (int sector, int byte_offset, int byte_len, char *buf) {
printf (" ** ext2fs_devread() read error - block\n");
return (0);
}
+ block_len = byte_len & ~(SECTOR_SIZE - 1);
buf += block_len;
byte_len -= block_len;
sector += block_len / SECTOR_SIZE;