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
|