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 */ 50898496eeSXin LI#define MAGIC_NO_COMPRESS_FORK 0x4000000 /* Don't allow decompression that 51898496eeSXin LI * needs to fork */ 525f0216bdSXin LI#define MAGIC_NODESC (MAGIC_EXTENSION|MAGIC_MIME|MAGIC_APPLE) 53b6cee71dSXin LI 545f0216bdSXin LI#define MAGIC_NO_CHECK_COMPRESS 0x0001000 /* Don't check for compressed files */ 555f0216bdSXin LI#define MAGIC_NO_CHECK_TAR 0x0002000 /* Don't check for tar files */ 565f0216bdSXin LI#define MAGIC_NO_CHECK_SOFT 0x0004000 /* Don't check magic entries */ 575f0216bdSXin LI#define MAGIC_NO_CHECK_APPTYPE 0x0008000 /* Don't check application type */ 585f0216bdSXin LI#define MAGIC_NO_CHECK_ELF 0x0010000 /* Don't check for elf details */ 595f0216bdSXin LI#define MAGIC_NO_CHECK_TEXT 0x0020000 /* Don't check for text files */ 605f0216bdSXin LI#define MAGIC_NO_CHECK_CDF 0x0040000 /* Don't check for cdf files */ 61d38c30c0SXin LI#define MAGIC_NO_CHECK_CSV 0x0080000 /* Don't check for CSV files */ 625f0216bdSXin LI#define MAGIC_NO_CHECK_TOKENS 0x0100000 /* Don't check tokens */ 635f0216bdSXin LI#define MAGIC_NO_CHECK_ENCODING 0x0200000 /* Don't check text encodings */ 6448c779cdSXin LI#define MAGIC_NO_CHECK_JSON 0x0400000 /* Don't check for JSON files */ 65898496eeSXin LI#define MAGIC_NO_CHECK_SIMH 0x0800000 /* Don't check for SIMH tape files */ 66b6cee71dSXin LI 67b6cee71dSXin LI/* No built-in tests; only consult the magic file */ 68b6cee71dSXin LI#define MAGIC_NO_CHECK_BUILTIN ( \ 69b6cee71dSXin LI MAGIC_NO_CHECK_COMPRESS | \ 70b6cee71dSXin LI MAGIC_NO_CHECK_TAR | \ 71b6cee71dSXin LI/* MAGIC_NO_CHECK_SOFT | */ \ 72b6cee71dSXin LI MAGIC_NO_CHECK_APPTYPE | \ 73b6cee71dSXin LI MAGIC_NO_CHECK_ELF | \ 74b6cee71dSXin LI MAGIC_NO_CHECK_TEXT | \ 75d38c30c0SXin LI MAGIC_NO_CHECK_CSV | \ 76b6cee71dSXin LI MAGIC_NO_CHECK_CDF | \ 77b6cee71dSXin LI MAGIC_NO_CHECK_TOKENS | \ 78b6cee71dSXin LI MAGIC_NO_CHECK_ENCODING | \ 7948c779cdSXin LI MAGIC_NO_CHECK_JSON | \ 80898496eeSXin LI MAGIC_NO_CHECK_SIMH | \ 81b6cee71dSXin LI 0 \ 82b6cee71dSXin LI) 83b6cee71dSXin LI 8440427ccaSGordon Tetlow#define MAGIC_SNPRINTB "\177\020\ 8540427ccaSGordon Tetlowb\0debug\0\ 8640427ccaSGordon Tetlowb\1symlink\0\ 8740427ccaSGordon Tetlowb\2compress\0\ 8840427ccaSGordon Tetlowb\3devices\0\ 8940427ccaSGordon Tetlowb\4mime_type\0\ 9040427ccaSGordon Tetlowb\5continue\0\ 9140427ccaSGordon Tetlowb\6check\0\ 9240427ccaSGordon Tetlowb\7preserve_atime\0\ 9340427ccaSGordon Tetlowb\10raw\0\ 9440427ccaSGordon Tetlowb\11error\0\ 9540427ccaSGordon Tetlowb\12mime_encoding\0\ 9640427ccaSGordon Tetlowb\13apple\0\ 9740427ccaSGordon Tetlowb\14no_check_compress\0\ 9840427ccaSGordon Tetlowb\15no_check_tar\0\ 9940427ccaSGordon Tetlowb\16no_check_soft\0\ 100*ae316d1dSXin LIb\17no_check_apptype\0\ 10140427ccaSGordon Tetlowb\20no_check_elf\0\ 10240427ccaSGordon Tetlowb\21no_check_text\0\ 10340427ccaSGordon Tetlowb\22no_check_cdf\0\ 104898496eeSXin LIb\23no_check_csv\0\ 10540427ccaSGordon Tetlowb\24no_check_tokens\0\ 10640427ccaSGordon Tetlowb\25no_check_encoding\0\ 10748c779cdSXin LIb\26no_check_json\0\ 108898496eeSXin LIb\27no_check_simh\0\ 10940427ccaSGordon Tetlowb\30extension\0\ 11040427ccaSGordon Tetlowb\31transp_compression\0\ 11140427ccaSGordon Tetlow" 11240427ccaSGordon Tetlow 113b6cee71dSXin LI/* Defined for backwards compatibility (renamed) */ 114b6cee71dSXin LI#define MAGIC_NO_CHECK_ASCII MAGIC_NO_CHECK_TEXT 115b6cee71dSXin LI 116b6cee71dSXin LI/* Defined for backwards compatibility; do nothing */ 117b6cee71dSXin LI#define MAGIC_NO_CHECK_FORTRAN 0x000000 /* Don't check ascii/fortran */ 118b6cee71dSXin LI#define MAGIC_NO_CHECK_TROFF 0x000000 /* Don't check ascii/troff */ 119b6cee71dSXin LI 120b6cee71dSXin LI#define MAGIC_VERSION X.YY /* This implementation */ 121b6cee71dSXin LI 122b6cee71dSXin LI 123b6cee71dSXin LI#ifdef __cplusplus 124b6cee71dSXin LIextern "C" { 125b6cee71dSXin LI#endif 126b6cee71dSXin LI 127b6cee71dSXin LItypedef struct magic_set *magic_t; 128b6cee71dSXin LImagic_t magic_open(int); 129b6cee71dSXin LIvoid magic_close(magic_t); 130b6cee71dSXin LI 131b6cee71dSXin LIconst char *magic_getpath(const char *, int); 132b6cee71dSXin LIconst char *magic_file(magic_t, const char *); 133b6cee71dSXin LIconst char *magic_descriptor(magic_t, int); 134b6cee71dSXin LIconst char *magic_buffer(magic_t, const void *, size_t); 135b6cee71dSXin LI 136b6cee71dSXin LIconst char *magic_error(magic_t); 13740427ccaSGordon Tetlowint magic_getflags(magic_t); 138b6cee71dSXin LIint magic_setflags(magic_t, int); 139b6cee71dSXin LI 140b6cee71dSXin LIint magic_version(void); 141b6cee71dSXin LIint magic_load(magic_t, const char *); 142c2931133SXin LIint magic_load_buffers(magic_t, void **, size_t *, size_t); 143c2931133SXin LI 144b6cee71dSXin LIint magic_compile(magic_t, const char *); 145b6cee71dSXin LIint magic_check(magic_t, const char *); 146b6cee71dSXin LIint magic_list(magic_t, const char *); 147b6cee71dSXin LIint magic_errno(magic_t); 148b6cee71dSXin LI 149c2931133SXin LI#define MAGIC_PARAM_INDIR_MAX 0 150c2931133SXin LI#define MAGIC_PARAM_NAME_MAX 1 151c2931133SXin LI#define MAGIC_PARAM_ELF_PHNUM_MAX 2 152c2931133SXin LI#define MAGIC_PARAM_ELF_SHNUM_MAX 3 1534460e5b0SXin LI#define MAGIC_PARAM_ELF_NOTES_MAX 4 1549ce06829SXin LI#define MAGIC_PARAM_REGEX_MAX 5 15520f8619dSXin LI#define MAGIC_PARAM_BYTES_MAX 6 15643a5ec4eSXin LI#define MAGIC_PARAM_ENCODING_MAX 7 157898496eeSXin LI#define MAGIC_PARAM_ELF_SHSIZE_MAX 8 158*ae316d1dSXin LI#define MAGIC_PARAM_MAGWARN_MAX 9 159c2931133SXin LI 160c2931133SXin LIint magic_setparam(magic_t, int, const void *); 161c2931133SXin LIint magic_getparam(magic_t, int, void *); 162c2931133SXin LI 163b6cee71dSXin LI#ifdef __cplusplus 164b6cee71dSXin LI}; 165b6cee71dSXin LI#endif 166b6cee71dSXin LI 167b6cee71dSXin LI#endif /* _MAGIC_H */ 168