diff --git a/src/console.cpp b/src/console.cpp --- a/src/console.cpp +++ b/src/console.cpp @@ -213,8 +213,7 @@ static std::string RemoveUnderscores(std */ static void IConsoleAliasExec(const IConsoleAlias *alias, byte tokencount, char *tokens[ICON_TOKEN_COUNT], const uint recurse_count) { - char alias_buffer[ICON_MAX_STREAMSIZE] = { '\0' }; - char *alias_stream = alias_buffer; + std::string alias_buffer; Debug(console, 6, "Requested command is an alias; parsing..."); @@ -226,14 +225,13 @@ static void IConsoleAliasExec(const ICon for (const char *cmdptr = alias->cmdline.c_str(); *cmdptr != '\0'; cmdptr++) { switch (*cmdptr) { case '\'': // ' will double for "" - alias_stream = strecpy(alias_stream, "\"", lastof(alias_buffer)); + alias_buffer += '\"'; break; case ';': // Cmd separator; execute previous and start new command - IConsoleCmdExec(alias_buffer, recurse_count); + IConsoleCmdExec(alias_buffer.c_str(), recurse_count); - alias_stream = alias_buffer; - *alias_stream = '\0'; // Make sure the new command is terminated. + alias_buffer.clear(); cmdptr++; break; @@ -243,21 +241,21 @@ static void IConsoleAliasExec(const ICon switch (*cmdptr) { case '+': { // All parameters separated: "[param 1]" "[param 2]" for (uint i = 0; i != tokencount; i++) { - if (i != 0) alias_stream = strecpy(alias_stream, " ", lastof(alias_buffer)); - alias_stream = strecpy(alias_stream, "\"", lastof(alias_buffer)); - alias_stream = strecpy(alias_stream, tokens[i], lastof(alias_buffer)); - alias_stream = strecpy(alias_stream, "\"", lastof(alias_buffer)); + if (i != 0) alias_buffer += ' '; + alias_buffer += '\"'; + alias_buffer += tokens[i]; + alias_buffer += '\"'; } break; } case '!': { // Merge the parameters to one: "[param 1] [param 2] [param 3...]" - alias_stream = strecpy(alias_stream, "\"", lastof(alias_buffer)); + alias_buffer += '\"'; for (uint i = 0; i != tokencount; i++) { - if (i != 0) alias_stream = strecpy(alias_stream, " ", lastof(alias_buffer)); - alias_stream = strecpy(alias_stream, tokens[i], lastof(alias_buffer)); + if (i != 0) alias_buffer += " "; + alias_buffer += tokens[i]; } - alias_stream = strecpy(alias_stream, "\"", lastof(alias_buffer)); + alias_buffer += '\"'; break; } @@ -270,27 +268,26 @@ static void IConsoleAliasExec(const ICon return; } - alias_stream = strecpy(alias_stream, "\"", lastof(alias_buffer)); - alias_stream = strecpy(alias_stream, tokens[param], lastof(alias_buffer)); - alias_stream = strecpy(alias_stream, "\"", lastof(alias_buffer)); + alias_buffer += '\"'; + alias_buffer += tokens[param]; + alias_buffer += '\"'; break; } } break; default: - *alias_stream++ = *cmdptr; - *alias_stream = '\0'; + alias_buffer += *cmdptr; break; } - if (alias_stream >= lastof(alias_buffer) - 1) { + if (alias_buffer.size() >= ICON_MAX_STREAMSIZE - 1) { IConsolePrint(CC_ERROR, "Requested alias execution would overflow execution buffer."); return; } } - IConsoleCmdExec(alias_buffer, recurse_count); + IConsoleCmdExec(alias_buffer.c_str(), recurse_count); } /**