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