[U-Boot] [PATCH 4/8] EXT2: Rework ext2fs_read_file()
Marek Vasut
marex at denx.de
Fri Jun 8 19:31:49 CEST 2012
* Fix indentation
* Move all definitions of variables to the begining of the function
Signed-off-by: Marek Vasut <marex at denx.de>
Cc: Wolfgang Denk <wd at denx.de>
---
fs/ext2/ext2fs.c | 65 ++++++++++++++++++++++++++++--------------------------
1 file changed, 34 insertions(+), 31 deletions(-)
diff --git a/fs/ext2/ext2fs.c b/fs/ext2/ext2fs.c
index 69fe1d1..0d54ae6 100644
--- a/fs/ext2/ext2fs.c
+++ b/fs/ext2/ext2fs.c
@@ -256,66 +256,69 @@ static int ext2fs_read_block(struct ext2fs_node *node, int fileblock)
return (blknr);
}
-
-int ext2fs_read_file
- (struct ext2fs_node *node, int pos, unsigned int len, char *buf)
+static int ext2fs_read_file(struct ext2fs_node *node, int pos,
+ unsigned int len, char *buf)
{
+ const int log2blocksize = LOG2_EXT2_BLOCK_SIZE (node->data);
+ const int blocksize = 1 << (log2blocksize + DISK_SECTOR_BITS);
+ const unsigned int filesize = __le32_to_cpu(node->inode.size);
+
int i;
int blockcnt;
- int log2blocksize = LOG2_EXT2_BLOCK_SIZE (node->data);
- int blocksize = 1 << (log2blocksize + DISK_SECTOR_BITS);
- unsigned int filesize = __le32_to_cpu(node->inode.size);
+ int status;
+ int blknr;
+ int blockoff;
+ int blockend;
+ int skipfirst;
- /* Adjust len so it we can't read past the end of the file. */
- if (len > filesize) {
+ /* Adjust len so it we can't read past the end of the file. */
+ if (len > filesize)
len = filesize;
- }
+
blockcnt = ((len + pos) + blocksize - 1) / blocksize;
for (i = pos / blocksize; i < blockcnt; i++) {
- int blknr;
- int blockoff = pos % blocksize;
- int blockend = blocksize;
-
- int skipfirst = 0;
+ blockoff = pos % blocksize;
+ blockend = blocksize;
+ skipfirst = 0;
blknr = ext2fs_read_block (node, i);
- if (blknr < 0) {
- return (-1);
- }
+ if (blknr < 0)
+ return -1;
+
blknr = blknr << log2blocksize;
/* Last block. */
if (i == blockcnt - 1) {
blockend = (len + pos) % blocksize;
- /* The last portion is exactly blocksize. */
- if (!blockend) {
+ /* The last portion is exactly blocksize. */
+ if (!blockend)
blockend = blocksize;
- }
}
- /* First block. */
+ /* First block. */
if (i == pos / blocksize) {
skipfirst = blockoff;
blockend -= skipfirst;
}
- /* If the block number is 0 this block is not stored on disk but
- is zero filled instead. */
+ /*
+ * If the block number is 0 this block is not stored on disk
+ * but is zero filled instead.
+ */
if (blknr) {
- int status;
-
- status = ext2fs_devread (blknr, skipfirst, blockend, buf);
- if (status == 0) {
- return (-1);
- }
+ status = ext2fs_devread(blknr, skipfirst, blockend, buf);
+ if (status == 0)
+ return -1;
} else {
- memset (buf, 0, blocksize - skipfirst);
+ memset(buf, 0, blocksize - skipfirst);
}
+
buf += blocksize - skipfirst;
}
- return (len);
+
+ return len;
}
int ext2fs_iterate_dir(struct ext2fs_node *dir, char *name,
--
1.7.10
More information about the U-Boot
mailing list