summaryrefslogtreecommitdiff
path: root/packages/libmagic/src/libmagic.pp
blob: 20860ab5cb582562e7ada9c3ac84ffb53c285d81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
{
    This file is part of the Free Pascal packages
    Copyright (C) 2019 Silvio Clecio (silvioprog)

    Pascal binding for libmagic(3)

    See the file COPYING.FPC, included in this distribution,
    for details about the copyright.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}

unit libmagic;

{$IFDEF FPC}
 {$MODE OBJFPC}
 {$H+}
{$ENDIF}

interface

type
  Pcchar = PAnsiChar;
  cint = LongInt;
  csize_t = NativeUInt;
  Pcsize_t = PNativeUInt;
  Pcvoid = Pointer;
  PPcvoid = PPointer;

const
  MAGIC_LIB_NAME = {$IFDEF MSWINDOWS}'libmagic-1'{$ELSE}'magic'{$ENDIF};

const
  MAGIC_NONE = $0000000; // No flags
  MAGIC_DEBUG = $0000001; // Turn on debugging
  MAGIC_SYMLINK = $0000002; // Follow symlinks
  MAGIC_COMPRESS = $0000004; // Check inside compressed files
  MAGIC_DEVICES = $0000008; // Look at the contents of devices
  MAGIC_MIME_TYPE = $0000010; // Return the MIME type
  MAGIC_CONTINUE = $0000020; // Return all matches
  MAGIC_CHECK_ = $0000040; // Print warnings to stderr
  MAGIC_PRESERVE_ATIME = $0000080; // Restore access time on exit
  MAGIC_RAW = $0000100; // Don't convert unprintable chars
  MAGIC_ERROR_ = $0000200; // Handle ENOENT etc as real errors
  MAGIC_MIME_ENCODING = $0000400; // Return the MIME encoding
  MAGIC_MIME = MAGIC_MIME_TYPE or MAGIC_MIME_ENCODING;
  MAGIC_APPLE = $0000800; // Return the Apple creator/type
  MAGIC_EXTENSION  = $1000000; // Return a /-separated list of extensions
  MAGIC_COMPRESS_TRANSP = $2000000; // Check inside compressed files but not report compression
  MAGIC_NODESC = MAGIC_EXTENSION or MAGIC_MIME or MAGIC_APPLE;

const
  MAGIC_NO_CHECK_COMPRESS = $0001000; // Don't check for compressed files
  MAGIC_NO_CHECK_TAR = $0002000; // Don't check for tar files
  MAGIC_NO_CHECK_SOFT = $0004000; // Don't check magic entries
  MAGIC_NO_CHECK_APPTYPE = $0008000; // Don't check application type
  MAGIC_NO_CHECK_ELF = $0010000; // Don't check for elf details
  MAGIC_NO_CHECK_TEXT = $0020000; // Don't check for text files
  MAGIC_NO_CHECK_CDF = $0040000; // Don't check for cdf files
  MAGIC_NO_CHECK_TOKENS = $0100000; // Don't check tokens
  MAGIC_NO_CHECK_ENCODING = $0200000; // Don't check text encodings

const
  // No built-in tests; only consult the magic file
  MAGIC_NO_CHECK_BUILTIN =
    MAGIC_NO_CHECK_COMPRESS or
    MAGIC_NO_CHECK_TAR or
    //MAGIC_NO_CHECK_SOFT or
    MAGIC_NO_CHECK_APPTYPE or
    MAGIC_NO_CHECK_ELF or
    MAGIC_NO_CHECK_TEXT or
    MAGIC_NO_CHECK_CDF or
    MAGIC_NO_CHECK_TOKENS or
    MAGIC_NO_CHECK_ENCODING or
    0;

