blob: 85898bf6c4e5eb2f9d4472252d98a0c8f46da196 [file] [log] [blame]
// 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
)