|
|
|
|
Index: configure
|
|
|
|
|
--- configure.orig 2014-02-13 00:29:37.000000000 +0100
|
|
|
|
|
+++ configure 2014-03-01 10:56:14.943985447 +0100
|
|
|
|
|
@@ -3329,7 +3329,7 @@
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-pkgdatadir='$(datadir)/misc'
|
|
|
|
|
+pkgdatadir='$(datadir)/file'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if test x$fsect = x5; then
|
|
|
|
|
Index: src/apprentice.c
|
|
|
|
|
--- src/apprentice.c.orig 2013-11-19 22:01:12.000000000 +0100
|
|
|
|
|
+++ src/apprentice.c 2014-03-01 10:56:14.954013603 +0100
|
|
|
|
|
@@ -1093,7 +1093,7 @@
|
|
|
|
|
for (i = 0; i < nme; i++)
|
|
|
|
|
mentrycount += me[i].cont_count;
|
|
|
|
|
|
|
|
|
|
- slen = sizeof(**ma) * mentrycount;
|
|
|
|
|
+ slen = sizeof(**ma) * (mentrycount + 1);
|
|
|
|
|
if ((*ma = CAST(struct magic *, malloc(slen))) == NULL) {
|
|
|
|
|
file_oomem(ms, slen);
|
|
|
|
|
return -1;
|
|
|
|
|
Index: src/compress.c
|
|
|
|
|
--- src/compress.c.orig 2014-01-05 16:55:21.000000000 +0100
|
|
|
|
|
+++ src/compress.c 2014-03-01 10:56:14.954013603 +0100
|
|
|
|
|
@@ -167,7 +167,7 @@
|
|
|
|
|
* `safe' read for sockets and pipes.
|
|
|
|
|
*/
|
|
|
|
|
protected ssize_t
|
|
|
|
|
-sread(int fd, void *buf, size_t n, int canbepipe __attribute__((__unused__)))
|
|
|
|
|
+file_sread(int fd, void *buf, size_t n, int canbepipe __attribute__((__unused__)))
|
|
|
|
|
{
|
|
|
|
|
ssize_t rv;
|
|
|
|
|
#ifdef FIONREAD
|
|
|
|
|
@@ -266,7 +266,7 @@
|
|
|
|
|
if (swrite(tfd, startbuf, nbytes) != (ssize_t)nbytes)
|
|
|
|
|
r = 1;
|
|
|
|
|
else {
|
|
|
|
|
- while ((r = sread(fd, buf, sizeof(buf), 1)) > 0)
|
|
|
|
|
+ while ((r = file_sread(fd, buf, sizeof(buf), 1)) > 0)
|
|
|
|
|
if (swrite(tfd, buf, (size_t)r) != r)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
@@ -473,7 +473,7 @@
|
|
|
|
|
n = 0;
|
|
|
|
|
goto err;
|
|
|
|
|
}
|
|
|
|
|
- if ((r = sread(fdout[0], *newch, HOWMANY, 0)) <= 0) {
|
|
|
|
|
+ if ((r = file_sread(fdout[0], *newch, HOWMANY, 0)) <= 0) {
|
|
|
|
|
#ifdef DEBUG
|
|
|
|
|
(void)fprintf(stderr, "Read failed (%s)\n",
|
|
|
|
|
strerror(errno));
|
|
|
|
|
Index: src/file.h
|
|
|
|
|
--- src/file.h.orig 2014-02-13 00:20:53.000000000 +0100
|
|
|
|
|
+++ src/file.h 2014-03-01 10:57:22.004000089 +0100
|
|
|
|
|
@@ -457,7 +457,7 @@
|
|
|
|
|
protected void file_showstr(FILE *, const char *, size_t);
|
|
|
|
|
protected size_t file_mbswidth(const char *);
|
|
|
|
|
protected const char *file_getbuffer(struct magic_set *);
|
|
|
|
|
-protected ssize_t sread(int, void *, size_t, int);
|
|
|
|
|
+protected ssize_t file_sread(int, void *, size_t, int);
|
|
|
|
|
protected int file_check_mem(struct magic_set *, unsigned int);
|
|
|
|
|
protected int file_looks_utf8(const unsigned char *, size_t, unichar *,
|
|
|
|
|
size_t *);
|
|
|
|
|
@@ -489,9 +489,11 @@
|
|
|
|
|
ssize_t pread(int, void *, size_t, off_t);
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef HAVE_VASPRINTF
|
|
|
|
|
+#define vasprintf file_vasprintf
|
|
|
|
|
int vasprintf(char **, const char *, va_list);
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef HAVE_ASPRINTF
|
|
|
|
|
+#define asprintf file_asprintf
|
|
|
|
|
int asprintf(char **, const char *, ...);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
Index: src/funcs.c
|
|
|
|
|
--- src/funcs.c.orig 2014-02-13 00:20:53.000000000 +0100
|
|
|
|
|
+++ src/funcs.c 2014-03-01 10:56:14.954013603 +0100
|
|
|
|
|
@@ -34,6 +34,7 @@
|
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <string.h>
|
|
|
|
|
+#include <limits.h>
|
|
|
|
|
#include <ctype.h>
|
|
|
|
|
#if defined(HAVE_WCHAR_H)
|
|
|
|
|
#include <wchar.h>
|
|
|
|
|
@@ -466,3 +467,108 @@
|
|
|
|
|
(void)setlocale(LC_CTYPE, "");
|
|
|
|
|
return rv;
|
|
|
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+/*
|
|
|
|
|
+ * From bsd-asprintf.c in OpenSSH:
|
|
|
|
|
+ * Copyright (c) 2004 Darren Tucker.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Based originally on asprintf.c from OpenBSD:
|
|
|
|
|
+ * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
|
|
|
|
|
+ *
|
|
|
|
|
+ * Permission to use, copy, modify, and distribute this software for any
|
|
|
|
|
+ * purpose with or without fee is hereby granted, provided that the above
|
|
|
|
|
+ * copyright notice and this permission notice appear in all copies.
|
|
|
|
|
+ *
|
|
|
|
|
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
|
|
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
|
|
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
|
|
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
|
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
|
|
|
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
|
|
|
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+#ifndef HAVE_ASPRINTF
|
|
|
|
|
+int asprintf(char **str, const char *fmt, ...)
|
|
|
|
|
+{
|
|
|
|
|
+ va_list ap;
|
|
|
|
|
+ int ret;
|
|
|
|
|
+
|
|
|
|
|
+ *str = NULL;
|
|
|
|
|
+ va_start(ap, fmt);
|
|
|
|
|
+ ret = vasprintf(str, fmt, ap);
|
|
|
|
|
+ va_end(ap);
|
|
|
|
|
+
|
|
|
|
|
+ return ret;
|
|
|
|
|
+}
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#ifndef HAVE_VASPRINTF
|
|
|
|
|
+
|
|
|
|
|
+#ifdef HAVE_LIMITS_H
|
|
|
|
|
+#include <limits.h>
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#include <errno.h>
|
|
|
|
|
+#include <stdarg.h>
|
|
|
|
|
+#include <stdlib.h>
|
|
|
|
|
+
|
|
|
|
|
+#ifndef VA_COPY
|
|
|
|
|
+# ifdef HAVE_VA_COPY
|
|
|
|
|
+# define VA_COPY(dest, src) va_copy(dest, src)
|
|
|
|
|
+# else
|
|
|
|
|
+# ifdef HAVE___VA_COPY
|
|
|
|
|
+# define VA_COPY(dest, src) __va_copy(dest, src)
|
|
|
|
|
+# else
|
|
|
|
|
+# define VA_COPY(dest, src) (dest) = (src)
|
|
|
|
|
+# endif
|
|
|
|
|
+# endif
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+#define INIT_SZ 128
|
|
|
|
|
+
|
|
|
|
|
+int vasprintf(char **str, const char *fmt, va_list ap)
|
|
|
|
|
+{
|
|
|
|
|
+ int ret = -1;
|
|
|
|
|
+ va_list ap2;
|
|
|
|
|
+ char *string, *newstr;
|
|
|
|
|
+ size_t len;
|
|
|
|
|
+
|
|
|
|
|
+ VA_COPY(ap2, ap);
|
|
|
|
|
+ if ((string = malloc(INIT_SZ)) == NULL)
|
|
|
|
|
+ goto fail;
|
|
|
|
|
+
|
|
|
|
|
+ ret = vsnprintf(string, INIT_SZ, fmt, ap2);
|
|
|
|
|
+ if (ret >= 0 && ret < INIT_SZ) { /* succeeded with initial alloc */
|
|
|
|
|
+ *str = string;
|
|
|
|
|
+ } else if (ret == INT_MAX || ret < 0) { /* Bad length */
|
|
|
|
|
+ free(string);
|
|
|
|
|
+ goto fail;
|
|
|
|
|
+ } else { /* bigger than initial, realloc allowing for nul */
|
|
|
|
|
+ len = (size_t)ret + 1;
|
|
|
|
|
+ if ((newstr = realloc(string, len)) == NULL) {
|
|
|
|
|
+ free(string);
|
|
|
|
|
+ goto fail;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ va_end(ap2);
|
|
|
|
|
+ VA_COPY(ap2, ap);
|
|
|
|
|
+ ret = vsnprintf(newstr, len, fmt, ap2);
|
|
|
|
|
+ if (ret >= 0 && (size_t)ret < len) {
|
|
|
|
|
+ *str = newstr;
|
|
|
|
|
+ } else { /* failed with realloc'ed string, give up */
|
|
|
|
|
+ free(newstr);
|
|
|
|
|
+ goto fail;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ va_end(ap2);
|
|
|
|
|
+ return (ret);
|
|
|
|
|
+
|
|
|
|
|
+fail:
|
|
|
|
|
+ *str = NULL;
|
|
|
|
|
+ errno = ENOMEM;
|
|
|
|
|
+ va_end(ap2);
|
|
|
|
|
+ return (-1);
|
|
|
|
|
+}
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
Index: src/getopt_long.h
|
|
|
|
|
--- src/getopt_long.h.orig 2014-03-01 10:56:14.954013603 +0100
|
|
|
|
|
+++ src/getopt_long.h 2014-03-01 10:56:14.954013603 +0100
|
|
|
|
|
@@ -0,0 +1,14 @@
|
|
|
|
|
+#ifndef __GETOPT_LONG_H
|
|
|
|
|
+#define __GETOPT_LONG_H 1
|
|
|
|
|
+struct option {
|
|
|
|
|
+ const char *name;
|
|
|
|
|
+ int has_arg;
|
|
|
|
|
+ int *flag;
|
|
|
|
|
+ int val;
|
|
|
|
|
+};
|
|
|
|
|
+#define no_argument 0
|
|
|
|
|
+#define required_argument 1
|
|
|
|
|
+#define optional_argument 2
|
|
|
|
|
+int getopt_long(int argc, char * const *argv, const char *optstring, const struct option *longopts, int *longindex);
|
|
|
|
|
+
|
|
|
|
|
+#endif
|
|
|
|
|
Index: src/magic.c
|
|
|
|
|
--- src/magic.c.orig 2013-12-01 20:22:13.000000000 +0100
|
|
|
|
|
+++ src/magic.c 2014-03-01 10:56:14.954013603 +0100
|
|
|
|
|
@@ -179,11 +179,11 @@
|
|
|
|
|
if (strlen(dllpath) > 3 &&
|
|
|
|
|
stricmp(&dllpath[strlen(dllpath) - 3], "bin") == 0) {
|
|
|
|
|
if (asprintf(&tmppath,
|
|
|
|
|
- "%s/../share/misc/magic.mgc", dllpath) >= 0)
|
|
|
|
|
+ "%s/../share/file/magic.mgc", dllpath) >= 0)
|
|
|
|
|
APPENDPATH();
|
|
|
|
|
} else {
|
|
|
|
|
if (asprintf(&tmppath,
|
|
|
|
|
- "%s/share/misc/magic.mgc", dllpath) >= 0)
|
|
|
|
|
+ "%s/share/file/magic.mgc", dllpath) >= 0)
|
|
|
|
|
APPENDPATH();
|
|
|
|
|
else if (asprintf(&tmppath,
|
|
|
|
|
"%s/magic.mgc", dllpath) >= 0)
|
|
|
|
|
@@ -404,7 +404,7 @@
|
|
|
|
|
if (ispipe) {
|
|
|
|
|
ssize_t r = 0;
|
|
|
|
|
|
|
|
|
|
- while ((r = sread(fd, (void *)&buf[nbytes],
|
|
|
|
|
+ while ((r = file_sread(fd, (void *)&buf[nbytes],
|
|
|
|
|
(size_t)(HOWMANY - nbytes), 1)) > 0) {
|
|
|
|
|
nbytes += r;
|
|
|
|
|
if (r < PIPE_BUF) break;
|
|
|
|
|
Index: src/softmagic.c
|
|
|
|
|
--- src/softmagic.c.orig 2014-02-13 00:20:53.000000000 +0100
|
|
|
|
|
+++ src/softmagic.c 2014-03-01 10:56:14.954013603 +0100
|
|
|
|
|
@@ -221,8 +221,7 @@
|
|
|
|
|
if (file_check_mem(ms, ++cont_level) == -1)
|
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
|
|
- while (magic[magindex+1].cont_level != 0 &&
|
|
|
|
|
- ++magindex < nmagic) {
|
|
|
|
|
+ while (magindex+1 < nmagic && magic[++magindex].cont_level) {
|
|
|
|
|
m = &magic[magindex];
|
|
|
|
|
ms->line = m->lineno; /* for messages */
|
|
|
|
|
|