summaryrefslogtreecommitdiff
path: root/cabinet
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2026-06-04 18:14:19 +0200
committerFelix Morgner <felix.morgner@gmail.com>2026-06-04 18:14:19 +0200
commita95acc4d382cbb4937097e7fa2f6526974a26fcc (patch)
tree71b922a413fad15d4796ee613a91240f4ae59df0 /cabinet
parent0ff3f826d9772d3695f481e0a3d0bc1517dd3ae4 (diff)
downloadcabinet-a95acc4d382cbb4937097e7fa2f6526974a26fcc.tar.xz
cabinet-a95acc4d382cbb4937097e7fa2f6526974a26fcc.zip
core: add basic libmagic abstraction skeleton
Diffstat (limited to 'cabinet')
-rw-r--r--cabinet/magic.cpp19
-rw-r--r--cabinet/magic.hpp36
-rw-r--r--cabinet/main.cpp6
3 files changed, 60 insertions, 1 deletions
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 <cabinet/magic.hpp>
+
+#include <magic.h>
+
+#include <utility>
+
+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 <magic.h>
+
+#include <utility>
+
+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<magic::flags>(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 <cabinet/magic.hpp>
+
+auto main() -> int
+{
+ [[maybe_unused]] auto magic = cab::magic{cab::magic::flags::print_debug | cab::magic::flags::follow_symlinks};
}