diff options
author | delphij <delphij@FreeBSD.org> | 2015-06-10 19:22:41 +0000 |
---|---|---|
committer | delphij <delphij@FreeBSD.org> | 2015-06-10 19:22:41 +0000 |
commit | 7d7b7b5da36a9fbecf1110d65e3693b9347630d9 (patch) | |
tree | bf2d8b473f0726bcdeb36d064078c17b8e7d13cf /contrib/file/src/funcs.c | |
parent | 352275060a62b930cc38ca67aff50948c9441845 (diff) | |
parent | c042ae22175d978baeb8b11c92152e4aa035e36a (diff) | |
download | FreeBSD-src-7d7b7b5da36a9fbecf1110d65e3693b9347630d9.zip FreeBSD-src-7d7b7b5da36a9fbecf1110d65e3693b9347630d9.tar.gz |
MFV r284234:
Update file to 5.23.
MFC after: 2 weeks
Diffstat (limited to 'contrib/file/src/funcs.c')
-rw-r--r-- | contrib/file/src/funcs.c | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/contrib/file/src/funcs.c b/contrib/file/src/funcs.c index a60ccaa..dc7bbd1 100644 --- a/contrib/file/src/funcs.c +++ b/contrib/file/src/funcs.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: funcs.c,v 1.79 2014/12/16 20:52:49 christos Exp $") +FILE_RCSID("@(#)$File: funcs.c,v 1.82 2015/06/03 18:01:20 christos Exp $") #endif /* lint */ #include "magic.h" @@ -159,8 +159,20 @@ file_badread(struct magic_set *ms) } #ifndef COMPILE_ONLY + +static int +checkdone(struct magic_set *ms, int *rv) +{ + if ((ms->flags & MAGIC_CONTINUE) == 0) + return 1; + if (file_printf(ms, "\n- ") == -1) + *rv = -1; + return 0; +} + +/*ARGSUSED*/ protected int -file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((unused)), +file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((__unused__)), const void *buf, size_t nb) { int m = 0, rv = 0, looks_text = 0; @@ -214,7 +226,8 @@ file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((unu if ((m = file_is_tar(ms, ubuf, nb)) != 0) { if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "tar %d\n", m); - goto done; + if (checkdone(ms, &rv)) + goto done; } /* Check if we have a CDF file */ @@ -222,7 +235,8 @@ file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((unu if ((m = file_trycdf(ms, fd, ubuf, nb)) != 0) { if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "cdf %d\n", m); - goto done; + if (checkdone(ms, &rv)) + goto done; } /* try soft magic tests */ @@ -249,7 +263,8 @@ file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((unu "elf %d\n", m); } #endif - goto done; + if (checkdone(ms, &rv)) + goto done; } /* try text properties */ @@ -258,7 +273,8 @@ file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((unu if ((m = file_ascmagic(ms, ubuf, nb, looks_text)) != 0) { if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "ascmagic %d\n", m); - goto done; + if (checkdone(ms, &rv)) + goto done; } } @@ -400,7 +416,7 @@ file_check_mem(struct magic_set *ms, unsigned int level) size_t len; if (level >= ms->c.len) { - len = (ms->c.len += 20) * sizeof(*ms->c.li); + len = (ms->c.len = 20 + level) * sizeof(*ms->c.li); ms->c.li = CAST(struct level_info *, (ms->c.li == NULL) ? malloc(len) : realloc(ms->c.li, len)); @@ -549,9 +565,9 @@ file_printable(char *buf, size_t bufsiz, const char *str) if (ptr >= eptr - 3) break; *ptr++ = '\\'; - *ptr++ = ((*s >> 6) & 7) + '0'; - *ptr++ = ((*s >> 3) & 7) + '0'; - *ptr++ = ((*s >> 0) & 7) + '0'; + *ptr++ = ((CAST(unsigned int, *s) >> 6) & 7) + '0'; + *ptr++ = ((CAST(unsigned int, *s) >> 3) & 7) + '0'; + *ptr++ = ((CAST(unsigned int, *s) >> 0) & 7) + '0'; } *ptr = '\0'; return buf; |