diff --git a/rostests/rosautotest/CWineTest.cpp b/rostests/rosautotest/CWineTest.cpp index 5410d867f6f..4df9c0184a7 100644 --- a/rostests/rosautotest/CWineTest.cpp +++ b/rostests/rosautotest/CWineTest.cpp @@ -276,7 +276,6 @@ CWineTest::RunTest(CTestInfo* TestInfo) stringstream ss, ssFinish; DWORD StartTime; float TotalTime; - string tailString; CPipe Pipe; char Buffer[1024]; @@ -295,7 +294,7 @@ CWineTest::RunTest(CTestInfo* TestInfo) { /* Output text through StringOut, even while the test is still running */ Buffer[BytesAvailable] = 0; - tailString = StringOut(tailString.append(string(Buffer)), false); + StringOut(string(Buffer)); if(Configuration.DoSubmit()) TestInfo->Log += Buffer; @@ -305,17 +304,10 @@ CWineTest::RunTest(CTestInfo* TestInfo) } catch(CTestException& e) { - if(!tailString.empty()) - StringOut(tailString); - tailString.clear(); StringOut(e.GetMessage()); TestInfo->Log += e.GetMessage(); } - /* Print what's left */ - if(!tailString.empty()) - StringOut(tailString); - TotalTime = ((float)GetTickCount() - StartTime)/1000; ssFinish << "Test " << TestInfo->Test << " completed in "; ssFinish << setprecision(2) << fixed << TotalTime << " seconds." << endl; diff --git a/rostests/rosautotest/precomp.h b/rostests/rosautotest/precomp.h index fa752b814e9..15b42872ee6 100644 --- a/rostests/rosautotest/precomp.h +++ b/rostests/rosautotest/precomp.h @@ -69,7 +69,7 @@ string EscapeString(const char* Input); string EscapeString(const string& Input); string GetINIValue(PCWCH AppName, PCWCH KeyName, PCWCH FileName); bool IsNumber(const char* Input); -string StringOut(const string& String, bool forcePrint = true); +void StringOut(const string& InputString); string UnicodeToAscii(PCWSTR UnicodeString); string UnicodeToAscii(const wstring& UnicodeString); diff --git a/rostests/rosautotest/tools.cpp b/rostests/rosautotest/tools.cpp index c925c145ad7..bfb512da442 100644 --- a/rostests/rosautotest/tools.cpp +++ b/rostests/rosautotest/tools.cpp @@ -2,12 +2,11 @@ * PROJECT: ReactOS Automatic Testing Utility * LICENSE: GNU GPLv2 or any later version as published by the Free Software Foundation * PURPOSE: Various helper functions - * COPYRIGHT: Copyright 2008-2009 Colin Finck + * COPYRIGHT: Copyright 2008-2015 Colin Finck */ #include "precomp.h" -#define DBGPRINT_BUFSIZE 511 static const char HexCharacters[] = "0123456789ABCDEF"; /** @@ -87,85 +86,43 @@ IsNumber(const char* Input) /** * Outputs a string through the standard output and the debug output. - * The string may have LF or CRLF line endings. + * The input string may have LF or CRLF line endings. * - * @param String + * @param InputString * The std::string to output */ -string -StringOut(const string& String, bool forcePrint) +void +StringOut(const string& InputString) { - char DbgString[DBGPRINT_BUFSIZE + 1]; - size_t i, start = 0, last_newline = 0, size = 0, curr_pos = 0; - string NewString; + const char* pInput = InputString.c_str(); + char* OutputString = new char[InputString.size() + 1]; + char* pOutput = OutputString; /* Unify the line endings (the piped output of the tests may use CRLF) */ - for(i = 0; i < String.size(); i++) + while (*pInput) { /* If this is a CRLF line-ending, only copy a \n to the new string and skip the next character */ - if(String[i] == '\r' && String[i + 1] == '\n') + if (*pInput == '\r' && *(pInput + 1) == '\n') { - NewString += '\n'; - ++i; + *pOutput = '\n'; + ++pInput; } else { - /* Otherwise copy the string */ - NewString += String[i]; + *pOutput = *pInput; } - curr_pos = NewString.size(); - - /* Try to print whole lines but obey the 512 bytes chunk size limit*/ - if(NewString[curr_pos - 1] == '\n' || (curr_pos - start) == DBGPRINT_BUFSIZE) - { - if((curr_pos - start) >= DBGPRINT_BUFSIZE) - { - /* No newlines so far, or the string just fits */ - if(last_newline <= start || ((curr_pos - start == DBGPRINT_BUFSIZE) && NewString[curr_pos - 1] == '\n')) - { - size = curr_pos - start; - memcpy(DbgString, NewString.c_str() + start, size); - start = curr_pos; - } - else - { - size = last_newline - start; - memcpy(DbgString, NewString.c_str() + start, size); - start = last_newline; - } - - DbgString[size] = 0; - OutputDebugStringA(DbgString); - } - - last_newline = curr_pos; - } + ++pInput; + ++pOutput; } - size = curr_pos - start; + *pOutput = 0; + OutputDebugStringA(OutputString); - /* Only print if forced to or if the rest is a whole line */ - if(forcePrint == true || NewString[curr_pos - 1] == '\n') - { - /* Output the whole string */ - if(Configuration.DoPrint()) - cout << NewString; + if (Configuration.DoPrint()) + cout << OutputString << flush; - memcpy(DbgString, NewString.c_str() + start, size); - DbgString[size] = 0; - OutputDebugStringA(DbgString); - - NewString.clear(); - return NewString; - } - - /* Output full lines only */ - if(Configuration.DoPrint()) - cout << NewString.substr(0, start); - - /* Return the remaining chunk */ - return NewString.substr(start, size); + delete[] OutputString; } /**