aboutsummaryrefslogtreecommitdiff
path: root/contrib/file/magic.c
diff options
context:
space:
mode:
authorDavid E. O'Brien <obrien@FreeBSD.org>2007-05-24 21:59:38 +0000
committerDavid E. O'Brien <obrien@FreeBSD.org>2007-05-24 21:59:38 +0000
commit17c6260f4cef75772e8c82e2324404a330ccca00 (patch)
tree00b85325bfbafa49c07c23b5766b83f254807cbb /contrib/file/magic.c
parentd1d50c78ab5592e27e6f1dc9657dc4c8eb8fdc9e (diff)
downloadsrc-17c6260f4cef75772e8c82e2324404a330ccca00.tar.gz
src-17c6260f4cef75772e8c82e2324404a330ccca00.zip
Virgin import of Christos Zoulas's FILE 4.21.vendor/file/4.21
Notes
Notes: svn path=/vendor/file/dist/; revision=169962 svn path=/vendor/file/4.21/; revision=169964; tag=vendor/file/4.21
Diffstat (limited to 'contrib/file/magic.c')
-rw-r--r--contrib/file/magic.c45
1 files changed, 11 insertions, 34 deletions
diff --git a/contrib/file/magic.c b/contrib/file/magic.c
index 3f24075b1ed1..54db48b1fe29 100644
--- a/contrib/file/magic.c
+++ b/contrib/file/magic.c
@@ -63,7 +63,7 @@
#include "patchlevel.h"
#ifndef lint
-FILE_RCSID("@(#)$Id: magic.c,v 1.35 2006/10/31 19:37:17 christos Exp $")
+FILE_RCSID("@(#)$File: magic.c,v 1.41 2007/03/26 17:59:50 christos Exp $")
#endif /* lint */
#ifdef __EMX__
@@ -86,7 +86,7 @@ magic_open(int flags)
{
struct magic_set *ms;
- if ((ms = malloc(sizeof(struct magic_set))) == NULL)
+ if ((ms = calloc((size_t)1, sizeof(struct magic_set))) == NULL)
return NULL;
if (magic_setflags(ms, flags) == -1) {
@@ -94,7 +94,7 @@ magic_open(int flags)
goto free1;
}
- ms->o.ptr = ms->o.buf = malloc(ms->o.size = 1024);
+ ms->o.ptr = ms->o.buf = malloc(ms->o.left = ms->o.size = 1024);
if (ms->o.buf == NULL)
goto free1;
@@ -102,14 +102,15 @@ magic_open(int flags)
if (ms->o.pbuf == NULL)
goto free2;
- ms->c.off = malloc((ms->c.len = 10) * sizeof(*ms->c.off));
- if (ms->c.off == NULL)
+ ms->c.li = malloc((ms->c.len = 10) * sizeof(*ms->c.li));
+ if (ms->c.li == NULL)
goto free3;
- ms->o.len = 0;
ms->haderr = 0;
ms->error = -1;
ms->mlist = NULL;
+ ms->file = "unknown";
+ ms->line = 0;
return ms;
free3:
free(ms->o.pbuf);
@@ -162,7 +163,7 @@ magic_close(struct magic_set *ms)
free_mlist(ms->mlist);
free(ms->o.pbuf);
free(ms->o.buf);
- free(ms->c.off);
+ free(ms->c.li);
free(ms);
}
@@ -305,7 +306,7 @@ magic_file(struct magic_set *ms, const char *inname)
ssize_t r = 0;
while ((r = sread(fd, (void *)&buf[nbytes],
- (size_t)(HOWMANY - nbytes))) > 0) {
+ (size_t)(HOWMANY - nbytes), 1)) > 0) {
nbytes += r;
if (r < PIPE_BUF) break;
}
@@ -334,32 +335,8 @@ magic_file(struct magic_set *ms, const char *inname)
goto done;
} else {
(void)memset(buf + nbytes, 0, SLOP); /* NUL terminate */
-#ifdef __EMX__
- switch (file_os2_apptype(ms, inname, buf, nbytes)) {
- case -1:
- goto done;
- case 0:
- break;
- default:
- rv = 0;
- goto done;
- }
-#endif
- if (file_buffer(ms, fd, buf, (size_t)nbytes) == -1)
+ if (file_buffer(ms, fd, inname, buf, (size_t)nbytes) == -1)
goto done;
-#ifdef BUILTIN_ELF
- if (nbytes > 5) {
- /*
- * We matched something in the file, so this *might*
- * be an ELF file, and the file is at least 5 bytes
- * long, so if it's an ELF file it has at least one
- * byte past the ELF magic number - try extracting
- * information from the ELF headers that cannot easily
- * be extracted with rules in the magic file.
- */
- file_tryelf(ms, fd, buf, (size_t)nbytes);
- }
-#endif
}
rv = 0;
done:
@@ -378,7 +355,7 @@ magic_buffer(struct magic_set *ms, const void *buf, size_t nb)
* The main work is done here!
* We have the file name and/or the data buffer to be identified.
*/
- if (file_buffer(ms, -1, buf, nb) == -1) {
+ if (file_buffer(ms, -1, NULL, buf, nb) == -1) {
return NULL;
}
return file_getbuffer(ms);