summaryrefslogtreecommitdiff
path: root/cabinet/main.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2026-06-05 10:12:56 +0200
committerFelix Morgner <felix.morgner@gmail.com>2026-06-05 10:12:56 +0200
commit79549aab5b9ca8f0cad4f00bc8ad68b7091ab65f (patch)
treeaede76e5f2046838cd966848c1d4a9f5c800923b /cabinet/main.cpp
parentc1c317014002311874006f319b04121c88ef4672 (diff)
downloadcabinet-79549aab5b9ca8f0cad4f00bc8ad68b7091ab65f.tar.xz
cabinet-79549aab5b9ca8f0cad4f00bc8ad68b7091ab65f.zip
magic: implement buffer processing support
Diffstat (limited to 'cabinet/main.cpp')
-rw-r--r--cabinet/main.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/cabinet/main.cpp b/cabinet/main.cpp
index ff35d34..3602142 100644
--- a/cabinet/main.cpp
+++ b/cabinet/main.cpp
@@ -1,8 +1,13 @@
#include <cabinet/magic.hpp>
#include <fcntl.h>
+#include <unistd.h>
+#include <array>
+#include <cerrno>
+#include <cstddef>
#include <cstdlib>
+#include <cstring>
#include <iostream>
#include <print>
@@ -23,12 +28,21 @@ auto main(int argc, char ** argv) -> int
return EXIT_FAILURE;
}
- auto fd = open(argv[1], O_RDONLY);
- auto mime_type = magic->process(fd);
+ auto fd = ::open(argv[1], O_RDONLY);
+ if (fd < 0)
+ {
+ std::println(std::cerr, "Failed to determine file type: {}", ::strerror(errno));
+ return EXIT_FAILURE;
+ }
+
+ std::array<std::byte, 512> buffer{};
+ ::read(fd, buffer.data(), buffer.size());
+ auto mime_type = magic->process(buffer);
if (!mime_type)
{
std::println(std::cerr, "Failed to determine file type: {}", mime_type.error().message());
return EXIT_FAILURE;
}
+
std::println("{}: {}", argv[1], mime_type.value());
}