--- ./src/apprentice.c.orig	2008-07-02 17:22:47.000000000 +0200
+++ ./src/apprentice.c	2008-07-08 21:11:58.556774000 +0200
@@ -688,6 +688,7 @@ apprentice_load(struct magic_set *ms, st
 		file_oomem(ms, maxmagic * sizeof(*marray));
 		return -1;
 	}
+	memset(marray, 0, maxmagic * sizeof(*marray));
 	marraycount = 0;
 
 	/* print silly verbose header for USG compat. */
--- ./src/compress.c.orig	2008-05-16 16:17:59.000000000 +0200
+++ ./src/compress.c	2008-07-08 21:11:58.603611000 +0200
@@ -167,7 +167,7 @@ swrite(int fd, const void *buf, size_t n
  * `safe' read for sockets and pipes.
  */
 protected ssize_t
-sread(int fd, void *buf, size_t n, int canbepipe)
+file_sread(int fd, void *buf, size_t n, int canbepipe)
 {
 	int rv, cnt;
 #ifdef FIONREAD
@@ -261,7 +261,7 @@ file_pipe2file(struct magic_set *ms, int
 	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;
 	}
@@ -463,7 +463,7 @@ uncompressbuf(struct magic_set *ms, int 
 			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));
--- ./src/file.c.orig	2008-05-19 01:21:17.000000000 +0200
+++ ./src/file.c	2008-07-08 21:24:37.955902000 +0200
@@ -60,9 +60,10 @@
 #include <wchar.h>
 #endif
 
-#include <getopt.h>
 #ifndef HAVE_GETOPT_LONG
-int getopt_long(int argc, char * const *argv, const char *optstring, const struct option *longopts, int *longindex);
+#include "getopt_long.h"
+#else
+#include <getopt.h>
 #endif
 
 #include <netinet/in.h>		/* for byte swapping */
--- ./src/file.h.orig	2008-07-02 17:22:47.000000000 +0200
+++ ./src/file.h	2008-07-08 21:11:58.606539000 +0200
@@ -356,7 +356,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 *);
 
@@ -377,9 +377,11 @@
 #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 **ptr, const char *format_string, ...);
 #endif
 
--- ./src/funcs.c.orig	2008-05-16 16:25:01.000000000 +0200
+++ ./src/funcs.c	2008-07-08 21:11:58.607653000 +0200
@@ -29,6 +29,7 @@
 #include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
+#include <limits.h>
 #include <ctype.h>
 #if defined(HAVE_WCHAR_H)
 #include <wchar.h>
@@ -337,3 +338,108 @@ file_check_mem(struct magic_set *ms, uns
 #endif /* ENABLE_CONDITIONALS */
 	return 0;
 }
+
+/*
+ * 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
+
--- ./src/getopt_long.c.orig	2008-02-07 01:50:10.000000000 +0100
+++ ./src/getopt_long.c	2008-07-08 21:23:50.032867000 +0200
@@ -30,11 +30,12 @@
  */
 
 #include <assert.h>
-#include <err.h>
+#include <stdarg.h>
 #include <errno.h>
-#include <getopt.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include "getopt_long.h"
 
 #define REPLACE_GETOPT
 
@@ -73,6 +74,16 @@ __weak_alias(getopt_long,_getopt_long)
 
 #define	EMSG	""
 
+#define __P(x) x 
+#define warnx file_warnx
+void warnx(const char *fmt, ...)
+{   
+    va_list ap;
+    va_start(ap, fmt);
+    vfprintf(stderr, "WARNING: %s\n", ap);
+    va_end(ap);
+}
+
 static int getopt_internal __P((int, char **, const char *));
 static int gcd __P((int, int));
 static void permute_args __P((int, int, int, char **));
--- ./src/magic.c.orig	2008-05-16 16:25:01.000000000 +0200
+++ ./src/magic.c	2008-07-08 21:11:58.610491000 +0200
@@ -324,7 +324,7 @@ file_or_fd(struct magic_set *ms, const c
 	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;
--- ./src/softmagic.c.orig	2008-04-29 03:10:49.000000000 +0200
+++ ./src/softmagic.c	2008-07-08 21:11:58.612487000 +0200
@@ -302,10 +302,9 @@ check_fmt(struct magic_set *ms, struct m
 }
 
 #ifndef HAVE_STRNDUP
-char * strndup(const char *, size_t);
-
-char *
-strndup(const char *str, size_t n)
+#define strndup(str,n) magic_strndup(str,n)
+static char *
+magic_strndup(const char *str, size_t n)
 {
 	size_t len;
 	char *copy;
--- ./src/getopt_long.h.orig	2008-07-08 21:15:15.603895000 +0200
+++ ./src/getopt_long.h	2008-07-08 21:21:12.935061000 +0200
@@ -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
