123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- {
- 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.
|