summaryrefslogtreecommitdiffhomepage
path: root/tools/libmkfs/openhefs.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/libmkfs/openhefs.hpp')
-rw-r--r--tools/libmkfs/openhefs.hpp122
1 files changed, 122 insertions, 0 deletions
diff --git a/tools/libmkfs/openhefs.hpp b/tools/libmkfs/openhefs.hpp
new file mode 100644
index 00000000..6b77bf1b
--- /dev/null
+++ b/tools/libmkfs/openhefs.hpp
@@ -0,0 +1,122 @@
+// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org)
+// Licensed under the Apache License, Version 2.0 (see LICENSE file)
+// Official repository: https://github.com/nekernel-org/nekernel
+
+#ifndef LIBMKFS_OPENHEFS_H
+#define LIBMKFS_OPENHEFS_H
+
+#ifndef __GNUC__
+#error !! libmkfs isn't working in MSVC yet !!
+#endif
+
+#include <cstdint>
+#include <cstring>
+
+#define kOpenHeFSVersion (0x0101)
+#define kOpenHeFSMagic "OpenHeFS"
+#define kOpenHeFSMagicLen (9U)
+
+#define kOpenHeFSFileNameLen (256U)
+#define kOpenHeFSPartNameLen (128U)
+
+#define kOpenHeFSDefaultVolumeName u8"OpenHeFS Volume"
+
+namespace mkfs::hefs {
+
+// Drive kinds
+enum {
+ kOpenHeFSHardDrive = 0xC0, // Hard Drive
+ kOpenHeFSSolidStateDrive = 0xC1, // Solid State Drive
+ kOpenHeFSOpticalDrive = 0x0C, // Blu-Ray/DVD
+ kOpenHeFSMassStorageDevice = 0xCC, // USB
+ kOpenHeFSScsiDrive = 0xC4, // SCSI Hard Drive
+ kOpenHeFSFlashDrive = 0xC6,
+ kOpenHeFSUnknown = 0xFF, // Unknown device.
+ kOpenHeFSDriveCount = 8,
+};
+
+// Disk status
+enum {
+ kOpenHeFSStatusUnlocked = 0x18,
+ kOpenHeFSStatusLocked,
+ kOpenHeFSStatusError,
+ kOpenHeFSStatusInvalid,
+ kOpenHeFSStatusCount,
+};
+
+// Encodings
+enum {
+ kOpenHeFSEncodingFlagsUTF8 = 0x50,
+ kOpenHeFSEncodingFlagsUTF16,
+ kOpenHeFSEncodingFlagsUTF32,
+ kOpenHeFSEncodingFlagsUTF16BE,
+ kOpenHeFSEncodingFlagsUTF16LE,
+ kOpenHeFSEncodingFlagsUTF32BE,
+ kOpenHeFSEncodingFlagsUTF32LE,
+ kOpenHeFSEncodingFlagsUTF8BE,
+ kOpenHeFSEncodingFlagsUTF8LE,
+ kOpenHeFSEncodingFlagsBinary,
+ kOpenHeFSEncodingFlagsCount = 11,
+ kOpenHeFSFlagsNone = 0,
+ kOpenHeFSFlagsReadOnly = 0x100,
+ kOpenHeFSFlagsHidden,
+ kOpenHeFSFlagsSystem,
+ kOpenHeFSFlagsArchive,
+ kOpenHeFSFlagsDevice,
+ kOpenHeFSFlagsCount = 7
+};
+
+// Time type
+using ATime = std::uint64_t;
+
+// File kinds
+inline constexpr uint16_t kOpenHeFSFileKindRegular = 0x00;
+inline constexpr uint16_t kOpenHeFSFileKindDirectory = 0x01;
+inline constexpr uint16_t kOpenHeFSFileKindBlock = 0x02;
+inline constexpr uint16_t kOpenHeFSFileKindCharacter = 0x03;
+inline constexpr uint16_t kOpenHeFSFileKindFIFO = 0x04;
+inline constexpr uint16_t kOpenHeFSFileKindSocket = 0x05;
+inline constexpr uint16_t kOpenHeFSFileKindSymbolicLink = 0x06;
+inline constexpr uint16_t kOpenHeFSFileKindUnknown = 0x07;
+inline constexpr uint16_t kOpenHeFSFileKindCount = 0x08;
+
+// Red-black tree colors
+enum {
+ kOpenHeFSInvalidColor = 0,
+ kOpenHeFSRed = 100,
+ kOpenHeFSBlack,
+ kOpenHeFSColorCount,
+};
+
+// Time constants
+inline constexpr ATime kOpenHeFSTimeInvalid = 0x0000000000000000;
+inline constexpr ATime kOpenHeFSTimeMax = 0xFFFFFFFFFFFFFFFF - 1;
+
+// Boot Node
+struct __attribute__((packed)) BootNode {
+ char magic[kOpenHeFSMagicLen]{};
+ char8_t volumeName[kOpenHeFSPartNameLen]{};
+ std::uint32_t version{};
+ std::uint64_t badSectors{};
+ std::uint64_t sectorCount{};
+ std::uint64_t sectorSize{};
+ std::uint32_t checksum{};
+ std::uint8_t diskKind{};
+ std::uint8_t encoding{};
+ std::uint64_t startIND{};
+ std::uint64_t endIND{};
+ std::uint64_t indCount{};
+ std::uint64_t diskSize{};
+ std::uint16_t diskStatus{};
+ std::uint16_t diskFlags{};
+ std::uint16_t vid{};
+ std::uint64_t startIN{};
+ std::uint64_t endIN{};
+ std::uint64_t startBlock{};
+ std::uint64_t endBlock{};
+ char pad[272]{};
+};
+
+} // namespace mkfs::hefs
+
+#endif