summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Suhr Christensen <jsc@umbraculum.org>2014-02-13 14:14:40 +0100
committerJonas Suhr Christensen <jsc@umbraculum.org>2014-02-13 14:14:40 +0100
commitb9f463cbd2ab9dfb4be5b17a649b88e7ddc2b334 (patch)
treef0636a7ec4e09eeaa5726433c0a6ccdc8df648e7
parente3a27e83e1c2f84f5a5997dfe06cfa9e8fa5f032 (diff)
Added va_copy before using va_list's. This *should* fix 64bit wrong memory reference.
-rw-r--r--hugin.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/hugin.c b/hugin.c
index 564d6be..a4dd622 100644
--- a/hugin.c
+++ b/hugin.c
@@ -44,6 +44,10 @@
# ifdef WIN32
# include <windows.h>
typedef HANDLE mutex_t;
+
+// see http://stackoverflow.com/questions/558223/va-copy-porting-to-visual-c
+#define va_copy(dest, src) (dest = src)
+
# else
# include <pthread.h>
typedef pthread_mutex_t mutex_t;
@@ -403,8 +407,14 @@ int __debug(const char *func, const int line,
va_list va;
va_start(va, fmt);
+ // Use a copy of va_list for 64bit fix:
+ // see http://www.bailopan.net/blog/?p=30
+ //
+ // Not available in windows. So hugin may break in 64bit windows
+
va_list vacpy;
va_copy(vacpy, va);
+
hdr_bufsz = scprintf(hdr_fmt, HDR_ARGS);
msg_bufsz = vscprintf(fmt, vacpy);
if(hdr_bufsz < 0 || msg_bufsz < 0) return 1; // Bad format?