Annotation of src/usr.bin/file/print.c, Revision 1.1.1.1
1.1 deraadt 1: /*
2: * print.c - debugging printout routines
3: *
4: * Copyright (c) Ian F. Darwin, 1987.
5: * Written by Ian F. Darwin.
6: *
7: * This software is not subject to any license of the American Telephone
8: * and Telegraph Company or of the Regents of the University of California.
9: *
10: * Permission is granted to anyone to use this software for any purpose on
11: * any computer system, and to alter it and redistribute it freely, subject
12: * to the following restrictions:
13: *
14: * 1. The author is not responsible for the consequences of use of this
15: * software, no matter how awful, even if they arise from flaws in it.
16: *
17: * 2. The origin of this software must not be misrepresented, either by
18: * explicit claim or by omission. Since few users ever read sources,
19: * credits must appear in the documentation.
20: *
21: * 3. Altered versions must be plainly marked as such, and must not be
22: * misrepresented as being the original software. Since few users
23: * ever read sources, credits must appear in the documentation.
24: *
25: * 4. This notice may not be removed or altered.
26: */
27:
28: #include <stdio.h>
29: #include <errno.h>
30: #include <string.h>
31: #if __STDC__
32: # include <stdarg.h>
33: #else
34: # include <varargs.h>
35: #endif
36: #include <stdlib.h>
37: #include <unistd.h>
38: #include <time.h>
39: #include "file.h"
40:
41: #ifndef lint
42: static char *moduleid =
43: "@(#)$Id: print.c,v 1.8 1995/04/30 19:39:40 christos Exp $";
44: #endif /* lint */
45:
46: #define SZOF(a) (sizeof(a) / sizeof(a[0]))
47:
48: void
49: mdump(m)
50: struct magic *m;
51: {
52: static char *typ[] = { "invalid", "byte", "short", "invalid",
53: "long", "string", "date", "beshort",
54: "belong", "bedate", "leshort", "lelong",
55: "ledate" };
56: (void) fputc('[', stderr);
57: (void) fprintf(stderr, ">>>>>>>> %d" + 8 - (m->cont_level & 7),
58: m->offset);
59:
60: if (m->flag & INDIR)
61: (void) fprintf(stderr, "(%s,%ld),",
62: (m->in.type >= 0 && m->in.type < SZOF(typ)) ?
63: typ[(unsigned char) m->in.type] :
64: "*bad*",
65: m->in.offset);
66:
67: (void) fprintf(stderr, " %s%s", (m->flag & UNSIGNED) ? "u" : "",
68: (m->type >= 0 && m->type < SZOF(typ)) ?
69: typ[(unsigned char) m->type] :
70: "*bad*");
71: if (m->mask != ~0L)
72: (void) fprintf(stderr, " & %.8lx", m->mask);
73:
74: (void) fprintf(stderr, ",%c", m->reln);
75:
76: if (m->reln != 'x') {
77: switch (m->type) {
78: case BYTE:
79: case SHORT:
80: case LONG:
81: case LESHORT:
82: case LELONG:
83: case BESHORT:
84: case BELONG:
85: (void) fprintf(stderr, "%ld", m->value.l);
86: break;
87: case STRING:
88: showstr(stderr, m->value.s, -1);
89: break;
90: case DATE:
91: case LEDATE:
92: case BEDATE:
93: {
94: char *rt, *pp = ctime((time_t*) &m->value.l);
95: if ((rt = strchr(pp, '\n')) != NULL)
96: *rt = '\0';
97: (void) fprintf(stderr, "%s,", pp);
98: if (rt)
99: *rt = '\n';
100: }
101: break;
102: default:
103: (void) fputs("*bad*", stderr);
104: break;
105: }
106: }
107: (void) fprintf(stderr, ",\"%s\"]\n", m->desc);
108: }
109:
110: /*
111: * ckfputs - futs, but with error checking
112: * ckfprintf - fprintf, but with error checking
113: */
114: void
115: ckfputs(str, fil)
116: const char *str;
117: FILE *fil;
118: {
119: if (fputs(str,fil) == EOF)
120: error("write failed.\n");
121: }
122:
123: /*VARARGS*/
124: void
125: #if __STDC__
126: ckfprintf(FILE *f, const char *fmt, ...)
127: #else
128: ckfprintf(va_alist)
129: va_dcl
130: #endif
131: {
132: va_list va;
133: #if __STDC__
134: va_start(va, fmt);
135: #else
136: FILE *f;
137: const char *fmt;
138: va_start(va);
139: f = va_arg(va, FILE *);
140: fmt = va_arg(va, const char *);
141: #endif
142: (void) vfprintf(f, fmt, va);
143: if (ferror(f))
144: error("write failed.\n");
145: va_end(va);
146: }
147:
148: /*
149: * error - print best error message possible and exit
150: */
151: /*VARARGS*/
152: void
153: #if __STDC__
154: error(const char *f, ...)
155: #else
156: error(va_alist)
157: va_dcl
158: #endif
159: {
160: va_list va;
161: #if __STDC__
162: va_start(va, f);
163: #else
164: const char *f;
165: va_start(va);
166: f = va_arg(va, const char *);
167: #endif
168: /* cuz we use stdout for most, stderr here */
169: (void) fflush(stdout);
170:
171: if (progname != NULL)
172: (void) fprintf(stderr, "%s: ", progname);
173: (void) vfprintf(stderr, f, va);
174: va_end(va);
175: exit(1);
176: }
177:
178: /*VARARGS*/
179: void
180: #if __STDC__
181: magwarn(const char *f, ...)
182: #else
183: magwarn(va_alist)
184: va_dcl
185: #endif
186: {
187: va_list va;
188: #if __STDC__
189: va_start(va, f);
190: #else
191: const char *f;
192: va_start(va);
193: f = va_arg(va, const char *);
194: #endif
195: /* cuz we use stdout for most, stderr here */
196: (void) fflush(stdout);
197:
198: if (progname != NULL)
199: (void) fprintf(stderr, "%s: %s, %d: ",
200: progname, magicfile, lineno);
201: (void) vfprintf(stderr, f, va);
202: va_end(va);
203: fputc('\n', stderr);
204: }