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 */ 59*d38c30c0SXin LI#define MAGIC_NO_CHECK_CSV 0x0080000 /* Don't check for CSV files */ 605f0216bdSXin LI#define MAGIC_NO_CHECK_TOKENS 0x0100000 /* Don't check tokens */ 615f0216bdSXin LI#define MAGIC_NO_CHECK_ENCODING 0x0200000 /* Don't check text encodings */ 6248c779cdSXin LI#define MAGIC_NO_CHECK_JSON 0x0400000 /* Don't check for JSON files */ 63b6cee71dSXin LI 64b6cee71dSXin LI/* No built-in tests; only consult the magic file */ 65b6cee71dSXin LI#define MAGIC_NO_CHECK_BUILTIN ( \ 66b6cee71dSXin LI MAGIC_NO_CHECK_COMPRESS | \ 67b6cee71dSXin LI MAGIC_NO_CHECK_TAR | \ 68b6cee71dSXin LI/* MAGIC_NO_CHECK_SOFT | */ \ 69b6cee71dSXin LI MAGIC_NO_CHECK_APPTYPE | \ 70b6cee71dSXin LI MAGIC_NO_CHECK_ELF | \ 71b6cee71dSXin LI MAGIC_NO_CHECK_TEXT | \ 72*d38c30c0SXin LI MAGIC_NO_CHECK_CSV | \ 73b6cee71dSXin LI MAGIC_NO_CHECK_CDF | \ 74b6cee71dSXin LI MAGIC_NO_CHECK_TOKENS | \ 75b6cee71dSXin LI MAGIC_NO_CHECK_ENCODING | \ 7648c779cdSXin LI MAGIC_NO_CHECK_JSON | \ 77b6cee71dSXin LI 0 \ 78b6cee71dSXin LI) 79b6cee71dSXin LI 8040427ccaSGordon Tetlow#define MAGIC_SNPRINTB "\177\020\ 8140427ccaSGordon Tetlowb\0debug\0\ 8240427ccaSGordon Tetlowb\1symlink\0\ 8340427ccaSGordon Tetlowb\2compress\0\ 8440427ccaSGordon Tetlowb\3devices\0\ 8540427ccaSGordon Tetlowb\4mime_type\0\ 8640427ccaSGordon Tetlowb\5continue\0\ 8740427ccaSGordon Tetlowb\6check\0\ 8840427ccaSGordon Tetlowb\7preserve_atime\0\ 8940427ccaSGordon Tetlowb\10raw\0\ 9040427ccaSGordon Tetlowb\11error\0\ 9140427ccaSGordon Tetlowb\12mime_encoding\0\ 9240427ccaSGordon Tetlowb\13apple\0\ 9340427ccaSGordon Tetlowb\14no_check_compress\0\ 9440427ccaSGordon Tetlowb\15no_check_tar\0\ 9540427ccaSGordon Tetlowb\16no_check_soft\0\ 9640427ccaSGordon Tetlowb\17no_check_sapptype\0\ 9740427ccaSGordon Tetlowb\20no_check_elf\0\ 9840427ccaSGordon Tetlowb\21no_check_text\0\ 9940427ccaSGordon Tetlowb\22no_check_cdf\0\ 10040427ccaSGordon Tetlowb\23no_check_reserved0\0\ 10140427ccaSGordon Tetlowb\24no_check_tokens\0\ 10240427ccaSGordon Tetlowb\25no_check_encoding\0\ 10348c779cdSXin LIb\26no_check_json\0\ 10440427ccaSGordon Tetlowb\27no_check_reserved2\0\ 10540427ccaSGordon Tetlowb\30extension\0\ 10640427ccaSGordon Tetlowb\31transp_compression\0\ 10740427ccaSGordon Tetlow" 10840427ccaSGordon Tetlow 109b6cee71dSXin LI/* Defined for backwards compatibility (renamed) */ 110b6cee71dSXin LI#define MAGIC_NO_CHECK_ASCII MAGIC_NO_CHECK_TEXT 111b6cee71dSXin LI 112b6cee71dSXin LI/* Defined for backwards compatibility; do nothing */ 113b6cee71dSXin LI#define MAGIC_NO_CHECK_FORTRAN 0x000000 /* Don't check ascii/fortran */ 114b6cee71dSXin LI#define MAGIC_NO_CHECK_TROFF 0x000000 /* Don't check ascii/troff */ 115b6cee71dSXin LI 116b6cee71dSXin LI#define MAGIC_VERSION X.YY /* This implementation */ 117b6cee71dSXin LI 118b6cee71dSXin LI 119b6cee71dSXin LI#ifdef __cplusplus 120b6cee71dSXin LIextern "C" { 121b6cee71dSXin LI#endif 122b6cee71dSXin LI 123b6cee71dSXin LItypedef struct magic_set *magic_t; 124b6cee71dSXin LImagic_t magic_open(int); 125b6cee71dSXin LIvoid magic_close(magic_t); 126b6cee71dSXin LI 127b6cee71dSXin LIconst char *magic_getpath(const char *, int); 128b6cee71dSXin LIconst char *magic_file(magic_t, const char *); 129b6cee71dSXin LIconst char *magic_descriptor(magic_t, int); 130b6cee71dSXin LIconst char *magic_buffer(magic_t, const void *, size_t); 131b6cee71dSXin LI 132b6cee71dSXin LIconst char *magic_error(magic_t); 13340427ccaSGordon Tetlowint magic_getflags(magic_t); 134b6cee71dSXin LIint magic_setflags(magic_t, int); 135b6cee71dSXin LI 136b6cee71dSXin LIint magic_version(void); 137b6cee71dSXin LIint magic_load(magic_t, const char *); 138c2931133SXin LIint magic_load_buffers(magic_t, void **, size_t *, size_t); 139c2931133SXin LI 140b6cee71dSXin LIint magic_compile(magic_t, const char *); 141b6cee71dSXin LIint magic_check(magic_t, const char *); 142b6cee71dSXin LIint magic_list(magic_t, const char *); 143b6cee71dSXin LIint magic_errno(magic_t); 144b6cee71dSXin LI 145c2931133SXin LI#define MAGIC_PARAM_INDIR_MAX 0 146c2931133SXin LI#define MAGIC_PARAM_NAME_MAX 1 147c2931133SXin LI#define MAGIC_PARAM_ELF_PHNUM_MAX 2 148c2931133SXin LI#define MAGIC_PARAM_ELF_SHNUM_MAX 3 1494460e5b0SXin LI#define MAGIC_PARAM_ELF_NOTES_MAX 4 1509ce06829SXin LI#define MAGIC_PARAM_REGEX_MAX 5 15120f8619dSXin LI#define MAGIC_PARAM_BYTES_MAX 6 152c2931133SXin LI 153c2931133SXin LIint magic_setparam(magic_t, int, const void *); 154c2931133SXin LIint magic_getparam(magic_t, int, void *); 155c2931133SXin LI 156b6cee71dSXin LI#ifdef __cplusplus 157b6cee71dSXin LI}; 158b6cee71dSXin LI#endif 159b6cee71dSXin LI 160b6cee71dSXin LI#endif /* _MAGIC_H */ 161