[U-Boot] [PATCH 5/8] EXT2: Rework ext2fs_read_symlink()
Marek Vasut
marex at denx.de
Fri Jun 8 19:31:50 CEST 2012
* Fix indent
* Read inode size only once, as it can be reused
Signed-off-by: Marek Vasut <marex at denx.de>
Cc: Wolfgang Denk <wd at denx.de>
---
fs/ext2/ext2fs.c | 45 +++++++++++++++++++++++----------------------
1 file changed, 23 insertions(+), 22 deletions(-)
diff --git a/fs/ext2/ext2fs.c b/fs/ext2/ext2fs.c
index 0d54ae6..22cc9c2 100644
--- a/fs/ext2/ext2fs.c
+++ b/fs/ext2/ext2fs.c
@@ -458,35 +458,36 @@ static char *ext2fs_read_symlink(struct ext2fs_node *node)
char *symlink;
struct ext2fs_node *diro = node;
int status;
+ uint32_t size;
if (!diro->inode_read) {
- status = ext2fs_read_inode (diro->data, diro->ino,
- &diro->inode);
- if (status == 0) {
- return (0);
- }
- }
- symlink = malloc (__le32_to_cpu (diro->inode.size) + 1);
- if (!symlink) {
- return (0);
+ status = ext2fs_read_inode(diro->data, diro->ino, &diro->inode);
+ if (status == 0)
+ return 0;
}
- /* If the filesize of the symlink is bigger than
- 60 the symlink is stored in a separate block,
- otherwise it is stored in the inode. */
- if (__le32_to_cpu (diro->inode.size) <= 60) {
- strncpy (symlink, diro->inode.b.symlink,
- __le32_to_cpu (diro->inode.size));
+
+ size = __le32_to_cpu(diro->inode.size);
+ symlink = malloc(size + 1);
+ if (!symlink)
+ return 0;
+
+ /*
+ * If the filesize of the symlink is bigger than 60 the symlink is
+ * stored in a separate block, otherwise it is stored in the inode.
+ */
+ if (size <= 60) {
+ strncpy(symlink, diro->inode.b.symlink, size);
} else {
- status = ext2fs_read_file (diro, 0,
- __le32_to_cpu (diro->inode.size),
- symlink);
+ status = ext2fs_read_file(diro, 0, size, symlink);
if (status == 0) {
- free (symlink);
- return (0);
+ free(symlink);
+ return 0;
}
}
- symlink[__le32_to_cpu (diro->inode.size)] = '\0';
- return (symlink);
+
+ symlink[size] = '\0';
+
+ return symlink;
}
int ext2fs_find_file1
--
1.7.10
More information about the U-Boot
mailing list