]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
libext2fs: define new dirent_swab interfaces for inline data
authorZheng Liu <wenqing.lz@taobao.com>
Mon, 3 Mar 2014 05:24:30 +0000 (00:24 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Mon, 3 Mar 2014 05:24:33 +0000 (00:24 -0500)
Later we will use ext2fs_dirent_swab_in/out to handle big-endian problem
for inline data.  Now interfaces assume that it handles a block, but it
is not true after adding inline data.  So this commit defines a new
interface for inline data.

Signed-off-by: Zheng Liu <wenqing.lz@taobao.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/ext2fs/ext2fs.h
lib/ext2fs/swapfs.c

index dd6404e361565eb007da3caa5c0658785d10822c..b526f5c3fed0b993dc46c6e884919ca7b9333685 100644 (file)
@@ -1546,7 +1546,11 @@ extern errcode_t ext2fs_read_bb_FILE(ext2_filsys fs, FILE *f,
 extern errcode_t ext2fs_create_resize_inode(ext2_filsys fs);
 
 /* swapfs.c */
+extern errcode_t ext2fs_dirent_swab_in2(ext2_filsys fs, char *buf, size_t size,
+                                       int flags);
 extern errcode_t ext2fs_dirent_swab_in(ext2_filsys fs, char *buf, int flags);
+extern errcode_t ext2fs_dirent_swab_out2(ext2_filsys fs, char *buf, size_t size,
+                                        int flags);
 extern errcode_t ext2fs_dirent_swab_out(ext2_filsys fs, char *buf, int flags);
 extern void ext2fs_swap_ext_attr(char *to, char *from, int bufsize,
                                 int has_header);
index d72b66646ee96b64b21528bcdaffb8630cd11c36..760f25f0948639fa7e31e6f9272ab3872f97b725 100644 (file)
@@ -355,6 +355,12 @@ void ext2fs_swap_mmp(struct mmp_struct *mmp)
 }
 
 errcode_t ext2fs_dirent_swab_in(ext2_filsys fs, char *buf, int flags)
+{
+       return ext2fs_dirent_swab_in(fs, buf, fs->blocksize, flags);
+}
+
+errcode_t ext2fs_dirent_swab_in2(ext2_filsys fs, char *buf,
+                                size_t size, int flags)
 {
        errcode_t       retval;
        char            *p, *end;
@@ -362,7 +368,7 @@ errcode_t ext2fs_dirent_swab_in(ext2_filsys fs, char *buf, int flags)
        unsigned int    name_len, rec_len;
 
        p = (char *) buf;
-       end = (char *) buf + fs->blocksize;
+       end = (char *) buf + size;
        while (p < end-8) {
                dirent = (struct ext2_dir_entry *) p;
                dirent->inode = ext2fs_swab32(dirent->inode);
@@ -386,6 +392,12 @@ errcode_t ext2fs_dirent_swab_in(ext2_filsys fs, char *buf, int flags)
 }
 
 errcode_t ext2fs_dirent_swab_out(ext2_filsys fs, char *buf, int flags)
+{
+       return ext2fs_dirent_swab_out2(fs, buf, fs->blocksize, flags);
+}
+
+errcode_t ext2fs_dirent_swab_out2(ext2_filsys fs, char *buf,
+                                 size_t size, int flags)
 {
        errcode_t       retval;
        char            *p, *end;
@@ -393,7 +405,7 @@ errcode_t ext2fs_dirent_swab_out(ext2_filsys fs, char *buf, int flags)
        struct ext2_dir_entry *dirent;
 
        p = buf;
-       end = buf + fs->blocksize;
+       end = buf + size;
        while (p < end) {
                dirent = (struct ext2_dir_entry *) p;
                retval = ext2fs_get_rec_len(fs, dirent, &rec_len);