2 * file.h - definitions for file(1) program
3 * @(#)$Id: file.h,v 1.37 2001/07/22 21:04:15 christos Exp $
5 * Copyright (c) Ian F. Darwin, 1987.
6 * Written by Ian F. Darwin.
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.
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:
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.
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.
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.
26 * 4. This notice may not be removed or altered.
37 typedef unsigned int uint32;
39 typedef unsigned short uint16;
41 typedef unsigned char uint8;
44 # define HOWMANY 16384 /* how much of the file to look at */
46 #define MAXMAGIS 1000 /* max entries in /etc/magic */
47 #define MAXDESC 50 /* max leng of text description */
48 #define MAXstring 32 /* max leng of "string" types */
50 #define MAGICNO 0xF11E041C
57 uint16 cont_level;/* level of ">" */
58 uint8 nospflag; /* supress space character */
60 #define INDIR 1 /* if '>(...)' appears, */
61 #define UNSIGNED 2 /* comparison is unsigned */
62 #define OFFADD 4 /* if '>&' appears, */
63 uint8 reln; /* relation (0=eq, '>'=gt, etc) */
64 uint8 vallen; /* length of string value, if any */
65 uint8 type; /* int, short, long or string. */
66 uint8 in_type; /* type of indirrection */
82 uint8 in_op; /* operator for indirection */
83 uint8 mask_op; /* operator for mask */
92 #define OPINVERSE 0x80
93 int32 offset; /* offset to magic number */
94 int32 in_offset; /* offset from indirection */
100 unsigned char hs[2]; /* 2 bytes of a fixed-endian "short" */
101 unsigned char hl[4]; /* 4 bytes of a fixed-endian "long" */
102 } value; /* either number or string */
103 uint32 mask; /* mask before comparison with value */
104 char desc[MAXDESC]; /* description */
107 #define BIT(A) (1 << (A))
108 #define STRING_IGNORE_LOWERCASE BIT(0)
109 #define STRING_COMPACT_BLANK BIT(1)
110 #define STRING_COMPACT_OPTIONAL_BLANK BIT(2)
111 #define CHAR_IGNORE_LOWERCASE 'c'
112 #define CHAR_COMPACT_BLANK 'B'
113 #define CHAR_COMPACT_OPTIONAL_BLANK 'b'
116 /* list of magic entries */
118 struct magic *magic; /* array of magic entries */
119 uint32 nmagic; /* number of entries in array */
120 struct mlist *next, *prev;
123 #include <stdio.h> /* Include that here, to make sure __P gets defined */
127 # if defined(__STDC__) || defined(__cplusplus)
135 extern int apprentice __P((const char *, int));
136 extern int ascmagic __P((unsigned char *, int));
137 extern void error __P((const char *, ...));
138 extern void ckfputs __P((const char *, FILE *));
140 extern int fsmagic __P((const char *, struct stat *));
141 extern char *fmttime __P((long, int));
142 extern int is_compress __P((const unsigned char *, int *));
143 extern int is_tar __P((unsigned char *, int));
144 extern void magwarn __P((const char *, ...));
145 extern void mdump __P((struct magic *));
146 extern void process __P((const char *, int));
147 extern void showstr __P((FILE *, const char *, int));
148 extern int softmagic __P((unsigned char *, int));
149 extern int tryit __P((unsigned char *, int, int));
150 extern int zmagic __P((unsigned char *, int));
151 extern void ckfprintf __P((FILE *, const char *, ...));
152 extern uint32 signextend __P((struct magic *, unsigned int32));
153 extern void tryelf __P((int, unsigned char *, int));
155 extern char *progname; /* the program name */
156 extern const char *magicfile; /* name of the magic file */
157 extern int lineno; /* current line number in magic file */
159 extern struct mlist mlist; /* list of arrays of magic entries */
161 extern int debug; /* enable debugging? */
162 extern int zflag; /* process compressed files? */
163 extern int lflag; /* follow symbolic links? */
164 extern int sflag; /* read/analyze block special files? */
165 extern int iflag; /* Output types as mime-types */
167 extern int optind; /* From getopt(3) */
170 #ifndef HAVE_STRERROR
172 extern char *sys_errlist[];
173 #define strerror(e) \
174 (((e) >= 0 && (e) < sys_nerr) ? sys_errlist[(e)] : "Unknown error")
178 #define strtoul(a, b, c) strtol(a, b, c)
181 #if defined(HAVE_MMAP) && defined(HAVE_SYS_MMAN_H) && !defined(QUICK)
186 #define FILE_RCSID(id) \
187 static const char *rcsid(const char *p) { \
188 return rcsid(p = id); \
191 #define FILE_RCSID(id) static char rcsid[] = id;
194 #endif /* __file_h__ */