file.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /*
  2. * file.h - definitions for file(1) program
  3. * @(#)$Id: file.h,v 1.25 1997/01/15 19:28:35 christos Exp $
  4. *
  5. * Copyright (c) Ian F. Darwin, 1987.
  6. * Written by Ian F. Darwin.
  7. *
  8. * This software is not subject to any license of the American Telephone
  9. * and Telegraph Company or of the Regents of the University of California.
  10. *
  11. * Permission is granted to anyone to use this software for any purpose on
  12. * any computer system, and to alter it and redistribute it freely, subject
  13. * to the following restrictions:
  14. *
  15. * 1. The author is not responsible for the consequences of use of this
  16. * software, no matter how awful, even if they arise from flaws in it.
  17. *
  18. * 2. The origin of this software must not be misrepresented, either by
  19. * explicit claim or by omission. Since few users ever read sources,
  20. * credits must appear in the documentation.
  21. *
  22. * 3. Altered versions must be plainly marked as such, and must not be
  23. * misrepresented as being the original software. Since few users
  24. * ever read sources, credits must appear in the documentation.
  25. *
  26. * 4. This notice may not be removed or altered.
  27. */
  28. #ifndef __file_h__
  29. #define __file_h__
  30. #if HAVE_CONFIG_H
  31. #include "config.h"
  32. #if(SIZEOF_INT==4)
  33. typedef int int32;
  34. typedef unsigned int uint32;
  35. #elif(SIZEOF_LONG==4)
  36. typedef long int32;
  37. typedef unsigned long uint32;
  38. #else
  39. #error "Can't find 32 bit types!!"
  40. #endif
  41. #else
  42. typedef int int32;
  43. typedef unsigned int uint32;
  44. #endif
  45. #ifndef HOWMANY
  46. # define HOWMANY 8192 /* how much of the file to look at */
  47. #endif
  48. #define MAXMAGIS 1000 /* max entries in /etc/magic */
  49. #define MAXDESC 50 /* max leng of text description */
  50. #define MAXstring 32 /* max leng of "string" types */
  51. struct magic {
  52. short flag;
  53. #define INDIR 1 /* if '>(...)' appears, */
  54. #define UNSIGNED 2 /* comparison is unsigned */
  55. #define ADD 4 /* if '>&' appears, */
  56. short cont_level; /* level of ">" */
  57. struct {
  58. char type; /* byte short long */
  59. int32 offset; /* offset from indirection */
  60. } in;
  61. int32 offset; /* offset to magic number */
  62. unsigned char reln; /* relation (0=eq, '>'=gt, etc) */
  63. char type; /* int, short, long or string. */
  64. char vallen; /* length of string value, if any */
  65. #define BYTE 1
  66. #define SHORT 2
  67. #define LONG 4
  68. #define STRING 5
  69. #define DATE 6
  70. #define BESHORT 7
  71. #define BELONG 8
  72. #define BEDATE 9
  73. #define LESHORT 10
  74. #define LELONG 11
  75. #define LEDATE 12
  76. #define REGEX 13
  77. union VALUETYPE {
  78. unsigned char b;
  79. unsigned short h;
  80. uint32 l;
  81. char s[MAXstring];
  82. unsigned char hs[2]; /* 2 bytes of a fixed-endian "short" */
  83. unsigned char hl[4]; /* 2 bytes of a fixed-endian "long" */
  84. } value; /* either number or string */
  85. uint32 mask; /* mask before comparison with value */
  86. char nospflag; /* supress space character */
  87. char desc[MAXDESC]; /* description */
  88. };
  89. #include <stdio.h> /* Include that here, to make sure __P gets defined */
  90. #ifndef __P
  91. # if __STDC__ || __cplusplus
  92. # define __P(a) a
  93. # else
  94. # define __P(a) ()
  95. # define const
  96. # endif
  97. #endif
  98. extern int apprentice __P((const char *, int));
  99. extern int ascmagic __P((unsigned char *, int));
  100. extern void error __P((const char *, ...));
  101. extern void ckfputs __P((const char *, FILE *));
  102. struct stat;
  103. extern int fsmagic __P((const char *, struct stat *));
  104. extern int is_compress __P((const unsigned char *, int *));
  105. extern int is_tar __P((unsigned char *, int));
  106. extern void magwarn __P((const char *, ...));
  107. extern void mdump __P((struct magic *));
  108. extern void process __P((const char *, int));
  109. extern void showstr __P((FILE *, const char *, int));
  110. extern int softmagic __P((unsigned char *, int));
  111. extern int tryit __P((unsigned char *, int, int));
  112. extern int zmagic __P((unsigned char *, int));
  113. extern void ckfprintf __P((FILE *, const char *, ...));
  114. extern uint32 signextend __P((struct magic *, unsigned int32));
  115. extern int internatmagic __P((unsigned char *, int));
  116. extern void tryelf __P((int, char *, int));
  117. #if 0
  118. extern int errno; /* Some unixes don't define this.. */
  119. #endif
  120. extern char *progname; /* the program name */
  121. extern const char *magicfile; /* name of the magic file */
  122. extern int lineno; /* current line number in magic file */
  123. extern struct magic *magic; /* array of magic entries */
  124. extern int nmagic; /* number of valid magic[]s */
  125. extern int debug; /* enable debugging? */
  126. extern int zflag; /* process compressed files? */
  127. extern int lflag; /* follow symbolic links? */
  128. #if 0
  129. extern int optind; /* From getopt(3) */
  130. extern char *optarg;
  131. #endif
  132. #if defined(sun) || defined(__sun__) || defined (__sun)
  133. # if defined(__svr4) || defined (__SVR4) || defined(__svr4__)
  134. # define SOLARIS
  135. # else
  136. # define SUNOS
  137. # endif
  138. #endif
  139. #if !defined(__STDC__) || defined(SUNOS) || defined(__convex__)
  140. extern int sys_nerr;
  141. extern char *sys_errlist[];
  142. #define strerror(e) \
  143. (((e) >= 0 && (e) < sys_nerr) ? sys_errlist[(e)] : "Unknown error")
  144. #define strtoul(a, b, c) strtol(a, b, c)
  145. #endif
  146. #ifndef MAXPATHLEN
  147. #define MAXPATHLEN 512
  148. #endif
  149. #endif /* __file_h__ */