some updates
[iv.d.git] / libmagic.d
blob5699f86b2018506adda4206dd3595ff95f80cf5b
1 /*
2 * Copyright (c) Christos Zoulas 2003.
3 * All Rights Reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice immediately at the beginning of the file, without modification,
10 * this list of conditions, and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
19 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
27 module iv.libmagic /*is aliced*/;
28 pragma(lib, "magic");
30 import iv.alice;
33 extern(C) @trusted nothrow @nogc:
34 enum {
35 MAGIC_NONE = 0x0000000, /* No flags */
36 MAGIC_DEBUG = 0x0000001, /* Turn on debugging */
37 MAGIC_SYMLINK = 0x0000002, /* Follow symlinks */
38 MAGIC_COMPRESS = 0x0000004, /* Check inside compressed files */
39 MAGIC_DEVICES = 0x0000008, /* Look at the contents of devices */
40 MAGIC_MIME_TYPE = 0x0000010, /* Return the MIME type */
41 MAGIC_CONTINUE = 0x0000020, /* Return all matches */
42 MAGIC_CHECK = 0x0000040, /* Print warnings to stderr */
43 MAGIC_PRESERVE_ATIME = 0x0000080, /* Restore access time on exit */
44 MAGIC_RAW = 0x0000100, /* Don't convert unprintable chars */
45 MAGIC_ERROR = 0x0000200, /* Handle ENOENT etc as real errors */
46 MAGIC_MIME_ENCODING = 0x0000400, /* Return the MIME encoding */
47 MAGIC_MIME = (MAGIC_MIME_TYPE|MAGIC_MIME_ENCODING),
48 MAGIC_APPLE = 0x0000800, /* Return the Apple creator/type */
49 MAGIC_EXTENSION = 0x1000000, /* Return a /-separated list of extensions */
50 MAGIC_COMPRESS_TRANSP = 0x2000000, /* Check inside compressed files but not report compression */
51 MAGIC_NODESC = (MAGIC_EXTENSION|MAGIC_MIME|MAGIC_APPLE),
53 MAGIC_NO_CHECK_COMPRESS = 0x0001000, /* Don't check for compressed files */
54 MAGIC_NO_CHECK_TAR = 0x0002000, /* Don't check for tar files */
55 MAGIC_NO_CHECK_SOFT = 0x0004000, /* Don't check magic entries */
56 MAGIC_NO_CHECK_APPTYPE = 0x0008000, /* Don't check application type */
57 MAGIC_NO_CHECK_ELF = 0x0010000, /* Don't check for elf details */
58 MAGIC_NO_CHECK_TEXT = 0x0020000, /* Don't check for text files */
59 MAGIC_NO_CHECK_CDF = 0x0040000, /* Don't check for cdf files */
60 MAGIC_NO_CHECK_TOKENS = 0x0100000, /* Don't check tokens */
61 MAGIC_NO_CHECK_ENCODING = 0x0200000, /* Don't check text encodings */
64 /* No built-in tests; only consult the magic file */
65 enum MAGIC_NO_CHECK_BUILTIN = (
66 MAGIC_NO_CHECK_COMPRESS |
67 MAGIC_NO_CHECK_TAR |
68 /*MAGIC_NO_CHECK_SOFT | */
69 MAGIC_NO_CHECK_APPTYPE |
70 MAGIC_NO_CHECK_ELF |
71 MAGIC_NO_CHECK_TEXT |
72 MAGIC_NO_CHECK_CDF |
73 MAGIC_NO_CHECK_TOKENS |
74 MAGIC_NO_CHECK_ENCODING |
75 0);
77 /* Defined for backwards compatibility (renamed) */
78 enum MAGIC_NO_CHECK_ASCII = MAGIC_NO_CHECK_TEXT;
80 /* Defined for backwards compatibility; do nothing */
81 enum {
82 MAGIC_NO_CHECK_FORTRAN = 0x000000, /* Don't check ascii/fortran */
83 MAGIC_NO_CHECK_TROFF = 0x000000, /* Don't check ascii/troff */
86 enum MAGIC_VERSION = 524; /* This implementation */
89 struct magic_set_ {}
90 alias magic_t = magic_set_*;
92 magic_t magic_open (int flags);
93 void magic_close (magic_t cookie);
95 const(char)* magic_getpath (const(char)* filename, int);
96 const(char)* magic_file (magic_t cookie, const(char)* filename);
97 const(char)* magic_descriptor (magic_t cookie, int fd);
98 const(char)* magic_buffer (magic_t cookie, const(void)* buffer, usize length);
100 const(char)* magic_error (magic_t cookie);
101 int magic_setflags (magic_t cookie, int flags);
103 int magic_version ();
104 int magic_load (magic_t cookie, const(char)* filename);
105 int magic_load_buffers (magic_t cookie, void** buffers, usize* sizes, usize nbuffers);
107 int magic_compile (magic_t cookie, const(char)* filename);
108 int magic_check (magic_t cookie, const(char)* filename);
109 int magic_list (magic_t cookie, const(char)* filename);
110 int magic_errno (magic_t cookie);
112 enum {
113 MAGIC_PARAM_INDIR_MAX = 0,
114 MAGIC_PARAM_NAME_MAX = 1,
115 MAGIC_PARAM_ELF_PHNUM_MAX = 2,
116 MAGIC_PARAM_ELF_SHNUM_MAX = 3,
117 MAGIC_PARAM_ELF_NOTES_MAX = 4,
118 MAGIC_PARAM_REGEX_MAX = 5,
121 int magic_setparam (magic_t cookie, int param, const(void)* value);
122 int magic_getparam (magic_t cookie, int param, void* value);