From ead78ffd692a2c3ff1b8c180750b81970b5d2584 Mon Sep 17 00:00:00 2001 From: danij Date: Mon, 6 Oct 2014 00:20:45 +0100 Subject: [PATCH] Fixed|libdoomsday|DED: Parsing Flags with an implicit zero value If no value is specified for a Flag then we should assume zero. This fixes an XG regression where the value for ltc_none flag was being registered with an uninitialized value. --- .../libdoomsday/include/doomsday/defs/ded.h | 5 ++-- doomsday/libdoomsday/src/defs/ded.cpp | 2 +- doomsday/libdoomsday/src/defs/dedparser.cpp | 24 ++++++++++--------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/doomsday/libdoomsday/include/doomsday/defs/ded.h b/doomsday/libdoomsday/include/doomsday/defs/ded.h index 346ed4c5e8..51cfc1a10a 100644 --- a/doomsday/libdoomsday/include/doomsday/defs/ded.h +++ b/doomsday/libdoomsday/include/doomsday/defs/ded.h @@ -22,8 +22,9 @@ #include #include -#include #include +#include +#include #include "../uri.h" #include "dedtypes.h" @@ -131,7 +132,7 @@ struct LIBDOOMSDAY_PUBLIC ded_s void clear(); - int addFlag(char const *id, int value); + int addFlag(de::String const &id, int value); int addModel(); diff --git a/doomsday/libdoomsday/src/defs/ded.cpp b/doomsday/libdoomsday/src/defs/ded.cpp index f885571b00..4cdbc9391b 100644 --- a/doomsday/libdoomsday/src/defs/ded.cpp +++ b/doomsday/libdoomsday/src/defs/ded.cpp @@ -67,7 +67,7 @@ void ded_s::clear() modelOffset = 0; } -int ded_s::addFlag(char const *id, int value) +int ded_s::addFlag(String const &id, int value) { Record &def = flags.append(); def.addText("id", id); diff --git a/doomsday/libdoomsday/src/defs/dedparser.cpp b/doomsday/libdoomsday/src/defs/dedparser.cpp index bc488a0d18..a404c141d2 100644 --- a/doomsday/libdoomsday/src/defs/dedparser.cpp +++ b/doomsday/libdoomsday/src/defs/dedparser.cpp @@ -570,6 +570,8 @@ DENG2_PIMPL(DEDParser) int ReadFlags(int *dest, char const *prefix) { + DENG2_ASSERT(dest); + // By default, no flags are set. *dest = 0; @@ -599,14 +601,10 @@ DENG2_PIMPL(DEDParser) { *dest = ded->evalFlags2(flag.toUtf8().constData()); } - else - { - *dest = 0; - } return true; } - for(;;) + forever { // Read the flag. ReadToken(); @@ -899,11 +897,13 @@ DENG2_PIMPL(DEDParser) if(ISTOKEN("Flag")) { ded_stringid_t id; - int value; + int value = 0; char dummyStr[2]; + de::zap(id); + FINDBEGIN; - for(;;) + forever { READLABEL; RV_STR("ID", id) @@ -913,10 +913,12 @@ DENG2_PIMPL(DEDParser) CHECKSC; } - ded->addFlag(id, value); - - // Sanity check. - DENG2_ASSERT(ded->flags.find("id", id).geti("value") == value); + if(qstrlen(id)) + { + ded->addFlag(id, value); + // Sanity check. + DENG2_ASSERT(ded->flags.find("id", id).geti("value") == value); + } } if(ISTOKEN("Mobj") || ISTOKEN("Thing"))