From a95acc4d382cbb4937097e7fa2f6526974a26fcc Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 4 Jun 2026 18:14:19 +0200 Subject: core: add basic libmagic abstraction skeleton --- cabinet/magic.cpp | 19 +++++++++++++++++++ cabinet/magic.hpp | 36 ++++++++++++++++++++++++++++++++++++ cabinet/main.cpp | 6 +++++- 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 cabinet/magic.cpp create mode 100644 cabinet/magic.hpp (limited to 'cabinet') diff --git a/cabinet/magic.cpp b/cabinet/magic.cpp new file mode 100644 index 0000000..f8d7337 --- /dev/null +++ b/cabinet/magic.cpp @@ -0,0 +1,19 @@ +#include + +#include + +#include + +namespace cab +{ + + magic::magic(magic::flags flags) + : m_cookie{magic_open(std::to_underlying(flags))} + {} + + magic::~magic() + { + magic_close(m_cookie); + } + +} // namespace cab diff --git a/cabinet/magic.hpp b/cabinet/magic.hpp new file mode 100644 index 0000000..3ad6dfa --- /dev/null +++ b/cabinet/magic.hpp @@ -0,0 +1,36 @@ +#ifndef CABINET_MAGIC_HPP +#define CABINET_MAGIC_HPP + +#include + +#include + +namespace cab +{ + + struct magic + { + enum struct flags : decltype(MAGIC_NONE) + { + none = MAGIC_NONE, + print_debug = MAGIC_DEBUG, + follow_symlinks = MAGIC_SYMLINK, + inspect_compressed = MAGIC_COMPRESS, + inspect_devices = MAGIC_DEVICES, + }; + + magic(flags flags); + ~magic(); + + private: + magic_t m_cookie{}; + }; + + constexpr auto operator|(magic::flags lhs, magic::flags rhs) noexcept -> magic::flags + { + return static_cast(std::to_underlying(lhs) | std::to_underlying(rhs)); + } + +} // namespace cab + +#endif diff --git a/cabinet/main.cpp b/cabinet/main.cpp index 09509dd..26dd690 100644 --- a/cabinet/main.cpp +++ b/cabinet/main.cpp @@ -1,2 +1,6 @@ -auto main() -> int { +#include + +auto main() -> int +{ + [[maybe_unused]] auto magic = cab::magic{cab::magic::flags::print_debug | cab::magic::flags::follow_symlinks}; } -- cgit v1.2.3