summaryrefslogtreecommitdiffstats
path: root/contrib/file/src/funcs.c
diff options
context:
space:
mode:
authordelphij <delphij@FreeBSD.org>2015-06-10 19:22:41 +0000
committerdelphij <delphij@FreeBSD.org>2015-06-10 19:22:41 +0000
commit7d7b7b5da36a9fbecf1110d65e3693b9347630d9 (patch)
treebf2d8b473f0726bcdeb36d064078c17b8e7d13cf /contrib/file/src/funcs.c
parent352275060a62b930cc38ca67aff50948c9441845 (diff)
parentc042ae22175d978baeb8b11c92152e4aa035e36a (diff)
downloadFreeBSD-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.c36
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;
OpenPOWER on IntegriCloud