void ext2fs_swap_ext_attr(ext2_filsys fs, char *to, char *from) { struct ext2_ext_attr_header *from_header = (struct ext2_ext_attr_header *)from; struct ext2_ext_attr_header *to_header = (struct ext2_ext_attr_header *)to; struct ext2_ext_attr_entry *from_entry, *to_entry; char *from_end = (char *)from_header + fs->blocksize; int n; if (to_header != from_header) memcpy(to_header, from_header, fs->blocksize); to_header->h_magic = ext2fs_swab32(from_header->h_magic); to_header->h_blocks = ext2fs_swab32(from_header->h_blocks); to_header->h_refcount = ext2fs_swab32(from_header->h_refcount); for (n=0; n<4; n++) to_header->h_reserved[n] = ext2fs_swab32(from_header->h_reserved[n]); from_entry = (struct ext2_ext_attr_entry *)(from_header+1); to_entry = (struct ext2_ext_attr_entry *)(to_header+1); while ((char *)from_entry < from_end && *(__u32 *)from_entry) { to_entry->e_value_offs = ext2fs_swab16(from_entry->e_value_offs); to_entry->e_value_block = ext2fs_swab32(from_entry->e_value_block); to_entry->e_value_size = ext2fs_swab32(from_entry->e_value_size); from_entry = EXT2_EXT_ATTR_NEXT(from_entry); to_entry = EXT2_EXT_ATTR_NEXT(to_entry); } }
void ext2fs_swap_ext_attr(char *to, char *from, int bufsize, int has_header) { struct ext2_ext_attr_header *from_header = (struct ext2_ext_attr_header *)from; struct ext2_ext_attr_header *to_header = (struct ext2_ext_attr_header *)to; struct ext2_ext_attr_entry *from_entry, *to_entry; char *from_end = (char *)from_header + bufsize; if (to_header != from_header) memcpy(to_header, from_header, bufsize); if (has_header) { ext2fs_swap_ext_attr_header(to_header, from_header); from_entry = (struct ext2_ext_attr_entry *)(from_header+1); to_entry = (struct ext2_ext_attr_entry *)(to_header+1); } else { from_entry = (struct ext2_ext_attr_entry *)from_header; to_entry = (struct ext2_ext_attr_entry *)to_header; } while ((char *)from_entry < from_end && *(__u32 *)from_entry) { ext2fs_swap_ext_attr_entry(to_entry, from_entry); from_entry = EXT2_EXT_ATTR_NEXT(from_entry); to_entry = EXT2_EXT_ATTR_NEXT(to_entry); } }