1*79398b25SAndroid Build Coastguard Worker #ifndef SQUASHFS_FS 2*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_FS 3*79398b25SAndroid Build Coastguard Worker /* 4*79398b25SAndroid Build Coastguard Worker * Squashfs 5*79398b25SAndroid Build Coastguard Worker * 6*79398b25SAndroid Build Coastguard Worker * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008 7*79398b25SAndroid Build Coastguard Worker * Phillip Lougher <[email protected]> 8*79398b25SAndroid Build Coastguard Worker * 9*79398b25SAndroid Build Coastguard Worker * This program is free software; you can redistribute it and/or 10*79398b25SAndroid Build Coastguard Worker * modify it under the terms of the GNU General Public License 11*79398b25SAndroid Build Coastguard Worker * as published by the Free Software Foundation; either version 2, 12*79398b25SAndroid Build Coastguard Worker * or (at your option) any later version. 13*79398b25SAndroid Build Coastguard Worker * 14*79398b25SAndroid Build Coastguard Worker * This program is distributed in the hope that it will be useful, 15*79398b25SAndroid Build Coastguard Worker * but WITHOUT ANY WARRANTY; without even the implied warranty of 16*79398b25SAndroid Build Coastguard Worker * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17*79398b25SAndroid Build Coastguard Worker * GNU General Public License for more details. 18*79398b25SAndroid Build Coastguard Worker * 19*79398b25SAndroid Build Coastguard Worker * You should have received a copy of the GNU General Public License 20*79398b25SAndroid Build Coastguard Worker * along with this program; if not, write to the Free Software 21*79398b25SAndroid Build Coastguard Worker * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 22*79398b25SAndroid Build Coastguard Worker * 23*79398b25SAndroid Build Coastguard Worker * squashfs_fs.h 24*79398b25SAndroid Build Coastguard Worker */ 25*79398b25SAndroid Build Coastguard Worker 26*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE 27*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_MAJOR 4 28*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_MINOR 0 29*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_MAGIC 0x73717368 30*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_START 0 31*79398b25SAndroid Build Coastguard Worker 32*79398b25SAndroid Build Coastguard Worker /* size of metadata (inode and directory) blocks */ 33*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_METADATA_SIZE 8192 34*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_METADATA_LOG 13 35*79398b25SAndroid Build Coastguard Worker 36*79398b25SAndroid Build Coastguard Worker /* default size of data blocks */ 37*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_FILE_SIZE 131072 38*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_FILE_LOG 17 39*79398b25SAndroid Build Coastguard Worker 40*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_FILE_MAX_SIZE 1048576 41*79398b25SAndroid Build Coastguard Worker 42*79398b25SAndroid Build Coastguard Worker /* Max number of uids and gids */ 43*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_IDS 65536 44*79398b25SAndroid Build Coastguard Worker 45*79398b25SAndroid Build Coastguard Worker /* Max length of filename (not 255) */ 46*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_NAME_LEN 256 47*79398b25SAndroid Build Coastguard Worker 48*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_INVALID_FRAG (0xffffffffU) 49*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_INVALID_BLK (-1LL) 50*79398b25SAndroid Build Coastguard Worker 51*79398b25SAndroid Build Coastguard Worker /* Filesystem flags */ 52*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_NOI 0 53*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_NOD 1 54*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_NOF 3 55*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_NO_FRAG 4 56*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_ALWAYS_FRAG 5 57*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_DUPLICATE 6 58*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_EXPORT 7 59*79398b25SAndroid Build Coastguard Worker 60*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1) 61*79398b25SAndroid Build Coastguard Worker 62*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \ 63*79398b25SAndroid Build Coastguard Worker SQUASHFS_NOI) 64*79398b25SAndroid Build Coastguard Worker 65*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \ 66*79398b25SAndroid Build Coastguard Worker SQUASHFS_NOD) 67*79398b25SAndroid Build Coastguard Worker 68*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ 69*79398b25SAndroid Build Coastguard Worker SQUASHFS_NOF) 70*79398b25SAndroid Build Coastguard Worker 71*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ 72*79398b25SAndroid Build Coastguard Worker SQUASHFS_NO_FRAG) 73*79398b25SAndroid Build Coastguard Worker 74*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ 75*79398b25SAndroid Build Coastguard Worker SQUASHFS_ALWAYS_FRAG) 76*79398b25SAndroid Build Coastguard Worker 77*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \ 78*79398b25SAndroid Build Coastguard Worker SQUASHFS_DUPLICATE) 79*79398b25SAndroid Build Coastguard Worker 80*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_EXPORTABLE(flags) SQUASHFS_BIT(flags, \ 81*79398b25SAndroid Build Coastguard Worker SQUASHFS_EXPORT) 82*79398b25SAndroid Build Coastguard Worker 83*79398b25SAndroid Build Coastguard Worker /* Max number of types and file types */ 84*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_DIR_TYPE 1 85*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_REG_TYPE 2 86*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_SYMLINK_TYPE 3 87*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_BLKDEV_TYPE 4 88*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_CHRDEV_TYPE 5 89*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_FIFO_TYPE 6 90*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_SOCKET_TYPE 7 91*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_LDIR_TYPE 8 92*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_LREG_TYPE 9 93*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_LSYMLINK_TYPE 10 94*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_LBLKDEV_TYPE 11 95*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_LCHRDEV_TYPE 12 96*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_LFIFO_TYPE 13 97*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_LSOCKET_TYPE 14 98*79398b25SAndroid Build Coastguard Worker 99*79398b25SAndroid Build Coastguard Worker /* Flag whether block is compressed or uncompressed, bit is set if block is 100*79398b25SAndroid Build Coastguard Worker * uncompressed */ 101*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_COMPRESSED_BIT (1 << 15) 102*79398b25SAndroid Build Coastguard Worker 103*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \ 104*79398b25SAndroid Build Coastguard Worker (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT) 105*79398b25SAndroid Build Coastguard Worker 106*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT)) 107*79398b25SAndroid Build Coastguard Worker 108*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24) 109*79398b25SAndroid Build Coastguard Worker 110*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) ((B) & \ 111*79398b25SAndroid Build Coastguard Worker ~SQUASHFS_COMPRESSED_BIT_BLOCK) 112*79398b25SAndroid Build Coastguard Worker 113*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK)) 114*79398b25SAndroid Build Coastguard Worker 115*79398b25SAndroid Build Coastguard Worker /* 116*79398b25SAndroid Build Coastguard Worker * Inode number ops. Inodes consist of a compressed block number, and an 117*79398b25SAndroid Build Coastguard Worker * uncompressed offset within that block 118*79398b25SAndroid Build Coastguard Worker */ 119*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_INODE_BLK(A) ((unsigned int) ((A) >> 16)) 120*79398b25SAndroid Build Coastguard Worker 121*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_INODE_OFFSET(A) ((unsigned int) ((A) & 0xffff)) 122*79398b25SAndroid Build Coastguard Worker 123*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_MKINODE(A, B) ((long long)(((long long) (A)\ 124*79398b25SAndroid Build Coastguard Worker << 16) + (B))) 125*79398b25SAndroid Build Coastguard Worker 126*79398b25SAndroid Build Coastguard Worker /* Translate between VFS mode and squashfs mode */ 127*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_MODE(A) ((A) & 0xfff) 128*79398b25SAndroid Build Coastguard Worker 129*79398b25SAndroid Build Coastguard Worker /* fragment and fragment table defines */ 130*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_FRAGMENT_BYTES(A) \ 131*79398b25SAndroid Build Coastguard Worker ((A) * sizeof(struct squashfs_fragment_entry)) 132*79398b25SAndroid Build Coastguard Worker 133*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \ 134*79398b25SAndroid Build Coastguard Worker SQUASHFS_METADATA_SIZE) 135*79398b25SAndroid Build Coastguard Worker 136*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \ 137*79398b25SAndroid Build Coastguard Worker SQUASHFS_METADATA_SIZE) 138*79398b25SAndroid Build Coastguard Worker 139*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \ 140*79398b25SAndroid Build Coastguard Worker SQUASHFS_METADATA_SIZE - 1) / \ 141*79398b25SAndroid Build Coastguard Worker SQUASHFS_METADATA_SIZE) 142*79398b25SAndroid Build Coastguard Worker 143*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\ 144*79398b25SAndroid Build Coastguard Worker sizeof(long long)) 145*79398b25SAndroid Build Coastguard Worker 146*79398b25SAndroid Build Coastguard Worker /* inode lookup table defines */ 147*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_LOOKUP_BYTES(A) ((A) * sizeof(long long)) 148*79398b25SAndroid Build Coastguard Worker 149*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_LOOKUP_BLOCK(A) (SQUASHFS_LOOKUP_BYTES(A) / \ 150*79398b25SAndroid Build Coastguard Worker SQUASHFS_METADATA_SIZE) 151*79398b25SAndroid Build Coastguard Worker 152*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_LOOKUP_BLOCK_OFFSET(A) (SQUASHFS_LOOKUP_BYTES(A) % \ 153*79398b25SAndroid Build Coastguard Worker SQUASHFS_METADATA_SIZE) 154*79398b25SAndroid Build Coastguard Worker 155*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_LOOKUP_BLOCKS(A) ((SQUASHFS_LOOKUP_BYTES(A) + \ 156*79398b25SAndroid Build Coastguard Worker SQUASHFS_METADATA_SIZE - 1) / \ 157*79398b25SAndroid Build Coastguard Worker SQUASHFS_METADATA_SIZE) 158*79398b25SAndroid Build Coastguard Worker 159*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_LOOKUP_BLOCK_BYTES(A) (SQUASHFS_LOOKUP_BLOCKS(A) *\ 160*79398b25SAndroid Build Coastguard Worker sizeof(long long)) 161*79398b25SAndroid Build Coastguard Worker 162*79398b25SAndroid Build Coastguard Worker /* uid/gid lookup table defines */ 163*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_ID_BYTES(A) ((A) * sizeof(unsigned int)) 164*79398b25SAndroid Build Coastguard Worker 165*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_ID_BLOCK(A) (SQUASHFS_ID_BYTES(A) / \ 166*79398b25SAndroid Build Coastguard Worker SQUASHFS_METADATA_SIZE) 167*79398b25SAndroid Build Coastguard Worker 168*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_ID_BLOCK_OFFSET(A) (SQUASHFS_ID_BYTES(A) % \ 169*79398b25SAndroid Build Coastguard Worker SQUASHFS_METADATA_SIZE) 170*79398b25SAndroid Build Coastguard Worker 171*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_ID_BLOCKS(A) ((SQUASHFS_ID_BYTES(A) + \ 172*79398b25SAndroid Build Coastguard Worker SQUASHFS_METADATA_SIZE - 1) / \ 173*79398b25SAndroid Build Coastguard Worker SQUASHFS_METADATA_SIZE) 174*79398b25SAndroid Build Coastguard Worker 175*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_ID_BLOCK_BYTES(A) (SQUASHFS_ID_BLOCKS(A) *\ 176*79398b25SAndroid Build Coastguard Worker sizeof(long long)) 177*79398b25SAndroid Build Coastguard Worker 178*79398b25SAndroid Build Coastguard Worker /* cached data constants for filesystem */ 179*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_CACHED_BLKS 8 180*79398b25SAndroid Build Coastguard Worker 181*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_MAX_FILE_SIZE_LOG 64 182*79398b25SAndroid Build Coastguard Worker 183*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_MAX_FILE_SIZE (1LL << \ 184*79398b25SAndroid Build Coastguard Worker (SQUASHFS_MAX_FILE_SIZE_LOG - 2)) 185*79398b25SAndroid Build Coastguard Worker 186*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_MARKER_BYTE 0xff 187*79398b25SAndroid Build Coastguard Worker 188*79398b25SAndroid Build Coastguard Worker /* meta index cache */ 189*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int)) 190*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_META_ENTRIES 127 191*79398b25SAndroid Build Coastguard Worker #define SQUASHFS_META_SLOTS 8 192*79398b25SAndroid Build Coastguard Worker 193*79398b25SAndroid Build Coastguard Worker struct meta_entry { 194*79398b25SAndroid Build Coastguard Worker long long data_block; 195*79398b25SAndroid Build Coastguard Worker unsigned int index_block; 196*79398b25SAndroid Build Coastguard Worker unsigned short offset; 197*79398b25SAndroid Build Coastguard Worker unsigned short pad; 198*79398b25SAndroid Build Coastguard Worker }; 199*79398b25SAndroid Build Coastguard Worker 200*79398b25SAndroid Build Coastguard Worker struct meta_index { 201*79398b25SAndroid Build Coastguard Worker unsigned int inode_number; 202*79398b25SAndroid Build Coastguard Worker unsigned int offset; 203*79398b25SAndroid Build Coastguard Worker unsigned short entries; 204*79398b25SAndroid Build Coastguard Worker unsigned short skip; 205*79398b25SAndroid Build Coastguard Worker unsigned short locked; 206*79398b25SAndroid Build Coastguard Worker unsigned short pad; 207*79398b25SAndroid Build Coastguard Worker struct meta_entry meta_entry[SQUASHFS_META_ENTRIES]; 208*79398b25SAndroid Build Coastguard Worker }; 209*79398b25SAndroid Build Coastguard Worker 210*79398b25SAndroid Build Coastguard Worker 211*79398b25SAndroid Build Coastguard Worker /* 212*79398b25SAndroid Build Coastguard Worker * definitions for structures on disk 213*79398b25SAndroid Build Coastguard Worker */ 214*79398b25SAndroid Build Coastguard Worker #define ZLIB_COMPRESSION 1 215*79398b25SAndroid Build Coastguard Worker 216*79398b25SAndroid Build Coastguard Worker struct squashfs_super_block { 217*79398b25SAndroid Build Coastguard Worker __le32 s_magic; 218*79398b25SAndroid Build Coastguard Worker __le32 inodes; 219*79398b25SAndroid Build Coastguard Worker __le32 mkfs_time; 220*79398b25SAndroid Build Coastguard Worker __le32 block_size; 221*79398b25SAndroid Build Coastguard Worker __le32 fragments; 222*79398b25SAndroid Build Coastguard Worker __le16 compression; 223*79398b25SAndroid Build Coastguard Worker __le16 block_log; 224*79398b25SAndroid Build Coastguard Worker __le16 flags; 225*79398b25SAndroid Build Coastguard Worker __le16 no_ids; 226*79398b25SAndroid Build Coastguard Worker __le16 s_major; 227*79398b25SAndroid Build Coastguard Worker __le16 s_minor; 228*79398b25SAndroid Build Coastguard Worker __le64 root_inode; 229*79398b25SAndroid Build Coastguard Worker __le64 bytes_used; 230*79398b25SAndroid Build Coastguard Worker __le64 id_table_start; 231*79398b25SAndroid Build Coastguard Worker __le64 xattr_table_start; 232*79398b25SAndroid Build Coastguard Worker __le64 inode_table_start; 233*79398b25SAndroid Build Coastguard Worker __le64 directory_table_start; 234*79398b25SAndroid Build Coastguard Worker __le64 fragment_table_start; 235*79398b25SAndroid Build Coastguard Worker __le64 lookup_table_start; 236*79398b25SAndroid Build Coastguard Worker }; 237*79398b25SAndroid Build Coastguard Worker 238*79398b25SAndroid Build Coastguard Worker struct squashfs_dir_index { 239*79398b25SAndroid Build Coastguard Worker __le32 index; 240*79398b25SAndroid Build Coastguard Worker __le32 start_block; 241*79398b25SAndroid Build Coastguard Worker __le32 size; 242*79398b25SAndroid Build Coastguard Worker unsigned char name[0]; 243*79398b25SAndroid Build Coastguard Worker }; 244*79398b25SAndroid Build Coastguard Worker 245*79398b25SAndroid Build Coastguard Worker struct squashfs_base_inode { 246*79398b25SAndroid Build Coastguard Worker __le16 inode_type; 247*79398b25SAndroid Build Coastguard Worker __le16 mode; 248*79398b25SAndroid Build Coastguard Worker __le16 uid; 249*79398b25SAndroid Build Coastguard Worker __le16 guid; 250*79398b25SAndroid Build Coastguard Worker __le32 mtime; 251*79398b25SAndroid Build Coastguard Worker __le32 inode_number; 252*79398b25SAndroid Build Coastguard Worker }; 253*79398b25SAndroid Build Coastguard Worker 254*79398b25SAndroid Build Coastguard Worker struct squashfs_ipc_inode { 255*79398b25SAndroid Build Coastguard Worker __le16 inode_type; 256*79398b25SAndroid Build Coastguard Worker __le16 mode; 257*79398b25SAndroid Build Coastguard Worker __le16 uid; 258*79398b25SAndroid Build Coastguard Worker __le16 guid; 259*79398b25SAndroid Build Coastguard Worker __le32 mtime; 260*79398b25SAndroid Build Coastguard Worker __le32 inode_number; 261*79398b25SAndroid Build Coastguard Worker __le32 nlink; 262*79398b25SAndroid Build Coastguard Worker }; 263*79398b25SAndroid Build Coastguard Worker 264*79398b25SAndroid Build Coastguard Worker struct squashfs_dev_inode { 265*79398b25SAndroid Build Coastguard Worker __le16 inode_type; 266*79398b25SAndroid Build Coastguard Worker __le16 mode; 267*79398b25SAndroid Build Coastguard Worker __le16 uid; 268*79398b25SAndroid Build Coastguard Worker __le16 guid; 269*79398b25SAndroid Build Coastguard Worker __le32 mtime; 270*79398b25SAndroid Build Coastguard Worker __le32 inode_number; 271*79398b25SAndroid Build Coastguard Worker __le32 nlink; 272*79398b25SAndroid Build Coastguard Worker __le32 rdev; 273*79398b25SAndroid Build Coastguard Worker }; 274*79398b25SAndroid Build Coastguard Worker 275*79398b25SAndroid Build Coastguard Worker struct squashfs_symlink_inode { 276*79398b25SAndroid Build Coastguard Worker __le16 inode_type; 277*79398b25SAndroid Build Coastguard Worker __le16 mode; 278*79398b25SAndroid Build Coastguard Worker __le16 uid; 279*79398b25SAndroid Build Coastguard Worker __le16 guid; 280*79398b25SAndroid Build Coastguard Worker __le32 mtime; 281*79398b25SAndroid Build Coastguard Worker __le32 inode_number; 282*79398b25SAndroid Build Coastguard Worker __le32 nlink; 283*79398b25SAndroid Build Coastguard Worker __le32 symlink_size; 284*79398b25SAndroid Build Coastguard Worker char symlink[0]; 285*79398b25SAndroid Build Coastguard Worker }; 286*79398b25SAndroid Build Coastguard Worker 287*79398b25SAndroid Build Coastguard Worker struct squashfs_reg_inode { 288*79398b25SAndroid Build Coastguard Worker __le16 inode_type; 289*79398b25SAndroid Build Coastguard Worker __le16 mode; 290*79398b25SAndroid Build Coastguard Worker __le16 uid; 291*79398b25SAndroid Build Coastguard Worker __le16 guid; 292*79398b25SAndroid Build Coastguard Worker __le32 mtime; 293*79398b25SAndroid Build Coastguard Worker __le32 inode_number; 294*79398b25SAndroid Build Coastguard Worker __le32 start_block; 295*79398b25SAndroid Build Coastguard Worker __le32 fragment; 296*79398b25SAndroid Build Coastguard Worker __le32 offset; 297*79398b25SAndroid Build Coastguard Worker __le32 file_size; 298*79398b25SAndroid Build Coastguard Worker __le16 block_list[0]; 299*79398b25SAndroid Build Coastguard Worker }; 300*79398b25SAndroid Build Coastguard Worker 301*79398b25SAndroid Build Coastguard Worker struct squashfs_lreg_inode { 302*79398b25SAndroid Build Coastguard Worker __le16 inode_type; 303*79398b25SAndroid Build Coastguard Worker __le16 mode; 304*79398b25SAndroid Build Coastguard Worker __le16 uid; 305*79398b25SAndroid Build Coastguard Worker __le16 guid; 306*79398b25SAndroid Build Coastguard Worker __le32 mtime; 307*79398b25SAndroid Build Coastguard Worker __le32 inode_number; 308*79398b25SAndroid Build Coastguard Worker __le64 start_block; 309*79398b25SAndroid Build Coastguard Worker __le64 file_size; 310*79398b25SAndroid Build Coastguard Worker __le64 sparse; 311*79398b25SAndroid Build Coastguard Worker __le32 nlink; 312*79398b25SAndroid Build Coastguard Worker __le32 fragment; 313*79398b25SAndroid Build Coastguard Worker __le32 offset; 314*79398b25SAndroid Build Coastguard Worker __le32 xattr; 315*79398b25SAndroid Build Coastguard Worker __le16 block_list[0]; 316*79398b25SAndroid Build Coastguard Worker }; 317*79398b25SAndroid Build Coastguard Worker 318*79398b25SAndroid Build Coastguard Worker struct squashfs_dir_inode { 319*79398b25SAndroid Build Coastguard Worker __le16 inode_type; 320*79398b25SAndroid Build Coastguard Worker __le16 mode; 321*79398b25SAndroid Build Coastguard Worker __le16 uid; 322*79398b25SAndroid Build Coastguard Worker __le16 guid; 323*79398b25SAndroid Build Coastguard Worker __le32 mtime; 324*79398b25SAndroid Build Coastguard Worker __le32 inode_number; 325*79398b25SAndroid Build Coastguard Worker __le32 start_block; 326*79398b25SAndroid Build Coastguard Worker __le32 nlink; 327*79398b25SAndroid Build Coastguard Worker __le16 file_size; 328*79398b25SAndroid Build Coastguard Worker __le16 offset; 329*79398b25SAndroid Build Coastguard Worker __le32 parent_inode; 330*79398b25SAndroid Build Coastguard Worker }; 331*79398b25SAndroid Build Coastguard Worker 332*79398b25SAndroid Build Coastguard Worker struct squashfs_ldir_inode { 333*79398b25SAndroid Build Coastguard Worker __le16 inode_type; 334*79398b25SAndroid Build Coastguard Worker __le16 mode; 335*79398b25SAndroid Build Coastguard Worker __le16 uid; 336*79398b25SAndroid Build Coastguard Worker __le16 guid; 337*79398b25SAndroid Build Coastguard Worker __le32 mtime; 338*79398b25SAndroid Build Coastguard Worker __le32 inode_number; 339*79398b25SAndroid Build Coastguard Worker __le32 nlink; 340*79398b25SAndroid Build Coastguard Worker __le32 file_size; 341*79398b25SAndroid Build Coastguard Worker __le32 start_block; 342*79398b25SAndroid Build Coastguard Worker __le32 parent_inode; 343*79398b25SAndroid Build Coastguard Worker __le16 i_count; 344*79398b25SAndroid Build Coastguard Worker __le16 offset; 345*79398b25SAndroid Build Coastguard Worker __le32 xattr; 346*79398b25SAndroid Build Coastguard Worker struct squashfs_dir_index index[0]; 347*79398b25SAndroid Build Coastguard Worker }; 348*79398b25SAndroid Build Coastguard Worker 349*79398b25SAndroid Build Coastguard Worker union squashfs_inode { 350*79398b25SAndroid Build Coastguard Worker struct squashfs_base_inode base; 351*79398b25SAndroid Build Coastguard Worker struct squashfs_dev_inode dev; 352*79398b25SAndroid Build Coastguard Worker struct squashfs_symlink_inode symlink; 353*79398b25SAndroid Build Coastguard Worker struct squashfs_reg_inode reg; 354*79398b25SAndroid Build Coastguard Worker struct squashfs_lreg_inode lreg; 355*79398b25SAndroid Build Coastguard Worker struct squashfs_dir_inode dir; 356*79398b25SAndroid Build Coastguard Worker struct squashfs_ldir_inode ldir; 357*79398b25SAndroid Build Coastguard Worker struct squashfs_ipc_inode ipc; 358*79398b25SAndroid Build Coastguard Worker }; 359*79398b25SAndroid Build Coastguard Worker 360*79398b25SAndroid Build Coastguard Worker struct squashfs_dir_entry { 361*79398b25SAndroid Build Coastguard Worker __le16 offset; 362*79398b25SAndroid Build Coastguard Worker __le16 inode_number; 363*79398b25SAndroid Build Coastguard Worker __le16 type; 364*79398b25SAndroid Build Coastguard Worker __le16 size; 365*79398b25SAndroid Build Coastguard Worker char name[0]; 366*79398b25SAndroid Build Coastguard Worker }; 367*79398b25SAndroid Build Coastguard Worker 368*79398b25SAndroid Build Coastguard Worker struct squashfs_dir_header { 369*79398b25SAndroid Build Coastguard Worker __le32 count; 370*79398b25SAndroid Build Coastguard Worker __le32 start_block; 371*79398b25SAndroid Build Coastguard Worker __le32 inode_number; 372*79398b25SAndroid Build Coastguard Worker }; 373*79398b25SAndroid Build Coastguard Worker 374*79398b25SAndroid Build Coastguard Worker struct squashfs_fragment_entry { 375*79398b25SAndroid Build Coastguard Worker __le64 start_block; 376*79398b25SAndroid Build Coastguard Worker __le32 size; 377*79398b25SAndroid Build Coastguard Worker unsigned int unused; 378*79398b25SAndroid Build Coastguard Worker }; 379*79398b25SAndroid Build Coastguard Worker 380*79398b25SAndroid Build Coastguard Worker #endif 381