Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) #ifndef SQUASHFS_FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) #define SQUASHFS_FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Squashfs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  * Phillip Lougher <phillip@squashfs.org.uk>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  * squashfs_fs.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #define SQUASHFS_CACHED_FRAGMENTS	CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #define SQUASHFS_MAJOR			4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define SQUASHFS_MINOR			0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #define SQUASHFS_START			0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) /* size of metadata (inode and directory) blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #define SQUASHFS_METADATA_SIZE		8192
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define SQUASHFS_BLOCK_OFFSET		2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) /* default size of block device I/O */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #ifdef CONFIG_SQUASHFS_4K_DEVBLK_SIZE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #define SQUASHFS_DEVBLK_SIZE 4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define SQUASHFS_DEVBLK_SIZE 1024
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #define SQUASHFS_FILE_MAX_SIZE		1048576
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #define SQUASHFS_FILE_MAX_LOG		20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) /* Max length of filename (not 255) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) #define SQUASHFS_NAME_LEN		256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) /* Max value for directory header count*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define SQUASHFS_DIR_COUNT		256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define SQUASHFS_INVALID_FRAG		(0xffffffffU)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define SQUASHFS_INVALID_XATTR		(0xffffffffU)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define SQUASHFS_INVALID_BLK		(-1LL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) /* Filesystem flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define SQUASHFS_NOI			0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define SQUASHFS_NOD			1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) #define SQUASHFS_NOF			3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #define SQUASHFS_NO_FRAG		4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #define SQUASHFS_ALWAYS_FRAG		5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #define SQUASHFS_DUPLICATE		6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define SQUASHFS_EXPORT			7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define SQUASHFS_COMP_OPT		10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #define SQUASHFS_BIT(flag, bit)		((flag >> bit) & 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define SQUASHFS_UNCOMPRESSED_INODES(flags)	SQUASHFS_BIT(flags, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 						SQUASHFS_NOI)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #define SQUASHFS_UNCOMPRESSED_DATA(flags)	SQUASHFS_BIT(flags, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 						SQUASHFS_NOD)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) #define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags)	SQUASHFS_BIT(flags, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 						SQUASHFS_NOF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) #define SQUASHFS_NO_FRAGMENTS(flags)		SQUASHFS_BIT(flags, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 						SQUASHFS_NO_FRAG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) #define SQUASHFS_ALWAYS_FRAGMENTS(flags)	SQUASHFS_BIT(flags, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 						SQUASHFS_ALWAYS_FRAG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) #define SQUASHFS_DUPLICATES(flags)		SQUASHFS_BIT(flags, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 						SQUASHFS_DUPLICATE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) #define SQUASHFS_EXPORTABLE(flags)		SQUASHFS_BIT(flags, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 						SQUASHFS_EXPORT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) #define SQUASHFS_COMP_OPTS(flags)		SQUASHFS_BIT(flags, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 						SQUASHFS_COMP_OPT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) /* Inode types including extended types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) #define SQUASHFS_DIR_TYPE		1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) #define SQUASHFS_REG_TYPE		2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) #define SQUASHFS_SYMLINK_TYPE		3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) #define SQUASHFS_BLKDEV_TYPE		4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) #define SQUASHFS_CHRDEV_TYPE		5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) #define SQUASHFS_FIFO_TYPE		6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) #define SQUASHFS_SOCKET_TYPE		7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) #define SQUASHFS_LDIR_TYPE		8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) #define SQUASHFS_LREG_TYPE		9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) #define SQUASHFS_LSYMLINK_TYPE		10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) #define SQUASHFS_LBLKDEV_TYPE		11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) #define SQUASHFS_LCHRDEV_TYPE		12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) #define SQUASHFS_LFIFO_TYPE		13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) #define SQUASHFS_LSOCKET_TYPE		14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) /* Max type value stored in directory entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) #define SQUASHFS_MAX_DIR_TYPE		7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) /* Xattr types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) #define SQUASHFS_XATTR_USER             0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) #define SQUASHFS_XATTR_TRUSTED          1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define SQUASHFS_XATTR_SECURITY         2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define SQUASHFS_XATTR_VALUE_OOL        256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define SQUASHFS_XATTR_PREFIX_MASK      0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) /* Flag whether block is compressed or uncompressed, bit is set if block is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)  * uncompressed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define SQUASHFS_COMPRESSED_BIT		(1 << 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define SQUASHFS_COMPRESSED_SIZE(B)	(((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 		(B) & ~SQUASHFS_COMPRESSED_BIT :  SQUASHFS_COMPRESSED_BIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define SQUASHFS_COMPRESSED(B)		(!((B) & SQUASHFS_COMPRESSED_BIT))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define SQUASHFS_COMPRESSED_BIT_BLOCK	(1 << 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define SQUASHFS_COMPRESSED_SIZE_BLOCK(B)	((B) & \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 						~SQUASHFS_COMPRESSED_BIT_BLOCK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define SQUASHFS_COMPRESSED_BLOCK(B)	(!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) static inline int squashfs_block_size(__le32 raw)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	u32 size = le32_to_cpu(raw);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	return (size >> 25) ? -EIO : size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)  * Inode number ops.  Inodes consist of a compressed block number, and an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)  * uncompressed offset within that block
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define SQUASHFS_INODE_BLK(A)		((unsigned int) ((A) >> 16))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define SQUASHFS_INODE_OFFSET(A)	((unsigned int) ((A) & 0xffff))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define SQUASHFS_MKINODE(A, B)		((long long)(((long long) (A)\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 					<< 16) + (B)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) /* fragment and fragment table defines */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define SQUASHFS_FRAGMENT_BYTES(A)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 				((A) * sizeof(struct squashfs_fragment_entry))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define SQUASHFS_FRAGMENT_INDEX(A)	(SQUASHFS_FRAGMENT_BYTES(A) / \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 					SQUASHFS_METADATA_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define SQUASHFS_FRAGMENT_INDEX_OFFSET(A)	(SQUASHFS_FRAGMENT_BYTES(A) % \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 						SQUASHFS_METADATA_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #define SQUASHFS_FRAGMENT_INDEXES(A)	((SQUASHFS_FRAGMENT_BYTES(A) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 					SQUASHFS_METADATA_SIZE - 1) / \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 					SQUASHFS_METADATA_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define SQUASHFS_FRAGMENT_INDEX_BYTES(A)	(SQUASHFS_FRAGMENT_INDEXES(A) *\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 						sizeof(u64))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) /* inode lookup table defines */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define SQUASHFS_LOOKUP_BYTES(A)	((A) * sizeof(u64))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define SQUASHFS_LOOKUP_BLOCK(A)	(SQUASHFS_LOOKUP_BYTES(A) / \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 					SQUASHFS_METADATA_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) #define SQUASHFS_LOOKUP_BLOCK_OFFSET(A)	(SQUASHFS_LOOKUP_BYTES(A) % \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 					SQUASHFS_METADATA_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define SQUASHFS_LOOKUP_BLOCKS(A)	((SQUASHFS_LOOKUP_BYTES(A) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 					SQUASHFS_METADATA_SIZE - 1) / \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 					SQUASHFS_METADATA_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define SQUASHFS_LOOKUP_BLOCK_BYTES(A)	(SQUASHFS_LOOKUP_BLOCKS(A) *\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 					sizeof(u64))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) /* uid/gid lookup table defines */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) #define SQUASHFS_ID_BYTES(A)		((A) * sizeof(unsigned int))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) #define SQUASHFS_ID_BLOCK(A)		(SQUASHFS_ID_BYTES(A) / \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 					SQUASHFS_METADATA_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) #define SQUASHFS_ID_BLOCK_OFFSET(A)	(SQUASHFS_ID_BYTES(A) % \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 					SQUASHFS_METADATA_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) #define SQUASHFS_ID_BLOCKS(A)		((SQUASHFS_ID_BYTES(A) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 					SQUASHFS_METADATA_SIZE - 1) / \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 					SQUASHFS_METADATA_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) #define SQUASHFS_ID_BLOCK_BYTES(A)	(SQUASHFS_ID_BLOCKS(A) *\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 					sizeof(u64))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) /* xattr id lookup table defines */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) #define SQUASHFS_XATTR_BYTES(A)		((A) * sizeof(struct squashfs_xattr_id))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) #define SQUASHFS_XATTR_BLOCK(A)		(SQUASHFS_XATTR_BYTES(A) / \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 					SQUASHFS_METADATA_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) #define SQUASHFS_XATTR_BLOCK_OFFSET(A)	(SQUASHFS_XATTR_BYTES(A) % \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 					SQUASHFS_METADATA_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) #define SQUASHFS_XATTR_BLOCKS(A)	((SQUASHFS_XATTR_BYTES(A) + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 					SQUASHFS_METADATA_SIZE - 1) / \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 					SQUASHFS_METADATA_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define SQUASHFS_XATTR_BLOCK_BYTES(A)	(SQUASHFS_XATTR_BLOCKS(A) *\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 					sizeof(u64))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #define SQUASHFS_XATTR_BLK(A)		((unsigned int) ((A) >> 16))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define SQUASHFS_XATTR_OFFSET(A)	((unsigned int) ((A) & 0xffff))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) /* cached data constants for filesystem */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #define SQUASHFS_CACHED_BLKS		8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) /* meta index cache */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define SQUASHFS_META_INDEXES	(SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define SQUASHFS_META_ENTRIES	127
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #define SQUASHFS_META_SLOTS	8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) struct meta_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	u64			data_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	unsigned int		index_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	unsigned short		offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	unsigned short		pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) struct meta_index {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	unsigned int		inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	unsigned int		offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	unsigned short		entries;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	unsigned short		skip;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	unsigned short		locked;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	unsigned short		pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	struct meta_entry	meta_entry[SQUASHFS_META_ENTRIES];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231)  * definitions for structures on disk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #define ZLIB_COMPRESSION	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #define LZMA_COMPRESSION	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #define LZO_COMPRESSION		3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #define XZ_COMPRESSION		4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #define LZ4_COMPRESSION		5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) #define ZSTD_COMPRESSION	6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) struct squashfs_super_block {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 	__le32			s_magic;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 	__le32			inodes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 	__le32			mkfs_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 	__le32			block_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	__le32			fragments;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 	__le16			compression;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	__le16			block_log;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 	__le16			flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 	__le16			no_ids;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 	__le16			s_major;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 	__le16			s_minor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 	__le64			root_inode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	__le64			bytes_used;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 	__le64			id_table_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	__le64			xattr_id_table_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 	__le64			inode_table_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 	__le64			directory_table_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	__le64			fragment_table_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	__le64			lookup_table_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) struct squashfs_dir_index {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	__le32			index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	__le32			start_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	__le32			size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	unsigned char		name[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) struct squashfs_base_inode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 	__le16			inode_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	__le16			mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 	__le16			uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	__le16			guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 	__le32			mtime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	__le32			inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) struct squashfs_ipc_inode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 	__le16			inode_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 	__le16			mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	__le16			uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	__le16			guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	__le32			mtime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 	__le32			inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	__le32			nlink;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) struct squashfs_lipc_inode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	__le16			inode_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	__le16			mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	__le16			uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 	__le16			guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 	__le32			mtime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 	__le32			inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 	__le32			nlink;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 	__le32			xattr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) struct squashfs_dev_inode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	__le16			inode_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 	__le16			mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	__le16			uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 	__le16			guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 	__le32			mtime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) 	__le32			inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 	__le32			nlink;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) 	__le32			rdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) struct squashfs_ldev_inode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	__le16			inode_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 	__le16			mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 	__le16			uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 	__le16			guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	__le32			mtime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	__le32			inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	__le32			nlink;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 	__le32			rdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	__le32			xattr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) struct squashfs_symlink_inode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	__le16			inode_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 	__le16			mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	__le16			uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 	__le16			guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 	__le32			mtime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 	__le32			inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 	__le32			nlink;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 	__le32			symlink_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 	char			symlink[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) struct squashfs_reg_inode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 	__le16			inode_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	__le16			mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 	__le16			uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 	__le16			guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 	__le32			mtime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 	__le32			inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	__le32			start_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 	__le32			fragment;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 	__le32			offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	__le32			file_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 	__le16			block_list[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) struct squashfs_lreg_inode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 	__le16			inode_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 	__le16			mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 	__le16			uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 	__le16			guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 	__le32			mtime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 	__le32			inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 	__le64			start_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 	__le64			file_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 	__le64			sparse;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 	__le32			nlink;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 	__le32			fragment;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) 	__le32			offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	__le32			xattr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 	__le16			block_list[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) struct squashfs_dir_inode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	__le16			inode_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 	__le16			mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) 	__le16			uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 	__le16			guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 	__le32			mtime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 	__le32			inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 	__le32			start_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 	__le32			nlink;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 	__le16			file_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	__le16			offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	__le32			parent_inode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) struct squashfs_ldir_inode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 	__le16			inode_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 	__le16			mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 	__le16			uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 	__le16			guid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 	__le32			mtime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 	__le32			inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 	__le32			nlink;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) 	__le32			file_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 	__le32			start_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 	__le32			parent_inode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) 	__le16			i_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 	__le16			offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 	__le32			xattr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 	struct squashfs_dir_index	index[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) union squashfs_inode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	struct squashfs_base_inode		base;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 	struct squashfs_dev_inode		dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	struct squashfs_ldev_inode		ldev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 	struct squashfs_symlink_inode		symlink;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 	struct squashfs_reg_inode		reg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 	struct squashfs_lreg_inode		lreg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) 	struct squashfs_dir_inode		dir;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 	struct squashfs_ldir_inode		ldir;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 	struct squashfs_ipc_inode		ipc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 	struct squashfs_lipc_inode		lipc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) struct squashfs_dir_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) 	__le16			offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) 	__le16			inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) 	__le16			type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 	__le16			size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 	char			name[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) struct squashfs_dir_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 	__le32			count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 	__le32			start_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) 	__le32			inode_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) struct squashfs_fragment_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) 	__le64			start_block;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) 	__le32			size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) 	unsigned int		unused;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) struct squashfs_xattr_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 	__le16			type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) 	__le16			size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) 	char			data[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) struct squashfs_xattr_val {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) 	__le32			vsize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) 	char			value[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) struct squashfs_xattr_id {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) 	__le64			xattr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 	__le32			count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 	__le32			size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) struct squashfs_xattr_id_table {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 	__le64			xattr_table_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) 	__le32			xattr_ids;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) 	__le32			unused;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) #endif