=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/file/Attic/apprentice.c,v retrieving revision 1.1 retrieving revision 1.2 diff -c -r1.1 -r1.2 *** src/usr.bin/file/Attic/apprentice.c 1995/10/18 08:45:08 1.1 --- src/usr.bin/file/Attic/apprentice.c 1995/12/14 03:30:01 1.2 *************** *** 29,39 **** #include #include #include #include "file.h" #ifndef lint static char *moduleid = ! "@(#)$Id: apprentice.c,v 1.1 1995/10/18 08:45:08 deraadt Exp $"; #endif /* lint */ #define EATAB {while (isascii((unsigned char) *l) && \ --- 29,40 ---- #include #include #include + #include #include "file.h" #ifndef lint static char *moduleid = ! "@(#)$Id: apprentice.c,v 1.2 1995/12/14 03:30:01 deraadt Exp $"; #endif /* lint */ #define EATAB {while (isascii((unsigned char) *l) && \ *************** *** 50,88 **** static int maxmagic = 0; int apprentice(fn, check) ! char *fn; /* name of magic file */ int check; /* non-zero? checking-only run. */ { ! FILE *f; ! char line[BUFSIZ+1]; ! int errs = 0; - f = fopen(fn, "r"); - if (f==NULL) { - (void) fprintf(stderr, "%s: can't read magic file %s\n", - progname, fn); - if (check) - return -1; - else - exit(1); - } - maxmagic = MAXMAGIS; ! if ((magic = (struct magic *) calloc(sizeof(struct magic), maxmagic)) ! == NULL) { (void) fprintf(stderr, "%s: Out of memory.\n", progname); if (check) return -1; else exit(1); } /* parse it */ if (check) /* print silly verbose header for USG compat. */ ! (void) printf("cont\toffset\ttype\topcode\tmask\tvalue\tdesc\n"); for (lineno = 1;fgets(line, BUFSIZ, f) != NULL; lineno++) { if (line[0]=='#') /* comment, do not parse */ --- 51,120 ---- static int maxmagic = 0; + static int apprentice_1 __P((char *, int)); int apprentice(fn, check) ! char *fn; /* list of magic files */ int check; /* non-zero? checking-only run. */ { ! char *p, *mfn; ! int file_err, errs = -1; maxmagic = MAXMAGIS; ! magic = (struct magic *) calloc(sizeof(struct magic), maxmagic); ! mfn = malloc(strlen(fn)+1); ! if (magic == NULL || mfn == NULL) { (void) fprintf(stderr, "%s: Out of memory.\n", progname); if (check) return -1; else exit(1); } + fn = strcpy(mfn, fn); + while (fn) { + p = strchr(fn, ':'); + if (p) + *p++ = '\0'; + file_err = apprentice_1(fn, check); + if (file_err > errs) + errs = file_err; + fn = p; + } + if (errs == -1) + (void) fprintf(stderr, "%s: couldn't find any magic files!\n", + progname); + if (!check && errs) + exit(1); + + free(mfn); + return errs; + } + + static int + apprentice_1(fn, check) + char *fn; /* name of magic file */ + int check; /* non-zero? checking-only run. */ + { + static const char hdr[] = + "cont\toffset\ttype\topcode\tmask\tvalue\tdesc"; + FILE *f; + char line[BUFSIZ+1]; + int errs = 0; + + f = fopen(fn, "r"); + if (f==NULL) { + if (errno != ENOENT) + (void) fprintf(stderr, + "%s: can't read magic file %s (%s)\n", + progname, fn, strerror(errno)); + return -1; + } + /* parse it */ if (check) /* print silly verbose header for USG compat. */ ! (void) printf("%s\n", hdr); for (lineno = 1;fgets(line, BUFSIZ, f) != NULL; lineno++) { if (line[0]=='#') /* comment, do not parse */ *************** *** 91,101 **** continue; line[strlen(line)-1] = '\0'; /* delete newline */ if (parse(line, &nmagic, check) != 0) ! ++errs; } (void) fclose(f); ! return errs ? -1 : 0; } /* --- 123,133 ---- continue; line[strlen(line)-1] = '\0'; /* delete newline */ if (parse(line, &nmagic, check) != 0) ! errs = 1; } (void) fclose(f); ! return errs; } /*