mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-13 03:33:48 +00:00
Fix issue where console stack values were getting overwritten inside a C++ function
This commit is contained in:
parent
d87994ec37
commit
82fd1794e6
5 changed files with 51 additions and 19 deletions
|
|
@ -74,6 +74,7 @@ struct StringStack
|
|||
mBuffer = (char *) dRealloc(mBuffer, mBufferSize);
|
||||
}
|
||||
}
|
||||
|
||||
void validateArgBufferSize(U32 size)
|
||||
{
|
||||
if(size > mArgBufferSize)
|
||||
|
|
@ -82,6 +83,7 @@ struct StringStack
|
|||
mArgBuffer = (char *) dRealloc(mArgBuffer, mArgBufferSize);
|
||||
}
|
||||
}
|
||||
|
||||
StringStack()
|
||||
{
|
||||
mBufferSize = 0;
|
||||
|
|
@ -95,6 +97,8 @@ struct StringStack
|
|||
mFunctionOffset = 0;
|
||||
validateBufferSize(8192);
|
||||
validateArgBufferSize(2048);
|
||||
dMemset(mBuffer, '\0', mBufferSize);
|
||||
dMemset(mArgBuffer, '\0', mArgBufferSize);
|
||||
}
|
||||
~StringStack()
|
||||
{
|
||||
|
|
@ -141,6 +145,7 @@ struct StringStack
|
|||
/// Clear the function offset.
|
||||
void clearFunctionOffset()
|
||||
{
|
||||
//Con::printf("StringStack mFunctionOffset = 0 (from %i)", mFunctionOffset);
|
||||
mFunctionOffset = 0;
|
||||
}
|
||||
|
||||
|
|
@ -262,9 +267,9 @@ struct StringStack
|
|||
return ret;
|
||||
}
|
||||
|
||||
|
||||
void pushFrame()
|
||||
{
|
||||
//Con::printf("StringStack pushFrame [frame=%i, start=%i]", mNumFrames, mStartStackSize);
|
||||
mFrameOffsets[mNumFrames++] = mStartStackSize;
|
||||
mStartOffsets[mStartStackSize++] = mStart;
|
||||
mStart += ReturnBufferSpace;
|
||||
|
|
@ -273,11 +278,22 @@ struct StringStack
|
|||
|
||||
void popFrame()
|
||||
{
|
||||
//Con::printf("StringStack popFrame [frame=%i, start=%i]", mNumFrames, mStartStackSize);
|
||||
mStartStackSize = mFrameOffsets[--mNumFrames];
|
||||
mStart = mStartOffsets[mStartStackSize];
|
||||
mLen = 0;
|
||||
}
|
||||
|
||||
void clearFrames()
|
||||
{
|
||||
//Con::printf("StringStack clearFrames");
|
||||
mNumFrames = 0;
|
||||
mStart = 0;
|
||||
mLen = 0;
|
||||
mStartStackSize = 0;
|
||||
mFunctionOffset = 0;
|
||||
}
|
||||
|
||||
/// Get the arguments for a function call from the stack.
|
||||
void getArgcArgv(StringTableEntry name, U32 *argc, const char ***in_argv, bool popStackFrame = false);
|
||||
};
|
||||
|
|
@ -309,6 +325,7 @@ public:
|
|||
void popFrame();
|
||||
|
||||
void resetFrame();
|
||||
void clearFrames();
|
||||
|
||||
void getArgcArgv(StringTableEntry name, U32 *argc, ConsoleValueRef **in_argv, bool popStackFrame = false);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue