Просмотр исходного кода

r12006@catbus: nickm | 2007-02-28 16:06:24 -0500
On mingw, use "%I64u" to printf/scanf 64-bit integers, instead of the usual GCC "%llu". This prevents a bug when saving 64-bit int configuration values on mingw; the high-order 32 bits would get truncated. If the value was then reloaded, disaster would occur. (Fixes bug 400 and maybe also bug 397.) Backport candidate.


svn:r9691

Nick Mathewson 17 лет назад
Родитель
Сommit
e2b1a77c3e
2 измененных файлов с 11 добавлено и 2 удалено
  1. 5 0
      ChangeLog
  2. 6 2
      src/common/compat.h

+ 5 - 0
ChangeLog

@@ -24,6 +24,11 @@ Changes in version 0.1.2.9-??? - 2007-??-??
       of 2 as indicating that the server is completely bad; it sometimes
       means that the server is just bad for the request in question. (may fix
       the last of bug 326.)
+    - On mingw, use "%I64u" to printf/scanf 64-bit integers, instead of the
+      usual GCC "%llu".  This prevents a bug when saving 64-bit int
+      configuration values on mingw; the high-order 32 bits would get
+      truncated.  If the value was then reloaded, disaster would
+      occur. (Fixes bug 400 and maybe also bug 397.)
 
 
 Changes in version 0.1.2.8-beta - 2007-02-26

+ 6 - 2
src/common/compat.h

@@ -123,15 +123,19 @@ size_t strlcpy(char *dst, const char *src, size_t siz) ATTR_NONNULL((1,2));
 #ifdef _MSC_VER
 #define U64_PRINTF_ARG(a) (a)
 #define U64_SCANF_ARG(a) (a)
-#define U64_FORMAT "%I64u"
 #define U64_LITERAL(n) (n ## ui64)
 #else
 #define U64_PRINTF_ARG(a) ((long long unsigned int)(a))
 #define U64_SCANF_ARG(a) ((long long unsigned int*)(a))
-#define U64_FORMAT "%llu"
 #define U64_LITERAL(n) (n ## llu)
 #endif
 
+#if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__)
+#define U64_FORMAT "%I64u"
+#else
+#define U64_FORMAT "%llu"
+#endif
+
 /** Represents an mmaped file. Allocated via tor_mmap_file; freed with
  * tor_munmap_file. */
 typedef struct tor_mmap_t {