1b6cee71dSXin LI/* 2b6cee71dSXin LI * Copyright (c) Christos Zoulas 2003. 3b6cee71dSXin LI * All Rights Reserved. 4b6cee71dSXin LI * 5b6cee71dSXin LI * Redistribution and use in source and binary forms, with or without 6b6cee71dSXin LI * modification, are permitted provided that the following conditions 7b6cee71dSXin LI * are met: 8b6cee71dSXin LI * 1. Redistributions of source code must retain the above copyright 9b6cee71dSXin LI * notice immediately at the beginning of the file, without modification, 10b6cee71dSXin LI * this list of conditions, and the following disclaimer. 11b6cee71dSXin LI * 2. Redistributions in binary form must reproduce the above copyright 12b6cee71dSXin LI * notice, this list of conditions and the following disclaimer in the 13b6cee71dSXin LI * documentation and/or other materials provided with the distribution. 14b6cee71dSXin LI * 15b6cee71dSXin LI * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16b6cee71dSXin LI * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17b6cee71dSXin LI * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18b6cee71dSXin LI * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 19b6cee71dSXin LI * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20b6cee71dSXin LI * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21b6cee71dSXin LI * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22b6cee71dSXin LI * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23b6cee71dSXin LI * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24b6cee71dSXin LI * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25b6cee71dSXin LI * SUCH DAMAGE. 26b6cee71dSXin LI */ 27b6cee71dSXin LI#ifndef _MAGIC_H 28b6cee71dSXin LI#define _MAGIC_H 29b6cee71dSXin LI 30b6cee71dSXin LI#include <sys/types.h> 31b6cee71dSXin LI 325f0216bdSXin LI#define MAGIC_NONE 0x0000000 /* No flags */ 335f0216bdSXin LI#define MAGIC_DEBUG 0x0000001 /* Turn on debugging */ 345f0216bdSXin LI#define MAGIC_SYMLINK 0x0000002 /* Follow symlinks */ 355f0216bdSXin LI#define MAGIC_COMPRESS 0x0000004 /* Check inside compressed files */ 365f0216bdSXin LI#define MAGIC_DEVICES 0x0000008 /* Look at the contents of devices */ 375f0216bdSXin LI#define MAGIC_MIME_TYPE 0x0000010 /* Return the MIME type */ 385f0216bdSXin LI#define MAGIC_CONTINUE 0x0000020 /* Return all matches */ 395f0216bdSXin LI#define MAGIC_CHECK 0x0000040 /* Print warnings to stderr */ 405f0216bdSXin LI#define MAGIC_PRESERVE_ATIME 0x0000080 /* Restore access time on exit */ 415f0216bdSXin LI#define MAGIC_RAW 0x0000100 /* Don't convert unprintable chars */ 425f0216bdSXin LI#define MAGIC_ERROR 0x0000200 /* Handle ENOENT etc as real errors */ 435f0216bdSXin LI#define MAGIC_MIME_ENCODING 0x0000400 /* Return the MIME encoding */ 44b6cee71dSXin LI#define MAGIC_MIME (MAGIC_MIME_TYPE|MAGIC_MIME_ENCODING) 455f0216bdSXin LI#define MAGIC_APPLE 0x0000800 /* Return the Apple creator/type */ 465f0216bdSXin LI#define MAGIC_EXTENSION 0x1000000 /* Return a /-separated list of 475f0216bdSXin LI * extensions */ 485f0216bdSXin LI#define MAGIC_COMPRESS_TRANSP 0x2000000 /* Check inside compressed files 495f0216bdSXin LI * but not report compression */ 505f0216bdSXin LI#define MAGIC_NODESC (MAGIC_EXTENSION|MAGIC_MIME|MAGIC_APPLE) 51b6cee71dSXin LI 525f0216bdSXin LI#define MAGIC_NO_CHECK_COMPRESS 0x0001000 /* Don't check for compressed files */ 535f0216bdSXin LI#define MAGIC_NO_CHECK_TAR 0x0002000 /* Don't check for tar files */ 545f0216bdSXin LI#define MAGIC_NO_CHECK_SOFT 0x0004000 /* Don't check magic entries */ 555f0216bdSXin LI#define MAGIC_NO_CHECK_APPTYPE 0x0008000 /* Don't check application type */ 565f0216bdSXin LI#define MAGIC_NO_CHECK_ELF 0x0010000 /* Don't check for elf details */ 575f0216bdSXin LI#define MAGIC_NO_CHECK_TEXT 0x0020000 /* Don't check for text files */ 585f0216bdSXin LI#define MAGIC_NO_CHECK_CDF 0x0040000 /* Don't check for cdf files */ 595f0216bdSXin LI#define MAGIC_NO_CHECK_TOKENS 0x0100000 /* Don't check tokens */ 605f0216bdSXin LI#define MAGIC_NO_CHECK_ENCODING 0x0200000 /* Don't check text encodings */ 61*48c779cdSXin LI#define MAGIC_NO_CHECK_JSON 0x0400000 /* Don't check for JSON files */ 62b6cee71dSXin LI 63b6cee71dSXin LI/* No built-in tests; only consult the magic file */ 64b6cee71dSXin LI#define MAGIC_NO_CHECK_BUILTIN ( \ 65b6cee71dSXin LI MAGIC_NO_CHECK_COMPRESS | \ 66b6cee71dSXin LI MAGIC_NO_CHECK_TAR | \ 67b6cee71dSXin LI/* MAGIC_NO_CHECK_SOFT | */ \ 68b6cee71dSXin LI MAGIC_NO_CHECK_APPTYPE | \ 69b6cee71dSXin LI MAGIC_NO_CHECK_ELF | \ 70b6cee71dSXin LI MAGIC_NO_CHECK_TEXT | \ 71b6cee71dSXin LI MAGIC_NO_CHECK_CDF | \ 72b6cee71dSXin LI MAGIC_NO_CHECK_TOKENS | \ 73b6cee71dSXin LI MAGIC_NO_CHECK_ENCODING | \ 74*48c779cdSXin LI MAGIC_NO_CHECK_JSON | \ 75b6cee71dSXin LI 0 \ 76b6cee71dSXin LI) 77b6cee71dSXin LI 7840427ccaSGordon Tetlow#define MAGIC_SNPRINTB "\177\020\ 7940427ccaSGordon Tetlowb\0debug\0\ 8040427ccaSGordon Tetlowb\1symlink\0\ 8140427ccaSGordon Tetlowb\2compress\0\ 8240427ccaSGordon Tetlowb\3devices\0\ 8340427ccaSGordon Tetlowb\4mime_type\0\ 8440427ccaSGordon Tetlowb\5continue\0\ 8540427ccaSGordon Tetlowb\6check\0\ 8640427ccaSGordon Tetlowb\7preserve_atime\0\ 8740427ccaSGordon Tetlowb\10raw\0\ 8840427ccaSGordon Tetlowb\11error\0\ 8940427ccaSGordon Tetlowb\12mime_encoding\0\ 9040427ccaSGordon Tetlowb\13apple\0\ 9140427ccaSGordon Tetlowb\14no_check_compress\0\ 9240427ccaSGordon Tetlowb\15no_check_tar\0\ 9340427ccaSGordon Tetlowb\16no_check_soft\0\ 9440427ccaSGordon Tetlowb\17no_check_sapptype\0\ 9540427ccaSGordon Tetlowb\20no_check_elf\0\ 9640427ccaSGordon Tetlowb\21no_check_text\0\ 9740427ccaSGordon Tetlowb\22no_check_cdf\0\ 9840427ccaSGordon Tetlowb\23no_check_reserved0\0\ 9940427ccaSGordon Tetlowb\24no_check_tokens\0\ 10040427ccaSGordon Tetlowb\25no_check_encoding\0\ 101*48c779cdSXin LIb\26no_check_json\0\ 10240427ccaSGordon Tetlowb\27no_check_reserved2\0\ 10340427ccaSGordon Tetlowb\30extension\0\ 10440427ccaSGordon Tetlowb\31transp_compression\0\ 10540427ccaSGordon Tetlow" 10640427ccaSGordon Tetlow 107b6cee71dSXin LI/* Defined for backwards compatibility (renamed) */ 108b6cee71dSXin LI#define MAGIC_NO_CHECK_ASCII MAGIC_NO_CHECK_TEXT 109b6cee71dSXin LI 110b6cee71dSXin LI/* Defined for backwards compatibility; do nothing */ 111b6cee71dSXin LI#define MAGIC_NO_CHECK_FORTRAN 0x000000 /* Don't check ascii/fortran */ 112b6cee71dSXin LI#define MAGIC_NO_CHECK_TROFF 0x000000 /* Don't check ascii/troff */ 113b6cee71dSXin LI 114b6cee71dSXin LI#define MAGIC_VERSION X.YY /* This implementation */ 115b6cee71dSXin LI 116b6cee71dSXin LI 117b6cee71dSXin LI#ifdef __cplusplus 118b6cee71dSXin LIextern "C" { 119b6cee71dSXin LI#endif 120b6cee71dSXin LI 121b6cee71dSXin LItypedef struct magic_set *magic_t; 122b6cee71dSXin LImagic_t magic_open(int); 123b6cee71dSXin LIvoid magic_close(magic_t); 124b6cee71dSXin LI 125b6cee71dSXin LIconst char *magic_getpath(const char *, int); 126b6cee71dSXin LIconst char *magic_file(magic_t, const char *); 127b6cee71dSXin LIconst char *magic_descriptor(magic_t, int); 128b6cee71dSXin LIconst char *magic_buffer(magic_t, const void *, size_t); 129b6cee71dSXin LI 130b6cee71dSXin LIconst char *magic_error(magic_t); 13140427ccaSGordon Tetlowint magic_getflags(magic_t); 132b6cee71dSXin LIint magic_setflags(magic_t, int); 133b6cee71dSXin LI 134b6cee71dSXin LIint magic_version(void); 135b6cee71dSXin LIint magic_load(magic_t, const char *); 136c2931133SXin LIint magic_load_buffers(magic_t, void **, size_t *, size_t); 137c2931133SXin LI 138b6cee71dSXin LIint magic_compile(magic_t, const char *); 139b6cee71dSXin LIint magic_check(magic_t, const char *); 140b6cee71dSXin LIint magic_list(magic_t, const char *); 141b6cee71dSXin LIint magic_errno(magic_t); 142b6cee71dSXin LI 143c2931133SXin LI#define MAGIC_PARAM_INDIR_MAX 0 144c2931133SXin LI#define MAGIC_PARAM_NAME_MAX 1 145c2931133SXin LI#define MAGIC_PARAM_ELF_PHNUM_MAX 2 146c2931133SXin LI#define MAGIC_PARAM_ELF_SHNUM_MAX 3 1474460e5b0SXin LI#define MAGIC_PARAM_ELF_NOTES_MAX 4 1489ce06829SXin LI#define MAGIC_PARAM_REGEX_MAX 5 14920f8619dSXin LI#define MAGIC_PARAM_BYTES_MAX 6 150c2931133SXin LI 151c2931133SXin LIint magic_setparam(magic_t, int, const void *); 152c2931133SXin LIint magic_getparam(magic_t, int, void *); 153c2931133SXin LI 154b6cee71dSXin LI#ifdef __cplusplus 155b6cee71dSXin LI}; 156b6cee71dSXin LI#endif 157b6cee71dSXin LI 158b6cee71dSXin LI#endif /* _MAGIC_H */ 159