libmagic.pp 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. {
  2. This file is part of the Free Pascal packages
  3. Copyright (C) 2019 Silvio Clecio (silvioprog)
  4. Pascal binding for libmagic(3)
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. }
  11. unit libmagic;
  12. {$IFDEF FPC}
  13. {$MODE OBJFPC}
  14. {$H+}
  15. {$ENDIF}
  16. interface
  17. type
  18. Pcchar = PAnsiChar;
  19. cint = LongInt;
  20. csize_t = NativeUInt;
  21. Pcsize_t = PNativeUInt;
  22. Pcvoid = Pointer;
  23. PPcvoid = PPointer;
  24. const
  25. MAGIC_LIB_NAME = {$IFDEF MSWINDOWS}'libmagic-1'{$ELSE}'magic'{$ENDIF};
  26. const
  27. MAGIC_NONE = $0000000; // No flags
  28. MAGIC_DEBUG = $0000001; // Turn on debugging
  29. MAGIC_SYMLINK = $0000002; // Follow symlinks
  30. MAGIC_COMPRESS = $0000004; // Check inside compressed files
  31. MAGIC_DEVICES = $0000008; // Look at the contents of devices
  32. MAGIC_MIME_TYPE = $0000010; // Return the MIME type
  33. MAGIC_CONTINUE = $0000020; // Return all matches
  34. MAGIC_CHECK_ = $0000040; // Print warnings to stderr
  35. MAGIC_PRESERVE_ATIME = $0000080; // Restore access time on exit
  36. MAGIC_RAW = $0000100; // Don't convert unprintable chars
  37. MAGIC_ERROR_ = $0000200; // Handle ENOENT etc as real errors
  38. MAGIC_MIME_ENCODING = $0000400; // Return the MIME encoding
  39. MAGIC_MIME = MAGIC_MIME_TYPE or MAGIC_MIME_ENCODING;
  40. MAGIC_APPLE = $0000800; // Return the Apple creator/type
  41. MAGIC_EXTENSION = $1000000; // Return a /-separated list of extensions
  42. MAGIC_COMPRESS_TRANSP = $2000000; // Check inside compressed files but not report compression
  43. MAGIC_NODESC = MAGIC_EXTENSION or MAGIC_MIME or MAGIC_APPLE;
  44. const
  45. MAGIC_NO_CHECK_COMPRESS = $0001000; // Don't check for compressed files
  46. MAGIC_NO_CHECK_TAR = $0002000; // Don't check for tar files
  47. MAGIC_NO_CHECK_SOFT = $0004000; // Don't check magic entries
  48. MAGIC_NO_CHECK_APPTYPE = $0008000; // Don't check application type
  49. MAGIC_NO_CHECK_ELF = $0010000; // Don't check for elf details
  50. MAGIC_NO_CHECK_TEXT = $0020000; // Don't check for text files
  51. MAGIC_NO_CHECK_CDF = $0040000; // Don't check for cdf files
  52. MAGIC_NO_CHECK_TOKENS = $0100000; // Don't check tokens
  53. MAGIC_NO_CHECK_ENCODING = $0200000; // Don't check text encodings
  54. const
  55. // No built-in tests; only consult the magic file
  56. MAGIC_NO_CHECK_BUILTIN =
  57. MAGIC_NO_CHECK_COMPRESS or
  58. MAGIC_NO_CHECK_TAR or
  59. //MAGIC_NO_CHECK_SOFT or
  60. MAGIC_NO_CHECK_APPTYPE or
  61. MAGIC_NO_CHECK_ELF or
  62. MAGIC_NO_CHECK_TEXT or
  63. MAGIC_NO_CHECK_CDF or
  64. MAGIC_NO_CHECK_TOKENS or
  65. MAGIC_NO_CHECK_ENCODING or
  66. 0;
  67. const
  68. MAGIC_SNPRINTB = #177#020+
  69. 'b'#0'debug'#0+
  70. 'b'#1'symlink'#0+
  71. 'b'#2'compress'#0+
  72. 'b'#3'devices'#0+
  73. 'b'#4'mime_type'#0+
  74. 'b'#5'continue'#0+
  75. 'b'#6'check'#0+
  76. 'b'#7'preserve_atime'#0+
  77. 'b'#10'raw'#0+
  78. 'b'#11'error'#0+
  79. 'b'#12'mime_encoding'#0+
  80. 'b'#13'apple'#0+
  81. 'b'#14'no_check_compress'#0+
  82. 'b'#15'no_check_tar'#0+
  83. 'b'#16'no_check_soft'#0+
  84. 'b'#17'no_check_sapptype'#0+
  85. 'b'#20'no_check_elf'#0+
  86. 'b'#21'no_check_text'#0+
  87. 'b'#22'no_check_cdf'#0+
  88. 'b'#23'no_check_reserved0'#0+
  89. 'b'#24'no_check_tokens'#0+
  90. 'b'#25'no_check_encoding'#0+
  91. 'b'#26'no_check_reserved1'#0+
  92. 'b'#27'no_check_reserved2'#0+
  93. 'b'#30'extension'#0+
  94. 'b'#31'transp_compression'#0;
  95. const
  96. // Defined for backwards compatibility (renamed)
  97. MAGIC_NO_CHECK_ASCII = MAGIC_NO_CHECK_TEXT;
  98. const
  99. // Defined for backwards compatibility; do nothing
  100. MAGIC_NO_CHECK_FORTRAN = $000000; // Don't check ascii/fortran
  101. MAGIC_NO_CHECK_TROFF = $000000; // Don't check ascii/troff
  102. const
  103. MAGIC_VERSION_ = 532; // This implementation
  104. type
  105. magic_t = ^magic_set;
  106. magic_set = record
  107. end;
  108. function magic_open(flags: cint): magic_t; cdecl; external MAGIC_LIB_NAME name 'magic_open';
  109. procedure magic_close(cookie: magic_t); cdecl; external MAGIC_LIB_NAME name 'magic_close';
  110. function magic_getpath(const magicfile: Pcchar; action: cint): Pcchar; cdecl; external MAGIC_LIB_NAME name 'magic_getpath';
  111. function magic_file(cookie: magic_t; const filename: Pcchar): Pcchar; cdecl; external MAGIC_LIB_NAME name 'magic_file';
  112. function magic_descriptor(cookie: magic_t; fd: cint): Pcchar; cdecl; external MAGIC_LIB_NAME name 'magic_descriptor';
  113. function magic_buffer(cookie: magic_t; const buffer: Pcvoid; length: csize_t): Pcchar; cdecl; external MAGIC_LIB_NAME name 'magic_buffer';
  114. function magic_error(cookie: magic_t): Pcchar; cdecl; external MAGIC_LIB_NAME name 'magic_error';
  115. function magic_getflags(cookie: magic_t): cint; cdecl; external MAGIC_LIB_NAME name 'magic_getflags';
  116. function magic_setflags(cookie: magic_t; flags: cint): cint; cdecl; external MAGIC_LIB_NAME name 'magic_setflags';
  117. function magic_version: cint; cdecl; external MAGIC_LIB_NAME name 'magic_version';
  118. function magic_load(cookie: magic_t; const filename: Pcchar): cint; cdecl; external MAGIC_LIB_NAME name 'magic_load';
  119. 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';
  120. function magic_compile(cookie: magic_t; const filename: Pcchar): cint; cdecl; external MAGIC_LIB_NAME name 'magic_compile';
  121. function magic_check(cookie: magic_t; const filename: Pcchar): cint; cdecl; external MAGIC_LIB_NAME name 'magic_check';
  122. function magic_list(cookie: magic_t; const filename: Pcchar): cint; cdecl; external MAGIC_LIB_NAME name 'magic_list';
  123. function magic_errno(cookie: magic_t): cint; cdecl; external MAGIC_LIB_NAME name 'magic_errno';
  124. const
  125. MAGIC_PARAM_INDIR_MAX = 0;
  126. MAGIC_PARAM_NAME_MAX = 1;
  127. MAGIC_PARAM_ELF_PHNUM_MAX = 2;
  128. MAGIC_PARAM_ELF_SHNUM_MAX = 3;
  129. MAGIC_PARAM_ELF_NOTES_MAX = 4;
  130. MAGIC_PARAM_REGEX_MAX = 5;
  131. MAGIC_PARAM_BYTES_MAX = 6;
  132. function magic_setparam(cookie: magic_t; param: cint; const value: Pcvoid): cint; cdecl; external MAGIC_LIB_NAME name 'magic_setparam';
  133. function magic_getparam(cookie: magic_t; param: cint; value: Pcvoid): cint; cdecl; external MAGIC_LIB_NAME name 'magic_getparam';
  134. implementation
  135. end.