From 730773f5f1eb68888738d9022afa7e41469e1f2d Mon Sep 17 00:00:00 2001 From: rubidium Date: Thu, 1 Jan 2015 20:50:43 +0000 Subject: [PATCH] (svn r27102) -Fix [FS#6194]: money values would end up wrong in strings when outside of the bounds of a 32 bits integer --- src/script/api/script_text.cpp | 2 +- src/script/api/script_text.hpp | 2 +- src/stdafx.h | 1 + src/strings.cpp | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/script/api/script_text.cpp b/src/script/api/script_text.cpp index 51fc198639..e692be0ae2 100644 --- a/src/script/api/script_text.cpp +++ b/src/script/api/script_text.cpp @@ -201,7 +201,7 @@ char *ScriptText::_GetEncodedText(char *p, char *lastofp, int ¶m_count) p = this->paramt[i]->_GetEncodedText(p, lastofp, param_count); continue; } - p += seprintf(p, lastofp,":%X", (uint32)this->parami[i]); + p += seprintf(p, lastofp,":" OTTD_PRINTFHEX64, this->parami[i]); param_count++; } diff --git a/src/script/api/script_text.hpp b/src/script/api/script_text.hpp index fe38be1973..21bf3929fb 100644 --- a/src/script/api/script_text.hpp +++ b/src/script/api/script_text.hpp @@ -129,7 +129,7 @@ public: private: StringID string; char *params[SCRIPT_TEXT_MAX_PARAMETERS]; - int parami[SCRIPT_TEXT_MAX_PARAMETERS]; + int64 parami[SCRIPT_TEXT_MAX_PARAMETERS]; ScriptText *paramt[SCRIPT_TEXT_MAX_PARAMETERS]; int paramc; diff --git a/src/stdafx.h b/src/stdafx.h index d26b05c3f8..87270c6caf 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -322,6 +322,7 @@ #define OTTD_PRINTF64 "%I64d" #define OTTD_PRINTFHEX64 "%I64x" #define PRINTF_SIZE "%Iu" + #define strtoull _strtoui64 #else #define OTTD_PRINTF64 "%lld" #define OTTD_PRINTFHEX64 "%llx" diff --git a/src/strings.cpp b/src/strings.cpp index 8ce2fde076..a7e60f846b 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -874,7 +874,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg bool lookup = (l == SCC_ENCODED); if (lookup) s += len; - param = (int32)strtoul(s, &p, 16); + param = strtoull(s, &p, 16); if (lookup) { if (param >= TAB_SIZE) {