(svn r26496) -Fix (r1547): Reading console input on dedicated server relied on unspecified behaviour.

This commit is contained in:
frosch 2014-04-24 17:49:31 +00:00
parent 411cca2dc3
commit 0e8bfeb7a9
2 changed files with 5 additions and 4 deletions

View File

@ -56,7 +56,7 @@
#define gets SAFEGUARD_DO_NOT_USE_THIS_METHOD
/* No clear replacement. */
//#define strtok SAFEGUARD_DO_NOT_USE_THIS_METHOD
#define strtok SAFEGUARD_DO_NOT_USE_THIS_METHOD
/*
* Possible future methods to mark unsafe, though needs more thought:

View File

@ -99,6 +99,9 @@ static void WINAPI CheckForConsoleInput()
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
for (;;) {
ReadFile(hStdin, _win_console_thread_buffer, lengthof(_win_console_thread_buffer), &nb, NULL);
if (nb >= lengthof(_win_console_thread_buffer)) nb = lengthof(_win_console_thread_buffer) - 1;
_win_console_thread_buffer[nb] = '\0';
/* Signal input waiting that input is read and wait for it being handled
* SignalObjectAndWait() should be used here, but it's unsupported in Win98< */
SetEvent(_hInputReady);
@ -245,9 +248,7 @@ static void DedicatedHandleKeyInput()
SetEvent(_hWaitForInputHandling);
#endif
/* strtok() does not 'forget' \r\n if the string starts with it,
* so we have to manually remove that! */
strtok(input_line, "\r\n");
/* Remove trailing \r or \n */
for (char *c = input_line; *c != '\0'; c++) {
if (*c == '\n' || *c == '\r' || c == lastof(input_line)) {
*c = '\0';