Annotation of src/usr.bin/file/print.c, Revision 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: }