diff --git a/src/ARCodeFile.cpp b/src/ARCodeFile.cpp index 79c582d1ad..d1f34fb6b4 100644 --- a/src/ARCodeFile.cpp +++ b/src/ARCodeFile.cpp @@ -120,7 +120,7 @@ bool ARCodeFile::Load() curcode.Name = codename; curcode.Enabled = enable!=0; - curcode.CodeLen = 0; + curcode.Code.clear(); } else { @@ -141,17 +141,8 @@ bool ARCodeFile::Load() return false; } - if (curcode.CodeLen >= 2*64) - { - Log(LogLevel::Error, "AR: code too long!\n"); - CloseFile(f); - return false; - } - - u32 idx = curcode.CodeLen; - curcode.Code[idx+0] = c0; - curcode.Code[idx+1] = c1; - curcode.CodeLen += 2; + curcode.Code.push_back(c0); + curcode.Code.push_back(c1); } } @@ -179,7 +170,7 @@ bool ARCodeFile::Save() ARCode& code = *jt; FileWriteFormatted(f, "CODE %d %s\r\n", code.Enabled, code.Name.c_str()); - for (u32 i = 0; i < code.CodeLen; i+=2) + for (size_t i = 0; i < code.Code.size(); i+=2) { FileWriteFormatted(f, "%08X %08X\r\n", code.Code[i], code.Code[i + 1]); } diff --git a/src/ARCodeFile.h b/src/ARCodeFile.h index 9678926d1f..d0e8255090 100644 --- a/src/ARCodeFile.h +++ b/src/ARCodeFile.h @@ -21,15 +21,14 @@ #include #include - +#include #include "types.h" struct ARCode { std::string Name; bool Enabled; - u32 CodeLen; - u32 Code[2*64]; + std::vector Code; }; typedef std::list ARCodeList; diff --git a/src/AREngine.cpp b/src/AREngine.cpp index 06fbc6be86..62600f9e7a 100644 --- a/src/AREngine.cpp +++ b/src/AREngine.cpp @@ -110,7 +110,7 @@ void RunCheat(ARCode& arcode) for (;;) { - if (code >= &arcode.Code[arcode.CodeLen]) + if (code >= &arcode.Code[arcode.Code.size()]) break; u32 a = *code++; diff --git a/src/frontend/qt_sdl/CheatsDialog.cpp b/src/frontend/qt_sdl/CheatsDialog.cpp index b15fab7d09..1da5c5e550 100644 --- a/src/frontend/qt_sdl/CheatsDialog.cpp +++ b/src/frontend/qt_sdl/CheatsDialog.cpp @@ -162,8 +162,7 @@ void CheatsDialog::on_btnNewARCode_clicked() ARCode code; code.Name = "(new AR code)"; code.Enabled = true; - code.CodeLen = 0; - memset(code.Code, 0, sizeof(code.Code)); + code.Code.clear(); cat.Codes.push_back(code); ARCodeList::iterator id = cat.Codes.end(); id--; @@ -251,7 +250,7 @@ void CheatsDialog::onCheatSelectionChanged(const QItemSelection& sel, const QIte ui->txtCode->setPlaceholderText("(enter AR code here)"); QString codestr = ""; - for (u32 i = 0; i < code.CodeLen; i += 2) + for (size_t i = 0; i < code.Code.size(); i += 2) { u32 c0 = code.Code[i+0]; u32 c1 = code.Code[i+1]; @@ -312,8 +311,8 @@ void CheatsDialog::on_txtCode_textChanged() return; bool error = false; - u32 codeout[2*64]; - u32 codelen = 0; + std::vector codeout; + codeout.reserve(64); QString text = ui->txtCode->document()->toPlainText(); #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) @@ -356,14 +355,8 @@ void CheatsDialog::on_txtCode_textChanged() break; } - if (codelen >= 2*64) - { - error = true; - break; - } - - codeout[codelen++] = c0; - codeout[codelen++] = c1; + codeout.push_back(c0); + codeout.push_back(c1); } ui->btnNewCat->setEnabled(!error); @@ -375,8 +368,7 @@ void CheatsDialog::on_txtCode_textChanged() if (error) return; ARCode& code = *(data.value()); - memcpy(code.Code, codeout, codelen*sizeof(u32)); - code.CodeLen = codelen; + code.Code = codeout; } void ARCodeChecker::highlightBlock(const QString& text)