| // Copyright 2020 The Monogon Project Authors. |
| // |
| // SPDX-License-Identifier: Apache-2.0 |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package erofs |
| |
| // This file contains definitions coming from the in-Kernel implementation of the EROFS filesystem. |
| // All definitions come from @linux//fs/erofs:erofs_fs.h unless stated otherwise. |
| |
| // Magic contains the 4 magic bytes starting at position 1024 identifying an EROFS filesystem. |
| // Defined in @linux//include/uapi/linux/magic.h EROFS_SUPER_MAGIC_V1 |
| var Magic = [4]byte{0xe2, 0xe1, 0xf5, 0xe0} |
| |
| const blockSizeBits = 12 |
| const BlockSize = 1 << blockSizeBits |
| |
| // Defined in @linux//include/linux:fs_types.h starting at FT_UNKNOWN |
| const ( |
| fileTypeUnknown = iota |
| fileTypeRegularFile |
| fileTypeDirectory |
| fileTypeCharacterDevice |
| fileTypeBlockDevice |
| fileTypeFIFO |
| fileTypeSocket |
| fileTypeSymbolicLink |
| ) |
| |
| // Anonymous enum starting at EROFS_INODE_FLAT_PLAIN |
| const ( |
| inodeFlatPlain = 0 |
| inodeFlatCompressionLegacy = 1 |
| inodeFlatInline = 2 |
| inodeFlatCompression = 3 |
| ) |
| |
| // struct erofs_dirent |
| type directoryEntryRaw struct { |
| NodeNumber uint64 |
| NameStartOffset uint16 |
| FileType uint8 |
| Reserved uint8 |
| } |
| |
| // struct erofs_super_block |
| type superblock struct { |
| Magic [4]byte |
| Checksum uint32 |
| FeatureCompat uint32 |
| BlockSizeBits uint8 |
| Reserved0 uint8 |
| RootNodeNumber uint16 |
| TotalInodes uint64 |
| BuildTimeSeconds uint64 |
| BuildTimeNanoseconds uint32 |
| Blocks uint32 |
| MetaStartAddr uint32 |
| SharedXattrStartAddr uint32 |
| UUID [16]byte |
| VolumeName [16]byte |
| FeaturesIncompatible uint32 |
| Reserved1 [44]byte |
| } |
| |
| // struct erofs_inode_compact |
| type inodeCompact struct { |
| Format uint16 |
| XattrCount uint16 |
| Mode uint16 |
| HardlinkCount uint16 |
| Size uint32 |
| Reserved0 uint32 |
| Union uint32 |
| InodeNumCompat uint32 |
| UID uint16 |
| GID uint16 |
| Reserved1 uint32 |
| } |
| |
| // Anonymous enum starting at Z_EROFS_VLE_CLUSTER_TYPE_PLAIN |
| const ( |
| vleClusterTypePlain = iota << 12 |
| vleClusterTypeHead |
| vleClusterTypeNonhead |
| ) |