[Scummvm-cvs-logs] scummvm master -> b81207a04ecb5057b2b6efa0f3a6288b6e969aef
fingolfin
max at quendi.de
Sat Jun 18 01:39:55 CEST 2011
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
e792adb1b8 COMMON: Add vformat() function (Common::String analog to vsprintf)
71ea5acd29 AGI: Replace vsprintf by Common::String::vformat
5455fc5ff4 AGOS: Replace vsprintf by Common::String::vformat
fcc5580d9f HUGO: Replace vsprintf by Common::String::vformat
d74e2d3224 KYRA: Replace vsprintf by Common::String::vformat
b81207a04e COMMON: Replace some vsnprintf/STRINGBUFLEN uses by vformat
Commit: e792adb1b889580fa198d56e16f9098fd4227bb0
https://github.com/scummvm/scummvm/commit/e792adb1b889580fa198d56e16f9098fd4227bb0
Author: Max Horn (max at quendi.de)
Date: 2011-06-17T16:36:15-07:00
Commit Message:
COMMON: Add vformat() function (Common::String analog to vsprintf)
Changed paths:
common/scummsys.h
common/str.cpp
common/str.h
diff --git a/common/scummsys.h b/common/scummsys.h
index a425bef..9d4b6a9 100644
--- a/common/scummsys.h
+++ b/common/scummsys.h
@@ -302,6 +302,19 @@
#define MAXPATHLEN 256
#endif
+#ifndef scumm_va_copy
+ #if defined(va_copy)
+ #define scumm_va_copy va_copy
+ #elif defined(__va_copy)
+ #define scumm_va_copy __va_copy
+ #elif defined(_MSC_VER)
+ #define scumm_va_copy(dst, src) ((dst) = (src))
+ #else
+ #error scumm_va_copy undefined for this port
+ #endif
+#endif
+
+
//
// Typedef our system types unless they have already been defined by config.h,
diff --git a/common/str.cpp b/common/str.cpp
index 223188b..a2cd4a01 100644
--- a/common/str.cpp
+++ b/common/str.cpp
@@ -25,8 +25,6 @@
#include "common/str.h"
#include "common/util.h"
-#include <stdarg.h>
-
namespace Common {
MemoryPool *g_refCountPool = 0; // FIXME: This is never freed right now
@@ -429,10 +427,22 @@ uint String::hash() const {
// static
String String::format(const char *fmt, ...) {
String output;
- assert(output.isStorageIntern());
va_list va;
va_start(va, fmt);
+ output = String::vformat(fmt, va);
+ va_end(va);
+
+ return output;
+}
+
+// static
+String String::vformat(const char *fmt, va_list args) {
+ String output;
+ assert(output.isStorageIntern());
+
+ va_list va;
+ scumm_va_copy(va, args);
int len = vsnprintf(output._str, _builtinCapacity, fmt, va);
va_end(va);
@@ -457,7 +467,7 @@ String String::format(const char *fmt, ...) {
assert(!output.isStorageIntern());
size = output._extern._capacity;
- va_start(va, fmt);
+ scumm_va_copy(va, args);
len = vsnprintf(output._str, size, fmt, va);
va_end(va);
} while (len == -1 || len >= size - 1);
@@ -468,7 +478,7 @@ String String::format(const char *fmt, ...) {
} else {
// vsnprintf didn't have enough space, so grow buffer
output.ensureCapacity(len, false);
- va_start(va, fmt);
+ scumm_va_copy(va, args);
int len2 = vsnprintf(output._str, len+1, fmt, va);
va_end(va);
assert(len == len2);
diff --git a/common/str.h b/common/str.h
index 7b97dfe..8e07b62 100644
--- a/common/str.h
+++ b/common/str.h
@@ -24,6 +24,8 @@
#include "common/scummsys.h"
+#include <stdarg.h>
+
namespace Common {
/**
@@ -213,10 +215,19 @@ public:
uint hash() const;
/**
- * Printf-like function. Returns a formatted String.
+ * Print formatted data into a String object. Similar to sprintf,
+ * except that it stores the result in (variably sized) String
+ * instead of a fixed size buffer.
*/
static Common::String format(const char *fmt, ...) GCC_PRINTF(1,2);
+ /**
+ * Print formatted data into a String object. Similar to vsprintf,
+ * except that it stores the result in (variably sized) String
+ * instead of a fixed size buffer.
+ */
+ static Common::String vformat(const char *fmt, va_list args);
+
public:
typedef char * iterator;
typedef const char * const_iterator;
Commit: 71ea5acd29e97a123d095d88638778bf3dbe4d0d
https://github.com/scummvm/scummvm/commit/71ea5acd29e97a123d095d88638778bf3dbe4d0d
Author: Max Horn (max at quendi.de)
Date: 2011-06-17T16:36:15-07:00
Commit Message:
AGI: Replace vsprintf by Common::String::vformat
Changed paths:
engines/agi/text.cpp
diff --git a/engines/agi/text.cpp b/engines/agi/text.cpp
index fedfd29..82a2340 100644
--- a/engines/agi/text.cpp
+++ b/engines/agi/text.cpp
@@ -504,17 +504,16 @@ int AgiEngine::print(const char *p, int lin, int col, int len) {
*
*/
void AgiEngine::printStatus(const char *message, ...) {
- char x[42];
va_list args;
va_start(args, message);
- vsprintf(x, message, args);
+ Common::String x = Common::String::vformat(message, args);
va_end(args);
debugC(4, kDebugLevelText, "fg=%d, bg=%d", STATUS_FG, STATUS_BG);
- printText(x, 0, 0, _game.lineStatus, 40, STATUS_FG, STATUS_BG);
+ printText(x.c_str(), 0, 0, _game.lineStatus, 40, STATUS_FG, STATUS_BG);
}
static void safeStrcat(Common::String &p, const char *t) {
Commit: 5455fc5ff48c6b005ac514c55f975491c2202bac
https://github.com/scummvm/scummvm/commit/5455fc5ff48c6b005ac514c55f975491c2202bac
Author: Max Horn (max at quendi.de)
Date: 2011-06-17T16:36:15-07:00
Commit Message:
AGOS: Replace vsprintf by Common::String::vformat
Changed paths:
engines/agos/string.cpp
diff --git a/engines/agos/string.cpp b/engines/agos/string.cpp
index 1cdd7f6..fa85d57 100644
--- a/engines/agos/string.cpp
+++ b/engines/agos/string.cpp
@@ -840,13 +840,12 @@ void AGOSEngine_Feeble::printInteractText(uint16 num, const char *string) {
void AGOSEngine_Feeble::sendInteractText(uint16 num, const char *fmt, ...) {
va_list arglist;
- char string[256];
va_start(arglist, fmt);
- vsprintf(string, fmt, arglist);
+ Common::String string = Common::String::vformat(fmt, arglist);
va_end(arglist);
- printInteractText(num, string);
+ printInteractText(num, string.c_str());
}
#endif
Commit: fcc5580d9f917abf17363a124b07fe8d199bf530
https://github.com/scummvm/scummvm/commit/fcc5580d9f917abf17363a124b07fe8d199bf530
Author: Max Horn (max at quendi.de)
Date: 2011-06-17T16:36:15-07:00
Commit Message:
HUGO: Replace vsprintf by Common::String::vformat
Changed paths:
engines/hugo/parser.cpp
diff --git a/engines/hugo/parser.cpp b/engines/hugo/parser.cpp
index 4a53d67..a79ec2c 100644
--- a/engines/hugo/parser.cpp
+++ b/engines/hugo/parser.cpp
@@ -391,6 +391,8 @@ void Parser::command(const char *format, ...) {
va_list marker;
va_start(marker, format);
+// TODO:
+// _vm->_line = Common::String::vformat(format, marker);
vsprintf(_vm->_line, format, marker);
va_end(marker);
Commit: d74e2d3224f7f43daf7bc90018b1b3f40a8c4596
https://github.com/scummvm/scummvm/commit/d74e2d3224f7f43daf7bc90018b1b3f40a8c4596
Author: Max Horn (max at quendi.de)
Date: 2011-06-17T16:36:16-07:00
Commit Message:
KYRA: Replace vsprintf by Common::String::vformat
Changed paths:
engines/kyra/gui.cpp
diff --git a/engines/kyra/gui.cpp b/engines/kyra/gui.cpp
index b9477c9..f58ca01 100644
--- a/engines/kyra/gui.cpp
+++ b/engines/kyra/gui.cpp
@@ -643,32 +643,31 @@ void MainMenu::printString(const char *format, int x, int y, int col1, int col2,
if (!format)
return;
- char string[512];
va_list vaList;
va_start(vaList, flags);
- vsprintf(string, format, vaList);
+ Common::String string = Common::String::vformat(format, vaList);
va_end(vaList);
if (flags & 1)
- x -= _screen->getTextWidth(string) >> 1;
+ x -= _screen->getTextWidth(string.c_str()) >> 1;
if (flags & 2)
- x -= _screen->getTextWidth(string);
+ x -= _screen->getTextWidth(string.c_str());
if (_vm->gameFlags().use16ColorMode)
flags &= 3;
if (flags & 4) {
- _screen->printText(string, x - 1, y, _static.altColor, col2);
- _screen->printText(string, x, y + 1, _static.altColor, col2);
+ _screen->printText(string.c_str(), x - 1, y, _static.altColor, col2);
+ _screen->printText(string.c_str(), x, y + 1, _static.altColor, col2);
}
if (flags & 8) {
- _screen->printText(string, x - 1, y, 227, col2);
- _screen->printText(string, x, y + 1, 227, col2);
+ _screen->printText(string.c_str(), x - 1, y, 227, col2);
+ _screen->printText(string.c_str(), x, y + 1, 227, col2);
}
- _screen->printText(string, x, y, col1, col2);
+ _screen->printText(string.c_str(), x, y, col1, col2);
}
} // End of namespace Kyra
Commit: b81207a04ecb5057b2b6efa0f3a6288b6e969aef
https://github.com/scummvm/scummvm/commit/b81207a04ecb5057b2b6efa0f3a6288b6e969aef
Author: Max Horn (max at quendi.de)
Date: 2011-06-17T16:36:16-07:00
Commit Message:
COMMON: Replace some vsnprintf/STRINGBUFLEN uses by vformat
Changed paths:
common/debug.cpp
common/textconsole.cpp
diff --git a/common/debug.cpp b/common/debug.cpp
index dbbb204..0dae344 100644
--- a/common/debug.cpp
+++ b/common/debug.cpp
@@ -107,18 +107,13 @@ bool DebugManager::isDebugChannelEnabled(uint32 channel) {
#ifndef DISABLE_TEXT_CONSOLE
static void debugHelper(const char *s, va_list va, bool caret = true) {
- char buf[STRINGBUFLEN];
+ Common::String buf = Common::String::vformat(s, va);
- vsnprintf(buf, STRINGBUFLEN, s, va);
- buf[STRINGBUFLEN-1] = '\0';
-
- if (caret) {
- buf[STRINGBUFLEN-2] = '\0';
- strcat(buf, "\n");
- }
+ if (caret)
+ buf += '\n';
if (g_system)
- g_system->logMessage(LogMessageType::kDebug, buf);
+ g_system->logMessage(LogMessageType::kDebug, buf.c_str());
// TODO: Think of a good fallback in case we do not have
// any OSystem yet.
}
diff --git a/common/textconsole.cpp b/common/textconsole.cpp
index f2325ac..ffa42e6 100644
--- a/common/textconsole.cpp
+++ b/common/textconsole.cpp
@@ -46,14 +46,14 @@ void setErrorHandler(ErrorHandler handler) {
#ifndef DISABLE_TEXT_CONSOLE
void warning(const char *s, ...) {
- char buf[STRINGBUFLEN];
+ Common::String output;
va_list va;
va_start(va, s);
- vsnprintf(buf, STRINGBUFLEN, s, va);
+ output = Common::String::vformat(s, va);
va_end(va);
- Common::String output = Common::String::format("WARNING: %s!\n", buf);
+ output = "WARNING: " + output + "!\n";
if (g_system)
g_system->logMessage(LogMessageType::kWarning, output.c_str());
@@ -64,6 +64,9 @@ void warning(const char *s, ...) {
#endif
void NORETURN_PRE error(const char *s, ...) {
+ // We don't use String::vformat here, as that require
+ // using the heap, and that might be impossible at this
+ // point, e.g. if the error was an "out-of-memory" error.
char buf_input[STRINGBUFLEN];
char buf_output[STRINGBUFLEN];
va_list va;
More information about the Scummvm-git-logs
mailing list