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