#include #include #include #include #include #include #include #include #include #include using flags = cab::magic::flags; auto main(int argc, char ** argv) -> int { if (argc != 2) { std::println(std::cerr, "Expected a filename"); return EXIT_FAILURE; } auto magic = cab::magic::open(flags::follow_symlinks | flags::mime_type | flags::forward_errors); if (!magic) { std::println(std::cerr, "Failed to initialize libmagic: {}", magic.error().message()); return EXIT_FAILURE; } 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 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()); }