Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ make remove #remove from /bin/
### Format support:
> See [./src/magic.h](src/magic.h)

- Images: BMP, PNG, JPEG, QOI, GIF, TIFF, WEBP
- Audio: WAV, MP3, OGG, QOA, AIFF, MIDI, FLAC
- Video: MP4, AVI
- Multimedia: PDF, XCF, Blender, glTF, MD2
- Fonts: WOFF, WOFF2, OpenType
- Images: BMP, GIF, JPEG, PNG, QOI, TIFF, WebP
- Audio: AIFF, FLAC, WAV, MIDI, ogg, QOA, MP3
- Video: AVI, MP4
- Multimedia: Blender, FL Studio, glTF, docx, Photoshop, PDF, Quake MDL, Rich Text
- Fonts: OpenType, WOFF, WOFF2
- Executables: ELF, EXE, WebAssembly, Luac
- Archives: Tar, ZIP, GZIP, XZ, LZIP, 7-Zip, RAR, BZip, CPIO, PAK, .deb, .rpm
- Binary Data: qcow, ISO
Expand Down
125 changes: 65 additions & 60 deletions src/magic.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,18 @@ filetype_t magic_table [] = {
{ .name = "Windows Shell Link",
.magic = "\x4C\x00\x00\x00\x01\x14\x02\x00\x00\x00\x00\x00\xC0\x00\x00\x00\x00\x00\x00\x46", .len = 20, .ext = "lnk" },
// Raster Image Formats
{ .name = "PNG Image",
.magic = "\x89\x50\x4E\x47", .len = 4, .ext = "png" },
{ .name = "JPEG Image",
.magic = "\xFF\xD8\xFF", .len = 3, .ext = "jpeg" },
{ .name = "Quite-OK Image Format",
.magic = "qoif", .len = 4, .ext = "qoi" },
{ .name = "Bitmap Image",
.magic = "BM", .ext = "bmp", .len = 2 },
{ .name = "GIF Image (version 87)",
.magic = "GIF87a", .len = 6, .ext = "gif" },
{ .name = "GIF Image (version 89)",
.magic = "GIF89a", .len = 6, .ext = "gif" },
{ .name = "Bitmap Image",
.magic = "BM", .ext = "bmp", .len = 2 },
{ .name = "JPEG Image",
.magic = "\xFF\xD8\xFF", .len = 3, .ext = "jpeg" },
{ .name = "PNG Image",
.magic = "\x89\x50\x4E\x47", .len = 4, .ext = "png" },
{ .name = "Quite-OK Image Format",
.magic = "qoif", .len = 4, .ext = "qoi" },
{ .name = "Tagged Image File (Little-Endian)",
.magic = "\x49\x49\x2A\x00",
.len = 4, .ext = "tiff" },
Expand All @@ -60,105 +60,110 @@ filetype_t magic_table [] = {
.magic = "WEBP", .len = 4, .off = 8, .ext = "webp" },
// Vector Image Formats
// Audio and Video Containers
{ .name = "Waveform Audio",
.magic = "WAVE", .len = 4, .off = 8, .ext = "wav" },
{ .name = "Audio Interchange Format",
.magic = "AIFF", .len = 4, .off = 4, .ext = "aiff" },
{ .name = "Audio Video Interleave",
.magic = "AVI\x20", .len = 4, .off = 8, .ext = "avi" },
{ .name = "Tagged MP3 Audio",
.magic = "ID3", .len = 3, .ext = "mp3" },
{ .name = "Free Lossless Audio Codec",
.magic = "fLaC", .len = 4, .ext = "flac" },
{ .name = "Waveform Audio",
.magic = "WAVE", .len = 4, .off = 8, .ext = "wav" },
{ .name = "MIDI Sound File",
.magic = "MThd", .len = 4, .ext = "mid" },
{ .name = "MP4 Video",
.magic = "\x66\x74\x79", .off = 4, .len = 3, .ext = "mp4" },
{ .name = "OGG Vorbis Format",
.magic = "OggS", .len = 4, .ext = "ogg" },
{ .name = "Audio Interchange Format",
.magic = "AIFF", .len = 4, .off = 4, .ext = "aiff" },
{ .name = "Quite-OK Audio Format",
.magic = "qoaf", .len = 4, .ext = "qoa" },
{ .name = "Free Lossless Audio Codec",
.magic = "fLaC", .len = 4, .ext = "flac" },
{ .name = "MIDI Sound File",
.magic = "MThd", .len = 4, .ext = "mid" },
{ .name = "Tagged MP3 Audio",
.magic = "ID3", .len = 3, .ext = "mp3" },
// Font Formats
{ .name = "OpenType Font",
.magic = "OTTO", .len = 4, .ext = "ttf" },
{ .name = "WOFF Font 1.0",
.magic = "wOFF", .len = 4, .ext = "woff" },
{ .name = "WOFF Font 2.0",
.magic = "wOF2", .len = 4, .ext = "woff2" },
{ .name = "OpenType Font",
.magic = "OTTO", .len = 4, .ext = "ttf" },
// Other Multimedia
{ .name = "Portable Document Format",
.magic = "%PDF-", .len = 5, .ext = "pdf" },
{ .name = "Blender File Format",
.magic = "BLENDER", .len = 7, .ext = "blend" },
{ .name = "FL Studio Project",
.magic = "FLhd", .len = 4, .ext = "flp" },
{ .name = "glTF Binary Format",
.magic = "glTF", .len = 4, .ext = "glb" },
{ .name = "Photoshop Document",
.magic = "8BPS", .len = 4, .ext = "psd" },
{ .name = "GIMP Project",
.magic = "gimp xcf ", .len = 9, .ext = "xcf" },
{ .name = "Microsoft Compound File Format",
.magic = "\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1", .len = 8, .ext = "doc" },
{ .name = "Rich Text",
.magic = "{\x5Crtf1", .len = 6, .ext = "rtf" },
{ .name = "FL Studio Project",
.magic = "FLhd", .len = 4, .ext = "flp" },
{ .name = "Photoshop Document",
.magic = "8BPS", .len = 4, .ext = "psd" },
{ .name = "Portable Document Format",
.magic = "%PDF-", .len = 5, .ext = "pdf" },
{ .name = "Quake 2 Model",
.magic = "IDP2\x08\x00\x00\x00", .len = 8, .ext = ".md2" },
{ .name = "GIMP Project",
.magic = "gimp xcf ", .len = 9, .ext = "xcf" },
{ .name = "Rich Text",
.magic = "{\x5Crtf1", .len = 6, .ext = "rtf" },
// Executable Formats
{ .name = "ELF Binary",
.magic = "\x7F" "ELF", .len = 4, .ext = "bin", .printer = elf_printer },
{ .name = "Windows Portable Executable (EXE)",
.magic = "MZPE\x00\x00", .len = 6, .ext = "exe" },
{ .name = "Java Class file",
.magic = "\xFE\xCA\xBE\xBA", .len = 4, .ext = "class" },
{ .name = "Lua Bytecode",
.magic = "\x1BLua", .len = 4, .ext = "luac" },
{ .name = "MachO Binary (32-bit x86)",
.magic = "\xCE\xFA\xED\xFE\x07\x00\x00\x00", .len = 8, .ext = NULL },
{ .name = "MachO Binary (64-bit x86)",
.magic = "\xCF\xFA\xED\xFE\x07\x00\x00\x00", .len = 8, .ext = NULL },
{ .name = "MachO Binary (64-bit ARM)",
.magic = "\xCF\xFA\xED\xFE\x0C\x00\x00\x00", .len = 8, .ext = NULL },
{ .name = "ELF Binary",
.magic = "\x7F" "ELF", .len = 4, .ext = "bin", .printer = elf_printer },
{ .name = "PlayStation Package",
.magic = "\x7F\x50\x4B\x47\x80\x00", .len = 6, .ext = "pkg" },
{ .name = "Portable Executable Binary",
.magic = "\x4D\x5A", .len = 2, .ext = "exe" },
{ .name = "WebAssembly Binary",
.magic = "\x00asm", .len = 4, .ext = "wasm" },
{ .name = "Lua Bytecode",
.magic = "\x1BLua", .len = 4, .ext = "luac" },
{ .name = "Java Class file",
.magic = "\xFE\xCA\xBE\xBA", .len = 4, .ext = "class" },
{ .name = "PlayStation Package",
.magic = "\x7F\x50\x4B\x47\x80\x00", .len = 6, .ext = "pkg" },
// Archive Formats
{ .name = "ZIP Archive",
.magic = "PK", .len = 2, .ext = "zip" },
{ .name = "GZIP Archive",
.magic = "\x1F\x8B", .len = 2, .ext = "gz" },
{ .name = "LZIP Archive",
.magic = "LZIP", .len = 4, .ext = "lz" },
{ .name = "XZ Archive",
.magic = "\xFD\x37\x7A\x58\x5A\x00", .len = 6, .ext = "xz" },
{ .name = "7-Zip Archive",
.magic = "7z\xBC\xAF\x27\x1C", .len = 6, .ext = "7z" },
{ .name = "RAR Archive",
.magic = "\x52\x61\x72\x21\x1A", .len = 5, .ext = "rar" },
{ .name = "BZip Archive",
.magic = "BZh", .len = 3, .ext = "bz2" },
{ .name = "CPIO Archive",
.magic = "\x30\x37\x30\x37\x30", .len = 5, .ext = "cpio" },
{ .name = "Debian Linux package",
.magic = "!<arch>\x0A", .len = 8, .ext = "deb" },
{ .name = "GZIP Archive",
.magic = "\x1F\x8B", .len = 2, .ext = "gz" },
{ .name = "LZIP Archive",
.magic = "LZIP", .len = 4, .ext = "lz" },
{ .name = "Quake PACK Archive",
.magic = "PACK", .len = 4, .ext = "pak" },
{ .name = "Quake WAD Archive", // https://github.com/id-Software/Quake/tree/master/WinQuake
.magic = "WAD2", .len = 4, .ext = "wad" },
{ .name = "RAR Archive",
.magic = "\x52\x61\x72\x21\x1A", .len = 5, .ext = "rar" },
{ .name = "RedHat RPM Linux Package",
.magic = "\x8E\xAD\xE8\x01\x00\x00\x00\x00", .len = 8, .ext = "rpm" },
{ .name = "eXtensible ARchive",
.magic = "xar!", .len = 4, .ext = "xar" },
{ .name = "Tar Archive",
.magic = "ustar", .len = 5, .ext = "tar" },
{ .name = "Quake WAD Archive", // https://github.com/id-Software/Quake/tree/master/WinQuake
.magic = "WAD2", .len = 4, .ext = "wad" },
{ .name = "Quake PACK Archive",
.magic = "PACK", .len = 4, .ext = "pak" },
{ .name = "eXtensible ARchive",
.magic = "xar!", .len = 4, .ext = "xar" },
{ .name = "XZ Archive",
.magic = "\xFD\x37\x7A\x58\x5A\x00", .len = 6, .ext = "xz" },
{ .name = "ZIM Web Archive",
.magic = "\x5A\x49\x4D\x04", .len = 4, .ext = "zim" },
{ .name = "ZIP Archive",
.magic = "PK", .len = 2, .ext = "zip" },
{ .name = "7-Zip Archive",
.magic = "7z\xBC\xAF\x27\x1C", .len = 6, .ext = "7z" },
// Device Image Formats
{ .name = "qcow File Format",
.magic = "QFI", .len = 3, .ext = "qcow" },
{ .name = "ISO9660 CD Image",
.magic = "CD001", .len = 5, .ext = "iso" },
{ .name = "Compressed ISO Image",
.magic = "IsZ!", .len = 4, .ext = "isz" },
{ .name = "ISO9660 CD Image",
.magic = "CD001", .len = 5, .ext = "iso" },
{ .name = "qcow File Format",
.magic = "QFI", .len = 3, .ext = "qcow" },

};

#endif
Loading