diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..0b53eb8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +indent_style = tab +indent_size = 4 + +# specifically for YAML +[{yml, yaml}] +indent_style = space diff --git a/lib/base/ErrorOr.hpp b/lib/base/ErrorOr.hpp index 7e9080d..73f4ad9 100644 --- a/lib/base/ErrorOr.hpp +++ b/lib/base/ErrorOr.hpp @@ -90,4 +90,4 @@ struct ErrorOr { private: std::optional maybeEc; -}; \ No newline at end of file +}; diff --git a/lib/base/MmapFile.cpp b/lib/base/MmapFile.cpp index 8904766..c8bba22 100644 --- a/lib/base/MmapFile.cpp +++ b/lib/base/MmapFile.cpp @@ -31,4 +31,4 @@ namespace lightningbolt { return impl->GetMappingSize(); } -} // namespace lightningbolt \ No newline at end of file +} // namespace lightningbolt diff --git a/lib/base/MmapFile.hpp b/lib/base/MmapFile.hpp index 1d32c50..0769ccf 100644 --- a/lib/base/MmapFile.hpp +++ b/lib/base/MmapFile.hpp @@ -7,22 +7,22 @@ namespace lightningbolt { - /// A read-only file opened via memory mapping. - /// On POSIX systems, we use mmap(2). Etc etc. - struct MmapFile { - MmapFile(); - ~MmapFile(); + /// A read-only file opened via memory mapping. + /// On POSIX systems, we use mmap(2). Etc etc. + struct MmapFile { + MmapFile(); + ~MmapFile(); - // Opens for read-only mode. - ErrorOr Open(const fs::path& path); - void Close(); + // Opens for read-only mode. + ErrorOr Open(const fs::path& path); + void Close(); - u8* GetMapping() const; - usize GetMappingSize() const; + u8* GetMapping() const; + usize GetMappingSize() const; - private: - struct Impl; - Unique impl; - }; + private: + struct Impl; + Unique impl; + }; -} \ No newline at end of file +} diff --git a/lib/base/MmapFile.linux.cpp b/lib/base/MmapFile.linux.cpp index 236af0e..43cafcb 100644 --- a/lib/base/MmapFile.linux.cpp +++ b/lib/base/MmapFile.linux.cpp @@ -10,57 +10,57 @@ namespace lightningbolt { struct MmapFile::Impl { - ~Impl() { - Close(); - } + ~Impl() { + Close(); + } - void Close() { - if(mapping) { - munmap(mapping, mappingSize); - mapping = nullptr; - mappingSize = 0; - } - } + void Close() { + if(mapping) { + munmap(mapping, mappingSize); + mapping = nullptr; + mappingSize = 0; + } + } - ErrorOr Open(const fs::path& path) { - int fd = open(path.string().c_str(), O_RDONLY); + ErrorOr Open(const fs::path& path) { + int fd = open(path.string().c_str(), O_RDONLY); - // Error opening file. - if(fd == -1) - return std::error_code{errno, std::system_category()}; + // Error opening file. + if(fd == -1) + return std::error_code{errno, std::system_category()}; - { - auto last = lseek64(fd, 0, SEEK_END); - mappingSize = lseek64(fd, 0, SEEK_CUR); - lseek64(fd, last, SEEK_SET); - } + { + auto last = lseek64(fd, 0, SEEK_END); + mappingSize = lseek64(fd, 0, SEEK_CUR); + lseek64(fd, last, SEEK_SET); + } - mapping = static_cast(mmap(nullptr, mappingSize, PROT_READ, MAP_PRIVATE, fd, 0)); - if(mapping == static_cast(MAP_FAILED)) { - mappingSize = 0; - return std::error_code{errno, std::system_category()}; - } + mapping = static_cast(mmap(nullptr, mappingSize, PROT_READ, MAP_PRIVATE, fd, 0)); + if(mapping == static_cast(MAP_FAILED)) { + mappingSize = 0; + return std::error_code{errno, std::system_category()}; + } - // Once the mapping has successfully been created - // we can close the file descriptor instead of needing - // to remember it (the kernel will do so for us.) - close(fd); + // Once the mapping has successfully been created + // we can close the file descriptor instead of needing + // to remember it (the kernel will do so for us.) + close(fd); - // No error. - return {}; - } + // No error. + return {}; + } - u8* GetMapping() const { - return mapping; - } + u8* GetMapping() const { + return mapping; + } - usize GetMappingSize() const { - return mappingSize; - } + usize GetMappingSize() const { + return mappingSize; + } - private: - u8* mapping; - usize mappingSize; - }; + private: + u8* mapping; + usize mappingSize; + }; -} // namespace lightningbolt \ No newline at end of file +} // namespace lightningbolt diff --git a/lib/base/OffsetPtr.hpp b/lib/base/OffsetPtr.hpp deleted file mode 100644 index b2bb05c..0000000 --- a/lib/base/OffsetPtr.hpp +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2023 The LightningBolt Authors -// SPDX-License-Identifier: MIT - -#pragma once -#include -#include -#include -#include - -namespace lightningbolt { - - namespace detail { - - template - constexpr NativeT* CreatePointerFromAddend(void* BasePointer, OffsetType addend) noexcept { - return std::bit_cast(static_cast(BasePointer) + addend); - } - - } // namespace detail - - /// An "auto-resolving" semi-sweet (/s) pointer type. - /// This is designed to allow resolving offsets in data for - /// games written before 64-bit pointers were common/used at all. - /// This allows looking up data a lot easier :) - /// - /// [NativeT] is the type of data this would point to - /// [OffsetType] is the type of data the "pointer" is repressented as - template - struct OffsetPtr final { - using Type = std::remove_cvref_t; - using Pointer = Type*; - using ConstPointer = const Type*; - - /// Set the offset. Duh! - constexpr void Set(OffsetType newOffset) noexcept { rawOffset = newOffset; } - - [[nodiscard]] constexpr OffsetType Raw() const noexcept { return rawOffset; } - - [[nodiscard]] constexpr Pointer operator()(void* baseAddr) const noexcept { - // While yucky, it should show problem areas which aren't checking things - // immediately rather than read invalid data that might do much worse. - if(rawOffset == 0) - return nullptr; - - return detail::CreatePointerFromAddend(baseAddr, rawOffset); - } - - template - constexpr OffsetPtr& PtrCast() { - // Safety: The data layout of OffsetPtr<> stays - // the exact same regardless of the result type, therefore - // even though this is *techinically* UB (? using bit_cast it shouldn't be ?), - // this isn't problematic - return *std::bit_cast*>(this); - } - - private: - OffsetType rawOffset; - }; - - /// Like OffsetPtr but for arrays of data - template - struct OffsetArrayPtr final { - using Type = std::remove_cvref_t; - using Pointer = Type*; - using ConstPointer = const Type*; - - using Span = std::span; - - /// Set the offset. Duh! - constexpr void Set(OffsetType newOffset) noexcept { rawOffset = newOffset; } - - [[nodiscard]] constexpr OffsetType Raw() const noexcept { return rawOffset; } - - [[nodiscard]] constexpr Span operator()(void* baseAddr, OffsetType length) const noexcept { - // While yucky, it should show problem areas which aren't checking things - // immediately rather than read invalid data that might do much worse. - if(rawOffset == 0 || length == 0) - return {}; - - return { detail::CreatePointerFromAddend(baseAddr, rawOffset), length }; - } - - private: - OffsetType rawOffset; - }; - -} // namespace ssxtools::core diff --git a/lib/base/Types.hpp b/lib/base/Types.hpp index 8168d28..af1982d 100644 --- a/lib/base/Types.hpp +++ b/lib/base/Types.hpp @@ -23,7 +23,7 @@ using usize = std::size_t; using isize = std::intptr_t; namespace lightningbolt { - namespace fs = std::filesystem; + namespace fs = std::filesystem; template > using Unique = std::unique_ptr; @@ -31,4 +31,4 @@ namespace lightningbolt { template using Ref = std::shared_ptr; -} // namespace lightningbolt \ No newline at end of file +} // namespace lightningbolt diff --git a/lib/structs/BoltStructs.hpp b/lib/structs/BoltStructs.hpp index 9243245..8c2c958 100644 --- a/lib/structs/BoltStructs.hpp +++ b/lib/structs/BoltStructs.hpp @@ -9,7 +9,7 @@ namespace lightningbolt { namespace elf { - /// Table entry in the ELF. We use this to create file names. + /// Table entry in the ELF. We use this to create file names. struct [[gnu::packed]] BoltTableEntry { /// Pointer to filename. Should be adjusted u32 filenamePtr; @@ -17,21 +17,19 @@ namespace lightningbolt { u16 groupId; // (entryId & 0xff00) }; - /// Offsets in the ELF to the table. - struct BoltTableOffsets { - u32 usTable; - }; + /// Offsets in the ELF to the table. + struct BoltTableOffsets { + u32 usTable; + }; - /// Convert a address to ELF file offset. - constexpr u32 AddressToElfFileOffset(u32 address) { - constexpr u32 LoadAddress = 0x00100000; - constexpr u32 SectionOffset = 0x80; - return (address - LoadAddress) + SectionOffset; - } + /// Convert a address to ELF file offset. + constexpr u32 AddressToElfFileOffset(u32 address) { + constexpr u32 LoadAddress = 0x00100000; + constexpr u32 SectionOffset = 0x80; + return (address - LoadAddress) + SectionOffset; + } - static constexpr BoltTableOffsets BoltTableOffsets = { - .usTable = AddressToElfFileOffset(0x0033d400) - }; + static constexpr BoltTableOffsets BoltTableOffsets = { .usTable = AddressToElfFileOffset(0x0033d400) }; } // namespace elf @@ -51,8 +49,8 @@ namespace lightningbolt { u32 groupSize; u32 groupOffset; - // PS2 pointer padding; bolt library stuffs something here - u32 pad; + // PS2 pointer padding; bolt library stuffs something here + u32 pad; u32 EntryCount() { // Special case: 0x0 == 256 entries. @@ -89,4 +87,4 @@ namespace lightningbolt { inline bool Validate() const { return !std::memcmp(&magic[0], &VALID_MAGIC[0], sizeof(magic)); } }; -} // namespace lightningbolt \ No newline at end of file +} // namespace lightningbolt