From: Christos Zoulas <christos@zoulas.com>
Date: Sat, 11 Jul 2015 14:41:37 +0000 (+0000)
Subject: PR/466: Windows fixes.
X-Git-Tag: FILE5_25~35
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d5f2c28536f1645e3da25fa3f8da5a0a45404dc4;p=file

PR/466: Windows fixes.
---

diff --git a/ChangeLog b/ChangeLog
index 1fb44a26..3c0be5e9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2015-07-11  10:35  Christos Zoulas <christos@zoulas.com>
+
+	* Windows fixes PR/466 (Jason Hood)
+
 2015-07-09  10:35  Christos Zoulas <christos@zoulas.com>
 
 	* release 5.24
diff --git a/src/file.h b/src/file.h
index 03999f5e..00d2abec 100644
--- a/src/file.h
+++ b/src/file.h
@@ -27,7 +27,7 @@
  */
 /*
  * file.h - definitions for file(1) program
- * @(#)$File: file.h,v 1.167 2015/02/14 17:19:29 christos Exp $
+ * @(#)$File: file.h,v 1.168 2015/04/09 20:01:41 christos Exp $
  */
 
 #ifndef __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 2f4d0228..7e27ed6f 100644
--- a/src/gmtime_r.c
+++ b/src/gmtime_r.c
@@ -1,15 +1,15 @@
-/*	$File: asctime_r.c,v 1.1 2012/05/15 17:14:36 christos Exp $	*/
+/*	$File: gmtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $	*/
 
 #include "file.h"
 #ifndef	lint
-FILE_RCSID("@(#)$File: asctime_r.c,v 1.1 2012/05/15 17:14:36 christos Exp $")
+FILE_RCSID("@(#)$File: gmtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $")
 #endif	/* lint */
 #include <time.h>
 #include <string.h>
 
 /* 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 a8eaaba3..35c3b40f 100644
--- a/src/localtime_r.c
+++ b/src/localtime_r.c
@@ -1,15 +1,15 @@
-/*	$File: asctime_r.c,v 1.1 2012/05/15 17:14:36 christos Exp $	*/
+/*	$File: localtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $	*/
 
 #include "file.h"
 #ifndef	lint
-FILE_RCSID("@(#)$File: asctime_r.c,v 1.1 2012/05/15 17:14:36 christos Exp $")
+FILE_RCSID("@(#)$File: localtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $")
 #endif	/* lint */
 #include <time.h>
 #include <string.h>
 
 /* 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 c779f5c3..59b7e45b 100644
--- a/src/magic.c
+++ b/src/magic.c
@@ -33,7 +33,7 @@
 #include "file.h"
 
 #ifndef	lint
-FILE_RCSID("@(#)$File: magic.c,v 1.92 2015/01/02 21:29:39 christos Exp $")
+FILE_RCSID("@(#)$File: magic.c,v 1.93 2015/04/15 23:47:58 christos Exp $")
 #endif	/* lint */
 
 #include "magic.h"
@@ -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 4062ed66..ab36d267 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -27,7 +27,7 @@
 #include "file.h"
 
 #ifndef lint
-FILE_RCSID("@(#)$File: readelf.c,v 1.119 2015/04/09 20:01:41 christos Exp $")
+FILE_RCSID("@(#)$File: readelf.c,v 1.120 2015/06/16 14:18:07 christos Exp $")
 #endif
 
 #ifdef BUILTIN_ELF
@@ -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;