const
  MAGIC_SNPRINTB = #177#020+
    'b'#0'debug'#0+
    'b'#1'symlink'#0+
    'b'#2'compress'#0+
    'b'#3'devices'#0+
    'b'#4'mime_type'#0+
    'b'#5'continue'#0+
    'b'#6'check'#0+
    'b'#7'preserve_atime'#0+
    'b'#10'raw'#0+
    'b'#11'error'#0+
    'b'#12'mime_encoding'#0+
    'b'#13'apple'#0+
    'b'#14'no_check_compress'#0+
    'b'#15'no_check_tar'#0+
    'b'#16'no_check_soft'#0+
    'b'#17'no_check_sapptype'#0+
    'b'#20'no_check_elf'#0+
    'b'#21'no_check_text'#0+
    'b'#22'no_check_cdf'#0+
    'b'#23'no_check_reserved0'#0+
    'b'#24'no_check_tokens'#0+
    'b'#25'no_check_encoding'#0+
    'b'#26'no_check_reserved1'#0+
    'b'#27'no_check_reserved2'#0+
    'b'#30'extension'#0+
    'b'#31'transp_compression'#0;

const
  // Defined for backwards compatibility (renamed)
  MAGIC_NO_CHECK_ASCII = MAGIC_NO_CHECK_TEXT;

const
  // Defined for backwards compatibility; do nothing
  MAGIC_NO_CHECK_FORTRAN = $000000; // Don't check ascii/fortran
  MAGIC_NO_CHECK_TROFF = $000000; // Don't check ascii/troff

const
  MAGIC_VERSION_ = 532; // This implementation

type
  magic_t = ^magic_set;
  magic_set = record
  end;

function magic_open(flags: cint): magic_t; cdecl; external MAGIC_LIB_NAME name 'magic_open';
procedure magic_close(cookie: magic_t); cdecl; external MAGIC_LIB_NAME name 'magic_close';

function magic_getpath(const magicfile: Pcchar; action: cint): Pcchar; cdecl; external MAGIC_LIB_NAME name 'magic_getpath';
function magic_file(cookie: magic_t; const filename: Pcchar): Pcchar; cdecl; external MAGIC_LIB_NAME name 'magic_file';
function magic_descriptor(cookie: magic_t; fd: cint): Pcchar; cdecl; external MAGIC_LIB_NAME name 'magic_descriptor';
function magic_buffer(cookie: magic_t; const buffer: Pcvoid; length: csize_t): Pcchar; cdecl; external MAGIC_LIB_NAME name 'magic_buffer';

function magic_error(cookie: magic_t): Pcchar; cdecl; external MAGIC_LIB_NAME name 'magic_error';
function magic_getflags(cookie: magic_t): cint; cdecl; external MAGIC_LIB_NAME name 'magic_getflags';
function magic_setflags(cookie: magic_t; flags: cint): cint; cdecl; external MAGIC_LIB_NAME name 'magic_setflags';

function magic_version: cint; cdecl; external MAGIC_LIB_NAME name 'magic_version';
function magic_load(cookie: magic_t; const filename: Pcchar): cint; cdecl; external MAGIC_LIB_NAME name 'magic_load';
function magic_load_buffers(cookie: magic_t; buffers: PPcvoid; sizes: Pcsize_t; nbuffers: csize_t): cint; cdecl; external MAGIC_LIB_NAME name 'magic_load_buffers';

function magic_compile(cookie: magic_t; const filename: Pcchar): cint; cdecl; external MAGIC_LIB_NAME name 'magic_compile';
function magic_check(cookie: magic_t; const filename: Pcchar): cint; cdecl; external MAGIC_LIB_NAME name 'magic_check';
function magic_list(cookie: magic_t; const filename: Pcchar): cint; cdecl; external MAGIC_LIB_NAME name 'magic_list';
function magic_errno(cookie: magic_t): cint; cdecl; external MAGIC_LIB_NAME name 'magic_errno';

const
  MAGIC_PARAM_INDIR_MAX = 0;
  MAGIC_PARAM_NAME_MAX = 1;
  MAGIC_PARAM_ELF_PHNUM_MAX = 2;
  MAGIC_PARAM_ELF_SHNUM_MAX = 3;
  MAGIC_PARAM_ELF_NOTES_MAX = 4;
  MAGIC_PARAM_REGEX_MAX = 5;
  MAGIC_PARAM_BYTES_MAX = 6;

function magic_setparam(cookie: magic_t; param: cint; const value: Pcvoid): cint; cdecl; external MAGIC_LIB_NAME name 'magic_setparam';
function magic_getparam(cookie: magic_t; param: cint; value: Pcvoid): cint; cdecl; external MAGIC_LIB_NAME name 'magic_getparam';

implementation

end.