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