libmagic.pp 6.1 KB

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