summaryrefslogtreecommitdiffstats
path: root/src/file-1-fixes.patch
blob: 95ff1f6f03555e0ad74122d3737d13f8f3cd29e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
This file is part of MXE. See LICENSE.md for licensing information.

From https://github.com/file/file/commit/d5f2c28536f1645e3da25fa3f8da5a0a45404dc4.

From 4e654ecfd1ca6535540b7d33dcd66051b9b62def Mon Sep 17 00:00:00 2001
From: Christos Zoulas <christos@zoulas.com>
Date: Mon, 27 Jul 2015 00:14:29 -0400
Subject: [PATCH] PR/466: Windows fixes.


diff --git a/src/file.h b/src/file.h
index 1b4ef6f..00d2abe 100644
--- a/src/file.h
+++ b/src/file.h
@@ -44,9 +44,11 @@
     #define SIZE_T_FORMAT ""
   #endif
   #define INT64_T_FORMAT "I64"
+  #define INTMAX_T_FORMAT "I64"
 #else
   #define SIZE_T_FORMAT "z"
   #define INT64_T_FORMAT "ll"
+  #define INTMAX_T_FORMAT "j"
 #endif
 
 #include <stdio.h>	/* Include that here, to make sure __P gets defined */
diff --git a/src/gmtime_r.c b/src/gmtime_r.c
index 963dfee..7e27ed6 100644
--- a/src/gmtime_r.c
+++ b/src/gmtime_r.c
@@ -9,7 +9,7 @@ FILE_RCSID("@(#)$File: gmtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $")
 
 /* asctime_r is not thread-safe anyway */
 struct tm *
-gmtime_r(const time_t t, struct tm *tm)
+gmtime_r(const time_t *t, struct tm *tm)
 {
 	struct tm *tmp = gmtime(t);
 	if (tmp == NULL)
diff --git a/src/localtime_r.c b/src/localtime_r.c
index 69d78d9..35c3b40 100644
--- a/src/localtime_r.c
+++ b/src/localtime_r.c
@@ -9,7 +9,7 @@ FILE_RCSID("@(#)$File: localtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $")
 
 /* asctime_r is not thread-safe anyway */
 struct tm *
-localtime_r(const time_t t, struct tm *tm)
+localtime_r(const time_t *t, struct tm *tm)
 {
 	struct tm *tmp = localtime(t);
 	if (tmp == NULL)
diff --git a/src/magic.c b/src/magic.c
index bc8c344..59b7e45 100644
--- a/src/magic.c
+++ b/src/magic.c
@@ -137,6 +137,14 @@ _w32_get_magic_relative_to(char **hmagicpath, HINSTANCE module)
 
 	PathRemoveFileSpecA(dllpath);
 
+	if (module) {
+		char exepath[MAX_PATH];
+		GetModuleFileNameA(NULL, exepath, MAX_PATH);
+		PathRemoveFileSpecA(exepath);
+		if (stricmp(exepath, dllpath) == 0)
+			goto out;
+	}
+
 	sp = strlen(dllpath);
 	if (sp > 3 && stricmp(&dllpath[sp - 3], "bin") == 0) {
 		_w32_append_path(hmagicpath,
diff --git a/src/readelf.c b/src/readelf.c
index bc6e7f6..ab36d26 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -1054,9 +1054,11 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num,
 		case SHT_NOTE:
 			if (xsh_size + xsh_offset > (uintmax_t)fsize)  {
 				if (file_printf(ms,
-				    ", note offset/size 0x%jx+0x%jx exceeds"
-				    " file size 0x%jx", (uintmax_t)xsh_offset,
-				    (uintmax_t)xsh_size, (uintmax_t)fsize) == -1)
+				    ", note offset/size 0x%" INTMAX_T_FORMAT
+				    "x+0x%" INTMAX_T_FORMAT "x exceeds"
+				    " file size 0x%" INTMAX_T_FORMAT "x",
+				    (uintmax_t)xsh_offset, (uintmax_t)xsh_size,
+				    (uintmax_t)fsize) == -1)
 					return -1;
 				return 0; 
 			}
@@ -1065,7 +1067,8 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num,
 				    " for note");
 				return -1;
 			}
-			if (pread(fd, nbuf, xsh_size, xsh_offset) < (ssize_t)xsh_size) {
+			if (pread(fd, nbuf, xsh_size, xsh_offset) <
+			    (ssize_t)xsh_size) {
 				file_badread(ms);
 				free(nbuf);
 				return -1;
-- 
1.9.1