diff options
-rw-r--r-- | src/server/worldserver/CommandLine/CliRunnable.cpp | 53 |
1 files changed, 25 insertions, 28 deletions
diff --git a/src/server/worldserver/CommandLine/CliRunnable.cpp b/src/server/worldserver/CommandLine/CliRunnable.cpp index 200f78f0957..b20aafef6a1 100644 --- a/src/server/worldserver/CommandLine/CliRunnable.cpp +++ b/src/server/worldserver/CommandLine/CliRunnable.cpp @@ -148,51 +148,48 @@ void CliThread() { fflush(stdout); - char *command_str ; // = fgets(commandbuf, sizeof(commandbuf), stdin); + std::string command; #if TRINITY_PLATFORM == TRINITY_PLATFORM_WINDOWS - char commandbuf[256]; - command_str = fgets(commandbuf, sizeof(commandbuf), stdin); -#else - command_str = readline("TC>"); - rl_bind_key('\t', rl_complete); -#endif - - if (command_str != nullptr) + wchar_t commandbuf[256]; + if (fgetws(commandbuf, sizeof(commandbuf), stdin)) { - for (int x=0; command_str[x]; ++x) - if (command_str[x] == '\r' || command_str[x] == '\n') - { - command_str[x] = 0; - break; - } - - if (!*command_str) + if (!WStrToUtf8(commandbuf, wcslen(commandbuf), command)) { -#if TRINITY_PLATFORM == TRINITY_PLATFORM_WINDOWS printf("TC>"); -#else - free(command_str); -#endif continue; } + } +#else + char* command_str = readline("TC>"); + rl_bind_key('\t', rl_complete); + if (command_str != nullptr) + { + command = command_str; + free(command_str); + } +#endif - std::string command; - if (!consoleToUtf8(command_str, command)) // convert from console encoding to utf8 + if (!command.empty()) + { + std::size_t nextLineIndex = command.find_first_of("\r\n"); + if (nextLineIndex != std::string::npos) { + if (nextLineIndex == 0) + { #if TRINITY_PLATFORM == TRINITY_PLATFORM_WINDOWS - printf("TC>"); -#else - free(command_str); + printf("TC>"); #endif - continue; + continue; + } + + command.erase(nextLineIndex); } fflush(stdout); sWorld->QueueCliCommand(new CliCommandHolder(nullptr, command.c_str(), &utf8print, &commandFinished)); #if TRINITY_PLATFORM != TRINITY_PLATFORM_WINDOWS add_history(command.c_str()); - free(command_str); #endif } else if (feof(stdin)) |