You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

255 lines
7.5 KiB

Index: configure
--- configure.orig 2023-07-27 21:46:42.000000000 +0200
+++ configure 2023-07-28 21:37:38.594329000 +0200
@@ -3796,7 +3796,7 @@
fi
-pkgdatadir='$(datadir)/misc'
+pkgdatadir='$(datadir)/file'
if test x$fsect = x5; then
Index: src/apprentice.c
--- src/apprentice.c.orig 2023-07-17 16:38:35.000000000 +0200
+++ src/apprentice.c 2023-07-28 21:37:38.594650000 +0200
@@ -1473,7 +1473,7 @@
return 0;
}
- 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 2023-05-21 17:59:58.000000000 +0200
+++ src/compress.c 2023-07-28 21:41:45.514058000 +0200
@@ -404,7 +404,7 @@
* `safe' read for sockets and pipes.
*/
file_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;
#if defined(FIONREAD) && !defined(__MINGW32__)
@@ -519,7 +519,7 @@
if (swrite(tfd, startbuf, nbytes) != CAST(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, CAST(size_t, r)) != r)
break;
}
@@ -1161,7 +1161,7 @@
}
rv = OKDATA;
- r = sread(fdp[STDOUT_FILENO][0], *newch, bytes_max, 0);
+ r = file_sread(fdp[STDOUT_FILENO][0], *newch, bytes_max, 0);
DPRINTF("read got %zd\n", r);
if (r < 0) {
rv = ERRDATA;
@@ -1179,7 +1179,7 @@
closefd(fdp[STDOUT_FILENO], 0);
goto ok;
}
- if ((re = sread(fdp[STDERR_FILENO][0], *newch, bytes_max, 0)) > 0) {
+ if ((re = file_sread(fdp[STDERR_FILENO][0], *newch, bytes_max, 0)) > 0) {
DPRINTF("Got stuff from stderr %s\n", *newch);
rv = ERRDATA;
r = filter_error(*newch, r);
Index: src/file.h
--- src/file.h.orig 2023-07-27 21:40:22.000000000 +0200
+++ src/file.h 2023-07-28 21:37:38.594998000 +0200
@@ -587,7 +587,7 @@
file_protected void file_showstr(FILE *, const char *, size_t);
file_protected size_t file_mbswidth(struct magic_set *, const char *);
file_protected const char *file_getbuffer(struct magic_set *);
-file_protected ssize_t sread(int, void *, size_t, int);
+file_protected ssize_t file_sread(int, void *, size_t, int);
file_protected int file_check_mem(struct magic_set *, unsigned int);
file_protected int file_looks_utf8(const unsigned char *, size_t,
file_unichar_t *, size_t *);
@@ -636,9 +636,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
#ifndef HAVE_DPRINTF
Index: src/funcs.c
--- src/funcs.c.orig 2023-07-27 21:40:12.000000000 +0200
+++ src/funcs.c 2023-07-28 21:37:38.595117000 +0200
@@ -35,6 +35,7 @@
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
+#include <limits.h>
#include <ctype.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h> /* for pipe2() */
@@ -930,3 +931,108 @@
*++last = '\0';
return str;
}
+
+/*
+ * 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 2023-07-28 21:37:38.595178000 +0200
+++ src/getopt_long.h 2023-07-28 21:37:38.595171000 +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
Index: src/magic.c
--- src/magic.c.orig 2023-07-27 21:33:24.000000000 +0200
+++ src/magic.c 2023-07-28 21:37:38.595266000 +0200
@@ -122,7 +122,7 @@
_w32_get_magic_relative_to(char **hmagicpath, HINSTANCE module)
{
static const char *trypaths[] = {
- "%s/share/misc/magic.mgc",
+ "%s/share/file/magic.mgc",
"%s/magic.mgc",
};
LPSTR dllpath;
@@ -146,7 +146,7 @@
sp = strlen(dllpath);
if (sp > 3 && stricmp(&dllpath[sp - 3], "bin") == 0) {
_w32_append_path(hmagicpath,
- "%s/../share/misc/magic.mgc", dllpath);
+ "%s/../share/file/magic.mgc", dllpath);
goto out;
}
@@ -497,7 +497,7 @@
if (fd != -1) {
ssize_t r = 0;
- while ((r = sread(fd, RCAST(void *, &buf[nbytes]),
+ while ((r = file_sread(fd, RCAST(void *, &buf[nbytes]),
CAST(size_t, ms->bytes_max - nbytes), 1)) > 0) {
nbytes += r;
if (r < PIPE_BUF) break;