Skip to content

Commit 40dec1a

Browse files
committed
* Make Script Arguments fixed size to work with Dark Forces allocators.
* This means that string arguments are limited to 31 characters.
1 parent 839c32a commit 40dec1a

File tree

5 files changed

+10
-7
lines changed

5 files changed

+10
-7
lines changed

TheForceEngine/TFE_ForceScript/forceScript.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -919,7 +919,8 @@ namespace TFE_ForceScript
919919
} break;
920920
case ARG_STRING:
921921
{
922-
context->SetArgObject(i, (void*)&arg[i].stdStr);
922+
std::string stdStr(arg[i].strValue);
923+
context->SetArgObject(i, (void*)&stdStr);
923924
} break;
924925
case ARG_FLOAT2:
925926
{

TheForceEngine/TFE_ForceScript/forceScript.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ namespace TFE_ForceScript
5454
Vec2f float2Value;
5555
Vec3f float3Value;
5656
Vec4f float4Value;
57+
char strValue[32];
5758
};
58-
std::string stdStr;
5959
};
6060

6161
// Opaque Handles.
@@ -109,8 +109,8 @@ namespace TFE_ForceScript
109109
inline ScriptArg scriptArg(u32 value) { ScriptArg arg; arg.type = ARG_U32; arg.uValue = value; return arg; }
110110
inline ScriptArg scriptArg(f32 value) { ScriptArg arg; arg.type = ARG_F32; arg.fValue = value; return arg; }
111111
inline ScriptArg scriptArg(bool value) { ScriptArg arg; arg.type = ARG_BOOL; arg.bValue = value; return arg; }
112-
inline ScriptArg scriptArg(const std::string& value) { ScriptArg arg; arg.type = ARG_STRING; arg.stdStr = value; return arg; }
113-
inline ScriptArg scriptArg(const char* value) { ScriptArg arg; arg.type = ARG_STRING; arg.stdStr = value; return arg; }
112+
inline ScriptArg scriptArg(const std::string& value) { ScriptArg arg; arg.type = ARG_STRING; strcpy(arg.strValue, value.c_str()); return arg; }
113+
inline ScriptArg scriptArg(const char* value) { ScriptArg arg; arg.type = ARG_STRING; strcpy(arg.strValue, value); return arg; }
114114
inline ScriptArg scriptArg(Vec2f value) { ScriptArg arg; arg.type = ARG_FLOAT2; arg.float2Value = value; return arg; }
115115
inline ScriptArg scriptArg(Vec3f value) { ScriptArg arg; arg.type = ARG_FLOAT3; arg.float3Value = value; return arg; }
116116
inline ScriptArg scriptArg(Vec4f value) { ScriptArg arg; arg.type = ARG_FLOAT4; arg.float4Value = value; return arg; }

TheForceEngine/TFE_Jedi/InfSystem/infSystem.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2034,7 +2034,9 @@ namespace TFE_Jedi
20342034
memcpy(unquotedStr, &value[1], newLen);
20352035
unquotedStr[newLen] = 0;
20362036

2037-
arg[argCount].stdStr = std::string(unquotedStr);
2037+
// Force string to fixed-size.
2038+
unquotedStr[31] = 0;
2039+
strcpy(arg[argCount].strValue, unquotedStr);
20382040
arg[argCount].type = TFE_ForceScript::ARG_STRING;
20392041
argCount++;
20402042
}

TheForceEngine/TFE_Jedi/Level/level.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1108,7 +1108,7 @@ namespace TFE_Jedi
11081108
{
11091109
TFE_ForceScript::ScriptArg arg;
11101110
arg.type = TFE_ForceScript::ARG_STRING;
1111-
arg.stdStr = levelName;
1111+
strcpy(arg.strValue, levelName);
11121112
TFE_ForceScript::execFunc(s_levelState.levelScriptStart, 1, &arg);
11131113
}
11141114
}

TheForceEngine/TFE_Jedi/Serialization/serialization.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ namespace TFE_Jedi
181181
TFE_System::logWrite(LOG_ERROR, "ScriptArg Serialization", "Cannot serialize type \"object\"");
182182
break;
183183
case TFE_ForceScript::ARG_STRING:
184-
SERIALIZE_STRING(version, arg->stdStr);
184+
SERIALIZE_CSTRING(version, arg->strValue);
185185
break;
186186
case TFE_ForceScript::ARG_FLOAT2:
187187
SERIALIZE_BUF(version, arg->float2Value.m, sizeof(Vec2f));

0 commit comments

Comments
 (0)