diff options
Diffstat (limited to 'contrib/file/magic.c')
-rw-r--r-- | contrib/file/magic.c | 45 |
1 files changed, 11 insertions, 34 deletions
diff --git a/contrib/file/magic.c b/contrib/file/magic.c index 3f24075..54db48b 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); |