Module Name: src Committed By: christos Date: Fri Jan 4 17:03:13 UTC 2013
Modified Files: src/external/bsd/file/dist/src: softmagic.c Log Message: bring return value fixes from head. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/external/bsd/file/dist/src/softmagic.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/bsd/file/dist/src/softmagic.c diff -u src/external/bsd/file/dist/src/softmagic.c:1.7 src/external/bsd/file/dist/src/softmagic.c:1.8 --- src/external/bsd/file/dist/src/softmagic.c:1.7 Thu Jan 3 18:05:38 2013 +++ src/external/bsd/file/dist/src/softmagic.c Fri Jan 4 12:03:13 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: softmagic.c,v 1.7 2013/01/03 23:05:38 christos Exp $ */ +/* $NetBSD: softmagic.c,v 1.8 2013/01/04 17:03:13 christos Exp $ */ /* * Copyright (c) Ian F. Darwin 1986-1995. @@ -37,7 +37,7 @@ #if 0 FILE_RCSID("@(#)$File: softmagic.c,v 1.155 2012/11/01 04:21:27 christos Exp $") #else -__RCSID("$NetBSD: softmagic.c,v 1.7 2013/01/03 23:05:38 christos Exp $"); +__RCSID("$NetBSD: softmagic.c,v 1.8 2013/01/04 17:03:13 christos Exp $"); #endif #endif /* lint */ @@ -49,9 +49,9 @@ __RCSID("$NetBSD: softmagic.c,v 1.7 2013 private int match(struct magic_set *, struct magic *, uint32_t, - const unsigned char *, size_t, size_t, int, int, int); + const unsigned char *, size_t, size_t, int, int, int, int *); private int mget(struct magic_set *, const unsigned char *, - struct magic *, size_t, size_t, unsigned int, int, int, int); + struct magic *, size_t, size_t, unsigned int, int, int, int, int *); private int magiccheck(struct magic_set *, struct magic *); private int32_t mprint(struct magic_set *, struct magic *); private int32_t moffset(struct magic_set *, struct magic *); @@ -79,7 +79,7 @@ file_softmagic(struct magic_set *ms, con int rv; for (ml = ms->mlist[0]->next; ml != ms->mlist[0]; ml = ml->next) if ((rv = match(ms, ml->magic, ml->nmagic, buf, nbytes, 0, mode, - text, 0)) != 0) + text, 0, NULL)) != 0) return rv; return 0; @@ -115,16 +115,19 @@ file_softmagic(struct magic_set *ms, con private int match(struct magic_set *ms, struct magic *magic, uint32_t nmagic, const unsigned char *s, size_t nbytes, size_t offset, int mode, int text, - int flip) + int flip, int *returnval) { uint32_t magindex = 0; unsigned int cont_level = 0; int need_separator = 0; - int returnval = 0, e; /* if a match is found it is set to 1*/ + int returnvalv = 0, e; /* if a match is found it is set to 1*/ int firstline = 1; /* a flag to print X\n X\n- X */ int printed_something = 0; int print = (ms->flags & (MAGIC_MIME|MAGIC_APPLE)) == 0; + if (returnval == NULL) + returnval = &returnvalv; + if (file_check_mem(ms, cont_level) == -1) return -1; @@ -150,7 +153,7 @@ match(struct magic_set *ms, struct magic /* if main entry matches, print it... */ switch (mget(ms, s, m, nbytes, offset, cont_level, mode, text, - flip)) { + flip, returnval)) { case -1: return -1; case 0: @@ -158,7 +161,7 @@ match(struct magic_set *ms, struct magic break; default: if (m->type == FILE_INDIRECT) - returnval = 1; + *returnval = 1; switch (magiccheck(ms, m)) { case -1: @@ -184,6 +187,7 @@ match(struct magic_set *ms, struct magic } if ((e = handle_annotation(ms, m)) != 0) { + *returnval = 1; return e; } /* @@ -235,7 +239,7 @@ match(struct magic_set *ms, struct magic } #endif switch (mget(ms, s, m, nbytes, offset, cont_level, mode, - text, flip)) { + text, flip, returnval)) { case -1: return -1; case 0: @@ -245,7 +249,7 @@ match(struct magic_set *ms, struct magic break; default: if (m->type == FILE_INDIRECT) - returnval = 1; + *returnval = 1; flush = 0; break; } @@ -268,8 +272,10 @@ match(struct magic_set *ms, struct magic ms->c.li[cont_level].got_match = 0; break; } - if ((e = handle_annotation(ms, m)) != 0) + if ((e = handle_annotation(ms, m)) != 0) { + *returnval = 1; return e; + } /* * If we are going to print something, * make sure that we have a separator first. @@ -318,13 +324,13 @@ match(struct magic_set *ms, struct magic if (printed_something) { firstline = 0; if (print) - returnval = 1; + *returnval = 1; } if ((ms->flags & MAGIC_CONTINUE) == 0 && printed_something) { - return returnval; /* don't keep searching */ + return *returnval; /* don't keep searching */ } } - return returnval; /* This is hit if -k is set or there is no match */ + return *returnval; /* This is hit if -k is set or there is no match */ } private int @@ -1116,7 +1122,7 @@ mcopy(struct magic_set *ms, union VALUET private int mget(struct magic_set *ms, const unsigned char *s, struct magic *m, size_t nbytes, size_t o, unsigned int cont_level, int mode, int text, - int flip) + int flip, int *returnval) { uint32_t offset = ms->offset; uint32_t count = m->str_range; @@ -1719,7 +1725,7 @@ mget(struct magic_set *ms, const unsigne return -1; } return match(ms, ml.magic, ml.nmagic, s, nbytes, offset, - mode, text, flip); + mode, text, flip, returnval); case FILE_NAME: if (file_printf(ms, "%s", m->desc) == -1)