11f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#ifndef SQUASHFS_FS 21f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_FS 31f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* 41f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * Squashfs 51f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * 6037726ca44408bf897791f5197b652defd45f5bePhillip Lougher * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 793fce13e13cbbbaa652028c627ce37e96a9679e8Phillip Lougher * 2013, 2014 883d42a3fc898962aa1f1e8387f2ccb1114e0d294Phillip Lougher * Phillip Lougher <phillip@squashfs.org.uk> 91f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * 101f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * This program is free software; you can redistribute it and/or 111f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * modify it under the terms of the GNU General Public License 121f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * as published by the Free Software Foundation; either version 2, 131f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * or (at your option) any later version. 141f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * 151f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * This program is distributed in the hope that it will be useful, 161f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * but WITHOUT ANY WARRANTY; without even the implied warranty of 171f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 181f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * GNU General Public License for more details. 191f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * 201f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * You should have received a copy of the GNU General Public License 211f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * along with this program; if not, write to the Free Software 221f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 231f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * 241f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * squashfs_fs.h 251f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher */ 261f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 270e45365737bf5283627e32253f2279c4d9fa32d0plougher#define SQUASHFS_CACHED_FRAGMENTS CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE 281b899fc316f7eba7a31da12dc0c9b69ada441059plougher#define SQUASHFS_MAJOR 4 291b899fc316f7eba7a31da12dc0c9b69ada441059plougher#define SQUASHFS_MINOR 0 301f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_MAGIC 0x73717368 311f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_MAGIC_SWAP 0x68737173 321f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_START 0 331f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 341f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* size of metadata (inode and directory) blocks */ 351f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_METADATA_SIZE 8192 361f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_METADATA_LOG 13 371f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 381f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* default size of data blocks */ 394c99cb7f458d8e1c598f1c80793daf3696c9b528plougher#define SQUASHFS_FILE_SIZE 131072 401f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 414c99cb7f458d8e1c598f1c80793daf3696c9b528plougher#define SQUASHFS_FILE_MAX_SIZE 1048576 422b1aa06131c7d8d4361d79172afb9594e66a7280Phillip Lougher#define SQUASHFS_FILE_MAX_LOG 20 431f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 441f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* Max number of uids and gids */ 451b899fc316f7eba7a31da12dc0c9b69ada441059plougher#define SQUASHFS_IDS 65536 461f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 471f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* Max length of filename (not 255) */ 481f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_NAME_LEN 256 491f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 501f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_INVALID ((long long) 0xffffffffffff) 511f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_INVALID_FRAG ((unsigned int) 0xffffffff) 52e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher#define SQUASHFS_INVALID_XATTR ((unsigned int) 0xffffffff) 531f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_INVALID_BLK ((long long) -1) 541f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_USED_BLK ((long long) -2) 551f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 561f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* Filesystem flags */ 571f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_NOI 0 581f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_NOD 1 591f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_CHECK 2 601f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_NOF 3 611f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_NO_FRAG 4 621f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_ALWAYS_FRAG 5 631f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_DUPLICATE 6 640e45365737bf5283627e32253f2279c4d9fa32d0plougher#define SQUASHFS_EXPORT 7 653b75d2fa82ec06cc4f8716643d538d2db662e1bdplougher#define SQUASHFS_NOX 8 66ae9d58cc7aba3f8d40ef0fcef36e992ec34ac1bbplougher#define SQUASHFS_NO_XATTR 9 67a017a9770707e1b0afb81db40c4923ae56caf898plougher#define SQUASHFS_COMP_OPT 10 681f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 691f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_BIT(flag, bit) ((flag >> bit) & 1) 701f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 711f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_UNCOMPRESSED_INODES(flags) SQUASHFS_BIT(flags, \ 721f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher SQUASHFS_NOI) 731f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 741f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_UNCOMPRESSED_DATA(flags) SQUASHFS_BIT(flags, \ 751f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher SQUASHFS_NOD) 761f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 771f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ 781f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher SQUASHFS_NOF) 791f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 801f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_NO_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ 811f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher SQUASHFS_NO_FRAG) 821f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 831f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_ALWAYS_FRAGMENTS(flags) SQUASHFS_BIT(flags, \ 841f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher SQUASHFS_ALWAYS_FRAG) 851f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 861f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_DUPLICATES(flags) SQUASHFS_BIT(flags, \ 871f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher SQUASHFS_DUPLICATE) 881f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 890e45365737bf5283627e32253f2279c4d9fa32d0plougher#define SQUASHFS_EXPORTABLE(flags) SQUASHFS_BIT(flags, \ 900e45365737bf5283627e32253f2279c4d9fa32d0plougher SQUASHFS_EXPORT) 910e45365737bf5283627e32253f2279c4d9fa32d0plougher 92ae9d58cc7aba3f8d40ef0fcef36e992ec34ac1bbplougher#define SQUASHFS_UNCOMPRESSED_XATTRS(flags) SQUASHFS_BIT(flags, \ 93ae9d58cc7aba3f8d40ef0fcef36e992ec34ac1bbplougher SQUASHFS_NOX) 94ae9d58cc7aba3f8d40ef0fcef36e992ec34ac1bbplougher 95ae9d58cc7aba3f8d40ef0fcef36e992ec34ac1bbplougher#define SQUASHFS_NO_XATTRS(flags) SQUASHFS_BIT(flags, \ 96ae9d58cc7aba3f8d40ef0fcef36e992ec34ac1bbplougher SQUASHFS_NO_XATTR) 97ae9d58cc7aba3f8d40ef0fcef36e992ec34ac1bbplougher 98a017a9770707e1b0afb81db40c4923ae56caf898plougher#define SQUASHFS_COMP_OPTS(flags) SQUASHFS_BIT(flags, \ 99a017a9770707e1b0afb81db40c4923ae56caf898plougher SQUASHFS_COMP_OPT) 100a017a9770707e1b0afb81db40c4923ae56caf898plougher 1013b75d2fa82ec06cc4f8716643d538d2db662e1bdplougher#define SQUASHFS_MKFLAGS(noi, nod, nof, nox, no_frag, always_frag, \ 102a017a9770707e1b0afb81db40c4923ae56caf898plougher duplicate_checking, exportable, no_xattr, comp_opt) (noi | \ 103a017a9770707e1b0afb81db40c4923ae56caf898plougher (nod << 1) | (nof << 3) | (no_frag << 4) | \ 104a017a9770707e1b0afb81db40c4923ae56caf898plougher (always_frag << 5) | (duplicate_checking << 6) | \ 105a017a9770707e1b0afb81db40c4923ae56caf898plougher (exportable << 7) | (nox << 8) | (no_xattr << 9) | \ 106a017a9770707e1b0afb81db40c4923ae56caf898plougher (comp_opt << 10)) 1071f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1081f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* Max number of types and file types */ 1091f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_DIR_TYPE 1 1101f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_FILE_TYPE 2 1111f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_SYMLINK_TYPE 3 1121f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_BLKDEV_TYPE 4 1131f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_CHRDEV_TYPE 5 1141f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_FIFO_TYPE 6 1151f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_SOCKET_TYPE 7 1161f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_LDIR_TYPE 8 1171f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_LREG_TYPE 9 1183f23833eafaba866c1d35b10e67dc6945786e7f6plougher#define SQUASHFS_LSYMLINK_TYPE 10 1193f23833eafaba866c1d35b10e67dc6945786e7f6plougher#define SQUASHFS_LBLKDEV_TYPE 11 1203f23833eafaba866c1d35b10e67dc6945786e7f6plougher#define SQUASHFS_LCHRDEV_TYPE 12 1213f23833eafaba866c1d35b10e67dc6945786e7f6plougher#define SQUASHFS_LFIFO_TYPE 13 1223f23833eafaba866c1d35b10e67dc6945786e7f6plougher#define SQUASHFS_LSOCKET_TYPE 14 1231f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 124e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher/* Xattr types */ 125e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher#define SQUASHFS_XATTR_USER 0 126e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher#define SQUASHFS_XATTR_TRUSTED 1 127e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher#define SQUASHFS_XATTR_SECURITY 2 128e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher#define SQUASHFS_XATTR_VALUE_OOL 256 129e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher#define SQUASHFS_XATTR_PREFIX_MASK 0xff 130e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher 1311f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* Flag whether block is compressed or uncompressed, bit is set if block is 1321f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * uncompressed */ 1331f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_COMPRESSED_BIT (1 << 15) 1341f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1351f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_COMPRESSED_SIZE(B) (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \ 1361f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher (B) & ~SQUASHFS_COMPRESSED_BIT : SQUASHFS_COMPRESSED_BIT) 1371f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1381f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_COMPRESSED(B) (!((B) & SQUASHFS_COMPRESSED_BIT)) 1391f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1401f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_COMPRESSED_BIT_BLOCK (1 << 24) 1411f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 142f03d02e0d5c5f7d97d63adc665dd9f524e134c23plougher#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B) ((B) & \ 143f03d02e0d5c5f7d97d63adc665dd9f524e134c23plougher ~SQUASHFS_COMPRESSED_BIT_BLOCK) 1441f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1451f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_COMPRESSED_BLOCK(B) (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK)) 1461f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1471f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* 1481f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * Inode number ops. Inodes consist of a compressed block number, and an 1491f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * uncompressed offset within that block 1501f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher */ 1511f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_INODE_BLK(a) ((unsigned int) ((a) >> 16)) 1521f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1531f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_INODE_OFFSET(a) ((unsigned int) ((a) & 0xffff)) 1541f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 15511fb64f595e7c989993ba0c3a7d86fa1b0249e12plougher#define SQUASHFS_MKINODE(A, B) ((squashfs_inode)(((squashfs_inode) (A)\ 1561f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher << 16) + (B))) 1571f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1581f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* Compute 32 bit VFS inode number from squashfs inode number */ 1591f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_MK_VFS_INODE(a, b) ((unsigned int) (((a) << 8) + \ 1601f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher ((b) >> 2) + 1)) 1611f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1621f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* Translate between VFS mode and squashfs mode */ 1631f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_MODE(a) ((a) & 0xfff) 1641f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1651f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* fragment and fragment table defines */ 1661b81edc57975521caed67438f8b1af9ff3c8a25aPhillip Lougher#define SQUASHFS_FRAGMENT_BYTES(A) ((A) * \ 1671b81edc57975521caed67438f8b1af9ff3c8a25aPhillip Lougher sizeof(struct squashfs_fragment_entry)) 1681f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1691f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_FRAGMENT_INDEX(A) (SQUASHFS_FRAGMENT_BYTES(A) / \ 1701f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher SQUASHFS_METADATA_SIZE) 1711f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1721f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A) (SQUASHFS_FRAGMENT_BYTES(A) % \ 1731f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher SQUASHFS_METADATA_SIZE) 1741f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1751f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_FRAGMENT_INDEXES(A) ((SQUASHFS_FRAGMENT_BYTES(A) + \ 1761f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher SQUASHFS_METADATA_SIZE - 1) / \ 1771f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher SQUASHFS_METADATA_SIZE) 1781f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1791f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_FRAGMENT_INDEX_BYTES(A) (SQUASHFS_FRAGMENT_INDEXES(A) *\ 1801f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher sizeof(long long)) 1811f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1820e45365737bf5283627e32253f2279c4d9fa32d0plougher/* inode lookup table defines */ 18311fb64f595e7c989993ba0c3a7d86fa1b0249e12plougher#define SQUASHFS_LOOKUP_BYTES(A) ((A) * sizeof(squashfs_inode)) 1840e45365737bf5283627e32253f2279c4d9fa32d0plougher 1850e45365737bf5283627e32253f2279c4d9fa32d0plougher#define SQUASHFS_LOOKUP_BLOCK(A) (SQUASHFS_LOOKUP_BYTES(A) / \ 1860e45365737bf5283627e32253f2279c4d9fa32d0plougher SQUASHFS_METADATA_SIZE) 1870e45365737bf5283627e32253f2279c4d9fa32d0plougher 1880e45365737bf5283627e32253f2279c4d9fa32d0plougher#define SQUASHFS_LOOKUP_BLOCK_OFFSET(A) (SQUASHFS_LOOKUP_BYTES(A) % \ 1890e45365737bf5283627e32253f2279c4d9fa32d0plougher SQUASHFS_METADATA_SIZE) 1900e45365737bf5283627e32253f2279c4d9fa32d0plougher 1910e45365737bf5283627e32253f2279c4d9fa32d0plougher#define SQUASHFS_LOOKUP_BLOCKS(A) ((SQUASHFS_LOOKUP_BYTES(A) + \ 1920e45365737bf5283627e32253f2279c4d9fa32d0plougher SQUASHFS_METADATA_SIZE - 1) / \ 1930e45365737bf5283627e32253f2279c4d9fa32d0plougher SQUASHFS_METADATA_SIZE) 1940e45365737bf5283627e32253f2279c4d9fa32d0plougher 1950e45365737bf5283627e32253f2279c4d9fa32d0plougher#define SQUASHFS_LOOKUP_BLOCK_BYTES(A) (SQUASHFS_LOOKUP_BLOCKS(A) *\ 1960e45365737bf5283627e32253f2279c4d9fa32d0plougher sizeof(long long)) 1971f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 1981b899fc316f7eba7a31da12dc0c9b69ada441059plougher/* uid lookup table defines */ 1991b899fc316f7eba7a31da12dc0c9b69ada441059plougher#define SQUASHFS_ID_BYTES(A) ((A) * sizeof(unsigned int)) 2001b899fc316f7eba7a31da12dc0c9b69ada441059plougher 2011b899fc316f7eba7a31da12dc0c9b69ada441059plougher#define SQUASHFS_ID_BLOCK(A) (SQUASHFS_ID_BYTES(A) / \ 2021b899fc316f7eba7a31da12dc0c9b69ada441059plougher SQUASHFS_METADATA_SIZE) 2031b899fc316f7eba7a31da12dc0c9b69ada441059plougher 2041b899fc316f7eba7a31da12dc0c9b69ada441059plougher#define SQUASHFS_ID_BLOCK_OFFSET(A) (SQUASHFS_ID_BYTES(A) % \ 2051b899fc316f7eba7a31da12dc0c9b69ada441059plougher SQUASHFS_METADATA_SIZE) 2061b899fc316f7eba7a31da12dc0c9b69ada441059plougher 2071b899fc316f7eba7a31da12dc0c9b69ada441059plougher#define SQUASHFS_ID_BLOCKS(A) ((SQUASHFS_ID_BYTES(A) + \ 2081b899fc316f7eba7a31da12dc0c9b69ada441059plougher SQUASHFS_METADATA_SIZE - 1) / \ 2091b899fc316f7eba7a31da12dc0c9b69ada441059plougher SQUASHFS_METADATA_SIZE) 2101b899fc316f7eba7a31da12dc0c9b69ada441059plougher 2111b899fc316f7eba7a31da12dc0c9b69ada441059plougher#define SQUASHFS_ID_BLOCK_BYTES(A) (SQUASHFS_ID_BLOCKS(A) *\ 2121b899fc316f7eba7a31da12dc0c9b69ada441059plougher sizeof(long long)) 2131b899fc316f7eba7a31da12dc0c9b69ada441059plougher 214570f436c85a99435180a3ec9aeb1c94135ab0e77plougher/* xattr id lookup table defines */ 215570f436c85a99435180a3ec9aeb1c94135ab0e77plougher#define SQUASHFS_XATTR_BYTES(A) ((A) * sizeof(struct squashfs_xattr_id)) 216570f436c85a99435180a3ec9aeb1c94135ab0e77plougher 217570f436c85a99435180a3ec9aeb1c94135ab0e77plougher#define SQUASHFS_XATTR_BLOCK(A) (SQUASHFS_XATTR_BYTES(A) / \ 218570f436c85a99435180a3ec9aeb1c94135ab0e77plougher SQUASHFS_METADATA_SIZE) 219570f436c85a99435180a3ec9aeb1c94135ab0e77plougher 220570f436c85a99435180a3ec9aeb1c94135ab0e77plougher#define SQUASHFS_XATTR_BLOCK_OFFSET(A) (SQUASHFS_XATTR_BYTES(A) % \ 221570f436c85a99435180a3ec9aeb1c94135ab0e77plougher SQUASHFS_METADATA_SIZE) 222570f436c85a99435180a3ec9aeb1c94135ab0e77plougher 223570f436c85a99435180a3ec9aeb1c94135ab0e77plougher#define SQUASHFS_XATTR_BLOCKS(A) ((SQUASHFS_XATTR_BYTES(A) + \ 224570f436c85a99435180a3ec9aeb1c94135ab0e77plougher SQUASHFS_METADATA_SIZE - 1) / \ 225570f436c85a99435180a3ec9aeb1c94135ab0e77plougher SQUASHFS_METADATA_SIZE) 226570f436c85a99435180a3ec9aeb1c94135ab0e77plougher 227570f436c85a99435180a3ec9aeb1c94135ab0e77plougher#define SQUASHFS_XATTR_BLOCK_BYTES(A) (SQUASHFS_XATTR_BLOCKS(A) *\ 228570f436c85a99435180a3ec9aeb1c94135ab0e77plougher sizeof(long long)) 229570f436c85a99435180a3ec9aeb1c94135ab0e77plougher 230570f436c85a99435180a3ec9aeb1c94135ab0e77plougher#define SQUASHFS_XATTR_BLK(A) ((unsigned int) ((A) >> 16)) 231570f436c85a99435180a3ec9aeb1c94135ab0e77plougher 232570f436c85a99435180a3ec9aeb1c94135ab0e77plougher#define SQUASHFS_XATTR_OFFSET(A) ((unsigned int) ((A) & 0xffff)) 233570f436c85a99435180a3ec9aeb1c94135ab0e77plougher 2341f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* cached data constants for filesystem */ 2351f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_CACHED_BLKS 8 2361f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 2371f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_MAX_FILE_SIZE_LOG 64 2381f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 2391f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_MAX_FILE_SIZE ((long long) 1 << \ 2401f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher (SQUASHFS_MAX_FILE_SIZE_LOG - 2)) 2411f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 2421f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#define SQUASHFS_MARKER_BYTE 0xff 2431f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 2440e45365737bf5283627e32253f2279c4d9fa32d0plougher/* meta index cache */ 2450e45365737bf5283627e32253f2279c4d9fa32d0plougher#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int)) 2460e45365737bf5283627e32253f2279c4d9fa32d0plougher#define SQUASHFS_META_ENTRIES 31 2470e45365737bf5283627e32253f2279c4d9fa32d0plougher#define SQUASHFS_META_NUMBER 8 2480e45365737bf5283627e32253f2279c4d9fa32d0plougher#define SQUASHFS_SLOTS 4 2490e45365737bf5283627e32253f2279c4d9fa32d0plougher 2500e45365737bf5283627e32253f2279c4d9fa32d0plougherstruct meta_entry { 2510e45365737bf5283627e32253f2279c4d9fa32d0plougher long long data_block; 2520e45365737bf5283627e32253f2279c4d9fa32d0plougher unsigned int index_block; 2530e45365737bf5283627e32253f2279c4d9fa32d0plougher unsigned short offset; 2540e45365737bf5283627e32253f2279c4d9fa32d0plougher unsigned short pad; 2550e45365737bf5283627e32253f2279c4d9fa32d0plougher}; 2560e45365737bf5283627e32253f2279c4d9fa32d0plougher 2570e45365737bf5283627e32253f2279c4d9fa32d0plougherstruct meta_index { 2580e45365737bf5283627e32253f2279c4d9fa32d0plougher unsigned int inode_number; 2590e45365737bf5283627e32253f2279c4d9fa32d0plougher unsigned int offset; 2600e45365737bf5283627e32253f2279c4d9fa32d0plougher unsigned short entries; 2610e45365737bf5283627e32253f2279c4d9fa32d0plougher unsigned short skip; 2620e45365737bf5283627e32253f2279c4d9fa32d0plougher unsigned short locked; 2630e45365737bf5283627e32253f2279c4d9fa32d0plougher unsigned short pad; 2640e45365737bf5283627e32253f2279c4d9fa32d0plougher struct meta_entry meta_entry[SQUASHFS_META_ENTRIES]; 2650e45365737bf5283627e32253f2279c4d9fa32d0plougher}; 2660e45365737bf5283627e32253f2279c4d9fa32d0plougher 2670e45365737bf5283627e32253f2279c4d9fa32d0plougher 2681f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher/* 2691f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher * definitions for structures on disk 2701f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher */ 2711f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 2722b90d564804c8e79ff3fdf2f857edd4d9f180813ploughertypedef long long squashfs_block; 27311fb64f595e7c989993ba0c3a7d86fa1b0249e12ploughertypedef long long squashfs_inode; 2741f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 2753cb4f276fda256d6db01b646f6e941f5cca7d35aplougher#define ZLIB_COMPRESSION 1 27638a1a15798c58955704f8baae930804f49ce1ff8plougher#define LZMA_COMPRESSION 2 277c801ba5494e53c5cad6c16241bdad01b3de33717plougher#define LZO_COMPRESSION 3 27800a9365ae85fd3b0f89ca7613f3da2a6b44c7f9fplougher#define XZ_COMPRESSION 4 2792d4c918a517cc567ca935c352e3993133d39945fPhillip Lougher#define LZ4_COMPRESSION 5 2801b899fc316f7eba7a31da12dc0c9b69ada441059plougher 2811f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_super_block { 2821f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int s_magic; 2831f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int inodes; 28493fce13e13cbbbaa652028c627ce37e96a9679e8Phillip Lougher int mkfs_time /* time of filesystem creation */; 2851f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int block_size; 2861f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int fragments; 2871b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short compression; 2881b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short block_log; 2891b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short flags; 2901b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short no_ids; 2911b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short s_major; 2921b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short s_minor; 29311fb64f595e7c989993ba0c3a7d86fa1b0249e12plougher squashfs_inode root_inode; 2941f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher long long bytes_used; 2951b899fc316f7eba7a31da12dc0c9b69ada441059plougher long long id_table_start; 296e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher long long xattr_id_table_start; 2971f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher long long inode_table_start; 2981f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher long long directory_table_start; 2991f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher long long fragment_table_start; 3000e45365737bf5283627e32253f2279c4d9fa32d0plougher long long lookup_table_start; 3011b899fc316f7eba7a31da12dc0c9b69ada441059plougher}; 3021f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 3031f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_dir_index { 3041f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int index; 3051f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int start_block; 3061b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned int size; 3071f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned char name[0]; 3081b899fc316f7eba7a31da12dc0c9b69ada441059plougher}; 3091f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 3101f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_base_inode_header { 311e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short inode_type; 312e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short mode; 313e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short uid; 314e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short guid; 31593fce13e13cbbbaa652028c627ce37e96a9679e8Phillip Lougher int mtime; 316e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned int inode_number; 3171b899fc316f7eba7a31da12dc0c9b69ada441059plougher}; 3181f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 3191f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_ipc_inode_header { 320e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short inode_type; 321e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short mode; 322e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short uid; 323e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short guid; 32493fce13e13cbbbaa652028c627ce37e96a9679e8Phillip Lougher int mtime; 325e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned int inode_number; 3261f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int nlink; 3271b899fc316f7eba7a31da12dc0c9b69ada441059plougher}; 3281f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 329c5d69328b23c606b3205f84ef0f01d45baa996a5plougherstruct squashfs_lipc_inode_header { 330e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short inode_type; 331e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short mode; 332e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short uid; 333e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short guid; 33493fce13e13cbbbaa652028c627ce37e96a9679e8Phillip Lougher int mtime; 335e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned int inode_number; 336c5d69328b23c606b3205f84ef0f01d45baa996a5plougher unsigned int nlink; 337c5d69328b23c606b3205f84ef0f01d45baa996a5plougher unsigned int xattr; 338c5d69328b23c606b3205f84ef0f01d45baa996a5plougher}; 339c5d69328b23c606b3205f84ef0f01d45baa996a5plougher 3401f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_dev_inode_header { 341e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short inode_type; 342e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short mode; 343e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short uid; 344e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short guid; 34593fce13e13cbbbaa652028c627ce37e96a9679e8Phillip Lougher int mtime; 346e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned int inode_number; 3471f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int nlink; 3481b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned int rdev; 3491b899fc316f7eba7a31da12dc0c9b69ada441059plougher}; 3501f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 351e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougherstruct squashfs_ldev_inode_header { 352e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short inode_type; 353e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short mode; 354e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short uid; 355e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short guid; 35693fce13e13cbbbaa652028c627ce37e96a9679e8Phillip Lougher int mtime; 357e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned int inode_number; 358e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher unsigned int nlink; 359e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher unsigned int rdev; 360e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher unsigned int xattr; 361e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher}; 362e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher 3631f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_symlink_inode_header { 364e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short inode_type; 365e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short mode; 366e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short uid; 367e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short guid; 36893fce13e13cbbbaa652028c627ce37e96a9679e8Phillip Lougher int mtime; 369e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned int inode_number; 3701f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int nlink; 3711b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned int symlink_size; 3721f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher char symlink[0]; 3731b899fc316f7eba7a31da12dc0c9b69ada441059plougher}; 3741f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 3751f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_reg_inode_header { 376e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short inode_type; 377e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short mode; 378e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short uid; 379e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short guid; 38093fce13e13cbbbaa652028c627ce37e96a9679e8Phillip Lougher int mtime; 381e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned int inode_number; 3821b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned int start_block; 3831f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int fragment; 3841f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int offset; 3851f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int file_size; 38697373069169689feb619a28f55d4f44f0760fb2bplougher unsigned int block_list[0]; 3871b899fc316f7eba7a31da12dc0c9b69ada441059plougher}; 3881f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 3891f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_lreg_inode_header { 390e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short inode_type; 391e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short mode; 392e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short uid; 393e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short guid; 39493fce13e13cbbbaa652028c627ce37e96a9679e8Phillip Lougher int mtime; 395e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned int inode_number; 3962b90d564804c8e79ff3fdf2f857edd4d9f180813plougher squashfs_block start_block; 3971b899fc316f7eba7a31da12dc0c9b69ada441059plougher long long file_size; 3981b899fc316f7eba7a31da12dc0c9b69ada441059plougher long long sparse; 3991b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned int nlink; 4001f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int fragment; 4011f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int offset; 4021b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned int xattr; 40397373069169689feb619a28f55d4f44f0760fb2bplougher unsigned int block_list[0]; 4041b899fc316f7eba7a31da12dc0c9b69ada441059plougher}; 4051f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 4061f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_dir_inode_header { 407e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short inode_type; 408e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short mode; 409e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short uid; 410e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short guid; 41193fce13e13cbbbaa652028c627ce37e96a9679e8Phillip Lougher int mtime; 412e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned int inode_number; 4131f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int start_block; 4141b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned int nlink; 4151b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short file_size; 4161b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short offset; 4171f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int parent_inode; 4181b899fc316f7eba7a31da12dc0c9b69ada441059plougher}; 4191f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 4201f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_ldir_inode_header { 421e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short inode_type; 422e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short mode; 423e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short uid; 424e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned short guid; 42593fce13e13cbbbaa652028c627ce37e96a9679e8Phillip Lougher int mtime; 426e2fedfe892b95ba0be3a8332e7abd34e1e8a3e7dplougher unsigned int inode_number; 4271f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int nlink; 4281b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned int file_size; 4291f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int start_block; 4301f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int parent_inode; 4311b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short i_count; 4321b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short offset; 4339fca346e286002f3e0db6201923b538a740c78b4plougher unsigned int xattr; 4341f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher struct squashfs_dir_index index[0]; 4351b899fc316f7eba7a31da12dc0c9b69ada441059plougher}; 4361f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 4371f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherunion squashfs_inode_header { 4381f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher struct squashfs_base_inode_header base; 4391f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher struct squashfs_dev_inode_header dev; 440e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher struct squashfs_ldev_inode_header ldev; 4411f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher struct squashfs_symlink_inode_header symlink; 4421f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher struct squashfs_reg_inode_header reg; 4431f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher struct squashfs_lreg_inode_header lreg; 4441f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher struct squashfs_dir_inode_header dir; 4451f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher struct squashfs_ldir_inode_header ldir; 4461f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher struct squashfs_ipc_inode_header ipc; 447c5d69328b23c606b3205f84ef0f01d45baa996a5plougher struct squashfs_lipc_inode_header lipc; 4481f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher}; 4491f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 4501f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_dir_entry { 4511b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short offset; 4521b899fc316f7eba7a31da12dc0c9b69ada441059plougher short inode_number; 4531b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short type; 4541b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned short size; 4551f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher char name[0]; 4561b899fc316f7eba7a31da12dc0c9b69ada441059plougher}; 4571f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 4581f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_dir_header { 4591b899fc316f7eba7a31da12dc0c9b69ada441059plougher unsigned int count; 4601f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int start_block; 4611f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int inode_number; 4621b899fc316f7eba7a31da12dc0c9b69ada441059plougher}; 4631f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 4641f413c84d736495fd61ff05ebe52c3a01a4d95c2plougherstruct squashfs_fragment_entry { 4651f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher long long start_block; 4661f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher unsigned int size; 4677e92d6f688348caf07aee1305ca870416723f440plougher unsigned int unused; 4681f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher}; 4691f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher 470e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougherstruct squashfs_xattr_entry { 471e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher unsigned short type; 472e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher unsigned short size; 473e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher}; 474e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher 475e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougherstruct squashfs_xattr_val { 476e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher unsigned int vsize; 477e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher}; 478e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher 479e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougherstruct squashfs_xattr_id { 480e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher long long xattr; 481e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher unsigned int count; 482e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher unsigned int size; 483e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher}; 484e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher 485e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougherstruct squashfs_xattr_table { 486e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher long long xattr_table_start; 487e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher unsigned int xattr_ids; 488e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher unsigned int unused; 489e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher}; 490e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9eplougher 4911f413c84d736495fd61ff05ebe52c3a01a4d95c2plougher#endif 492