#include <common.h>
-#if (CONFIG_COMMANDS & CFG_CMD_EXT2)
-
#include <config.h>
#include <ext2fs.h>
static block_dev_desc_t *ext2fs_block_dev_desc;
static disk_partition_t part_info;
-#undef DEBUG
int ext2fs_set_blk_dev (block_dev_desc_t * rbdd, int part)
{
ext2fs_block_dev_desc = rbdd;
sector += byte_offset >> SECTOR_BITS;
byte_offset &= SECTOR_SIZE - 1;
-#if defined(DEBUG)
- printf (" <%d, %d, %d>\n", sector, byte_offset, byte_len);
-#endif
+ debug (" <%d, %d, %d>\n", sector, byte_offset, byte_len);
if (ext2fs_block_dev_desc == NULL) {
printf ("** Invalid Block Device Descriptor (NULL)\n");
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,
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;
}
return (1);
}
-#endif /* CFG_CMD_EXT2FS */