]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/whereami.c
fix 'hf 14b sriwrite' (#880)
[proxmark3-svn] / client / whereami.c
index 289aeb1f419e37dc617e5639acd7e0b9e3692a9c..6e5e85f39c52e1e5bc4d8019f6c8519a2862e717 100644 (file)
 extern "C" {
 #endif
 
 extern "C" {
 #endif
 
+#if defined(__linux__)
+// make realpath() available:
+#define _DEFAULT_SOURCE
+#endif
+
 #if !defined(WAI_MALLOC) || !defined(WAI_FREE) || !defined(WAI_REALLOC)
 #include <stdlib.h>
 #endif
 #if !defined(WAI_MALLOC) || !defined(WAI_FREE) || !defined(WAI_REALLOC)
 #include <stdlib.h>
 #endif
@@ -51,7 +56,7 @@ extern "C" {
 #pragma warning(push, 3)
 #endif
 #include <windows.h>
 #pragma warning(push, 3)
 #endif
 #include <windows.h>
-#include <intrin.h>
+//#include <intrin.h>                  // not required and doesn't exist in old mingw environments
 #if defined(_MSC_VER)
 #pragma warning(pop)
 #endif
 #if defined(_MSC_VER)
 #pragma warning(pop)
 #endif
@@ -136,7 +141,9 @@ int WAI_PREFIX(getExecutablePath)(char* out, int capacity, int* dirname_length)
   return WAI_PREFIX(getModulePath_)(NULL, out, capacity, dirname_length);
 }
 
   return WAI_PREFIX(getModulePath_)(NULL, out, capacity, dirname_length);
 }
 
-WAI_NOINLINE
+// GetModuleHandleEx() is not available on old mingw environments. We don't need getModulePath() yet. 
+// Sacrifice it for the time being to improve backwards compatibility
+/* WAI_NOINLINE
 WAI_FUNCSPEC
 int WAI_PREFIX(getModulePath)(char* out, int capacity, int* dirname_length)
 {
 WAI_FUNCSPEC
 int WAI_PREFIX(getModulePath)(char* out, int capacity, int* dirname_length)
 {
@@ -157,13 +164,15 @@ int WAI_PREFIX(getModulePath)(char* out, int capacity, int* dirname_length)
 
   return length;
 }
 
   return length;
 }
+ */
 
 #elif defined(__linux__)
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 #elif defined(__linux__)
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <limits.h>
+// #include <limits.h>     // not all linux distributions define PATH_MAX in limits.h because it depends on the filesystem. Therefore use...
+#include <linux/limits.h>
 #ifndef __STDC_FORMAT_MACROS
 #define __STDC_FORMAT_MACROS
 #endif
 #ifndef __STDC_FORMAT_MACROS
 #define __STDC_FORMAT_MACROS
 #endif
@@ -252,7 +261,7 @@ int WAI_PREFIX(getModulePath)(char* out, int capacity, int* dirname_length)
       if (!fgets(buffer, sizeof(buffer), maps))
         break;
 
       if (!fgets(buffer, sizeof(buffer), maps))
         break;
 
-      if (sscanf(buffer, "%" PRIx64 "-%" PRIx64 " %s %" PRIx64 " %x:%x %u %s\n", &low, &high, perms, &offset, &major, &minor, &inode, path) == 8)
+      if (sscanf(buffer, "%" SCNx64 "-%" SCNx64 " %s %" SCNx64 " %x:%x %u %s\n", &low, &high, perms, &offset, &major, &minor, &inode, path) == 8)
       {
         uint64_t addr = (uint64_t)(uintptr_t)WAI_RETURN_ADDRESS();
         if (low <= addr && addr <= high)
       {
         uint64_t addr = (uint64_t)(uintptr_t)WAI_RETURN_ADDRESS();
         if (low <= addr && addr <= high)
Impressum, Datenschutz