X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=second%2Ffs_ext2.c;h=41a3c79cce2096ac513e9135ccb677b072a67f4f;hb=e915b0ad8c6b5a2fa25c59bd56ae752f8c2c799d;hp=d24450d5c92b5b0105a7597907b54ef2ee2f2fc5;hpb=1f0f86b8e9cb113674bec055c2d0f182a28a5bd2;p=yaboot.git diff --git a/second/fs_ext2.c b/second/fs_ext2.c index d24450d..41a3c79 100644 --- a/second/fs_ext2.c +++ b/second/fs_ext2.c @@ -54,6 +54,7 @@ static int ext2_read( struct boot_file_t* file, static int ext2_seek( struct boot_file_t* file, unsigned int newpos); static int ext2_close( struct boot_file_t* file); +static int ext2_ino_size(struct boot_file_t *file, unsigned int *size); struct fs_t ext2_filesystem = { @@ -61,7 +62,8 @@ struct fs_t ext2_filesystem = ext2_open, ext2_read, ext2_seek, - ext2_close + ext2_close, + ext2_ino_size, }; /* IO manager structure for the ext2 library */ @@ -107,7 +109,7 @@ static unsigned long read_total; static unsigned long read_max; static struct boot_file_t* read_cur_file; static errcode_t read_result; -static char* read_buffer; +static unsigned char* read_buffer; static int read_dump_range(void); static int read_iterator(ext2_filsys fs, blk_t *blocknr, int lg_block, void *private); @@ -139,7 +141,8 @@ ext2_open( struct boot_file_t* file, DEBUG_LEAVE(FILE_ERR_FSBUSY); return FILE_ERR_FSBUSY; } - if (file->device_kind != FILE_DEVICE_BLOCK) { + if (file->device_kind != FILE_DEVICE_BLOCK + && file->device_kind != FILE_DEVICE_ISCSI) { DEBUG_LEAVE(FILE_ERR_BADDEV); return FILE_ERR_BADDEV; } @@ -564,6 +567,17 @@ ext2_close( struct boot_file_t* file) return 0; } +static int ext2_ino_size(struct boot_file_t *file, unsigned int *size) +{ + struct ext2_inode ei; + + if (ext2fs_read_inode(fs, file->inode, &ei)) + return FILE_IOERR; + + *size = ei.i_size; + return FILE_ERR_OK; +} + static errcode_t linux_open (const char *name, int flags, io_channel * channel) { io_channel io;