Author: khornicek Date: Fri Feb 17 12:31:32 2012 New Revision: 55670
URL: http://svn.reactos.org/svn/reactos?rev=55670&view=rev Log: [ROSAUTOTEST] If the last chunk of the string sent to StringOut isn't a whole line and forcePrint is set to false, send back what's left after processing. The caller is then responsible for prepending that string next time it calls StringOut. Should fix the rest of debug log corruptions.
Modified: trunk/rostests/rosautotest/CJournaledTestList.cpp trunk/rostests/rosautotest/CWebService.cpp trunk/rostests/rosautotest/CWineTest.cpp trunk/rostests/rosautotest/main.cpp trunk/rostests/rosautotest/precomp.h trunk/rostests/rosautotest/shutdown.cpp trunk/rostests/rosautotest/tools.cpp
Modified: trunk/rostests/rosautotest/CJournaledTestList.cpp URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/CJournaledTest... ============================================================================== --- trunk/rostests/rosautotest/CJournaledTestList.cpp [iso-8859-1] (original) +++ trunk/rostests/rosautotest/CJournaledTestList.cpp [iso-8859-1] Fri Feb 17 12:31:32 2012 @@ -144,7 +144,7 @@ CTestInfo* TestInfo; DWORD BytesWritten;
- StringOut("Writing initial journal file...\n\n"); + StringOut("Writing initial journal file...\n\n", TRUE);
m_ListIterator = 0;
@@ -189,7 +189,7 @@ DWORD BytesRead; DWORD RemainingSize;
- StringOut("Loading journal file...\n\n"); + StringOut("Loading journal file...\n\n", TRUE);
OpenJournal(GENERIC_READ); RemainingSize = GetFileSize(m_hJournal, NULL);
Modified: trunk/rostests/rosautotest/CWebService.cpp URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/CWebService.cp... ============================================================================== --- trunk/rostests/rosautotest/CWebService.cpp [iso-8859-1] (original) +++ trunk/rostests/rosautotest/CWebService.cpp [iso-8859-1] Fri Feb 17 12:31:32 2012 @@ -207,7 +207,7 @@ Response.reset(DoRequest(Data));
ss << "The server responded:" << endl << Response << endl; - StringOut(ss.str()); + StringOut(ss.str(), TRUE);
if(strcmp(Response, "OK")) EXCEPTION("Aborted!\n");
Modified: trunk/rostests/rosautotest/CWineTest.cpp URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/CWineTest.cpp?... ============================================================================== --- trunk/rostests/rosautotest/CWineTest.cpp [iso-8859-1] (original) +++ trunk/rostests/rosautotest/CWineTest.cpp [iso-8859-1] Fri Feb 17 12:31:32 2012 @@ -266,9 +266,10 @@ stringstream ss, ssFinish; DWORD StartTime = GetTickCount(); float TotalTime; + string tailString;
ss << "Running Wine Test, Module: " << TestInfo->Module << ", Test: " << TestInfo->Test << endl; - StringOut(ss.str()); + StringOut(ss.str(), TRUE);
StartTime = GetTickCount();
@@ -299,9 +300,9 @@ if(!ReadFile(m_hReadPipe, Buffer, BytesAvailable, &Temp, NULL)) FATAL("ReadFile failed for the test run\n");
- /* Output all test output through StringOut, even while the test is still running */ + /* Output text through StringOut, even while the test is still running */ Buffer[BytesAvailable] = 0; - StringOut(string(Buffer)); + tailString = StringOut(tailString.append(string(Buffer)), FALSE);
if(Configuration.DoSubmit()) TestInfo->Log += Buffer; @@ -310,10 +311,14 @@ while(!BreakLoop); }
+ /* Print what's left */ + if(!tailString.empty()) + StringOut(tailString, TRUE); + TotalTime = ((float)GetTickCount() - StartTime)/1000; ssFinish << "Test " << TestInfo->Test << " completed in "; ssFinish << setprecision(2) << fixed << TotalTime << " seconds." << endl; - StringOut(ssFinish.str()); + StringOut(ssFinish.str(), TRUE); }
/** @@ -370,6 +375,6 @@ if(Configuration.DoSubmit() && !TestInfo->Log.empty()) WebService->Submit("wine", TestInfo);
- StringOut("\n\n"); - } -} + StringOut("\n\n", TRUE); + } +}
Modified: trunk/rostests/rosautotest/main.cpp URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/main.cpp?rev=5... ============================================================================== --- trunk/rostests/rosautotest/main.cpp [iso-8859-1] (original) +++ trunk/rostests/rosautotest/main.cpp [iso-8859-1] Fri Feb 17 12:31:32 2012 @@ -60,7 +60,7 @@
ss << "\n\nSystem uptime " << setprecision(2) << fixed ; ss << ((float)GetTickCount()/1000) << " seconds\n"; - StringOut(ss.str()); + StringOut(ss.str(), TRUE);
/* Run the tests */ WineTest.Run(); @@ -76,7 +76,7 @@ } catch(CSimpleException& e) { - StringOut(e.GetMessage()); + StringOut(e.GetMessage(), TRUE); } catch(CFatalException& e) { @@ -87,7 +87,7 @@ << "File: " << e.GetFile() << endl << "Line: " << e.GetLine() << endl << "Last Win32 Error: " << GetLastError() << endl; - StringOut(ss.str()); + StringOut(ss.str(), TRUE); }
/* For sysreg2 to notice if rosautotest itself failed */
Modified: trunk/rostests/rosautotest/precomp.h URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/precomp.h?rev=... ============================================================================== --- trunk/rostests/rosautotest/precomp.h [iso-8859-1] (original) +++ trunk/rostests/rosautotest/precomp.h [iso-8859-1] Fri Feb 17 12:31:32 2012 @@ -51,7 +51,7 @@ string EscapeString(const string& Input); string GetINIValue(PCWCH AppName, PCWCH KeyName, PCWCH FileName); bool IsNumber(const char* Input); -void StringOut(const string& String); +string StringOut(const string& String, const BOOL forcePrint); string UnicodeToAscii(PCWSTR UnicodeString); string UnicodeToAscii(const wstring& UnicodeString);
Modified: trunk/rostests/rosautotest/shutdown.cpp URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/shutdown.cpp?r... ============================================================================== --- trunk/rostests/rosautotest/shutdown.cpp [iso-8859-1] (original) +++ trunk/rostests/rosautotest/shutdown.cpp [iso-8859-1] Fri Feb 17 12:31:32 2012 @@ -20,14 +20,14 @@
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) { - StringOut("OpenProcessToken failed\n"); + StringOut("OpenProcessToken failed\n", TRUE); return false; }
/* Get the LUID for the Shutdown privilege */ if (!LookupPrivilegeValueW(NULL, SE_SHUTDOWN_NAME, &Privileges.Privileges[0].Luid)) { - StringOut("LookupPrivilegeValue failed\n"); + StringOut("LookupPrivilegeValue failed\n", TRUE); return false; }
@@ -37,14 +37,14 @@
if (!AdjustTokenPrivileges(hToken, FALSE, &Privileges, 0, NULL, NULL)) { - StringOut("AdjustTokenPrivileges failed\n"); + StringOut("AdjustTokenPrivileges failed\n", TRUE); return false; }
/* Finally shut down the system */ if(!ExitWindowsEx(EWX_POWEROFF, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED)) { - StringOut("ExitWindowsEx failed\n"); + StringOut("ExitWindowsEx failed\n", TRUE); return false; }
Modified: trunk/rostests/rosautotest/tools.cpp URL: http://svn.reactos.org/svn/reactos/trunk/rostests/rosautotest/tools.cpp?rev=... ============================================================================== --- trunk/rostests/rosautotest/tools.cpp [iso-8859-1] (original) +++ trunk/rostests/rosautotest/tools.cpp [iso-8859-1] Fri Feb 17 12:31:32 2012 @@ -92,8 +92,8 @@ * @param String * The std::string to output */ -void -StringOut(const string& String) +string +StringOut(const string& String, const BOOL forcePrint) { char DbgString[DBGPRINT_BUFSIZE + 1]; size_t i, start = 0, last_newline = 0, size = 0, curr_pos = 0; @@ -122,7 +122,7 @@ if((curr_pos - start) >= DBGPRINT_BUFSIZE) { /* No newlines so far, or the string just fits */ - if(last_newline <= start || (curr_pos - start) == DBGPRINT_BUFSIZE) + 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); @@ -143,14 +143,24 @@ } }
- /* The rest of the string is <= DBGPRINT_BUFSIZE so just print it*/ - size = curr_pos - start; - memcpy(DbgString, NewString.c_str() + start, size); - DbgString[size] = 0; - DbgPrint(DbgString); - /* Output the string */ cout << NewString; + + size = curr_pos - start; + + /* Only print if forced to or if the rest is a whole line */ + if(forcePrint == true || NewString[curr_pos - 1] == '\n') + { + memcpy(DbgString, NewString.c_str() + start, size); + DbgString[size] = 0; + DbgPrint(DbgString); + + NewString.clear(); + return NewString; + } + + /* Return the remaining chunk */ + return NewString.substr(start, size); }
/**