https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a12d029ec0bb9b33c4e719...
commit a12d029ec0bb9b33c4e7198a18e43a03d677a0ad Author: Victor Perevertkin victor.perevertkin@reactos.org AuthorDate: Thu Apr 9 03:04:44 2020 +0300 Commit: Victor Perevertkin victor.perevertkin@reactos.org CommitDate: Thu Apr 9 03:04:44 2020 +0300
[ROSAUTOTEST] Revert 9ff3adb. This fixes MSVC build.
This reverts commit 9ff3adb7d7c6636a1d040d8e53f7203e9d1815a3. --- modules/rostests/rosautotest/CMakeLists.txt | 1 - modules/rostests/rosautotest/CProcess.cpp | 6 +-- modules/rostests/rosautotest/CWebService.cpp | 30 ++++++------- modules/rostests/rosautotest/auto_array_ptr.h | 64 +++++++++++++++++++++++++++ modules/rostests/rosautotest/precomp.h | 2 +- 5 files changed, 83 insertions(+), 20 deletions(-)
diff --git a/modules/rostests/rosautotest/CMakeLists.txt b/modules/rostests/rosautotest/CMakeLists.txt index f6b29583f6d..21f0cdd5e23 100644 --- a/modules/rostests/rosautotest/CMakeLists.txt +++ b/modules/rostests/rosautotest/CMakeLists.txt @@ -21,7 +21,6 @@ list(APPEND SOURCE precomp.h)
add_executable(rosautotest ${SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/rosautotestmsg.rc) -set_property(TARGET rosautotest PROPERTY CXX_STANDARD 11) set_module_type(rosautotest win32cui UNICODE) add_importlibs(rosautotest advapi32 shell32 user32 wininet msvcrt kernel32 ntdll) add_pch(rosautotest precomp.h SOURCE) diff --git a/modules/rostests/rosautotest/CProcess.cpp b/modules/rostests/rosautotest/CProcess.cpp index b7ca0603817..e462456564c 100644 --- a/modules/rostests/rosautotest/CProcess.cpp +++ b/modules/rostests/rosautotest/CProcess.cpp @@ -18,11 +18,11 @@ */ CProcess::CProcess(const wstring& CommandLine, LPSTARTUPINFOW StartupInfo) { - unique_ptr<WCHAR[]> CommandLinePtr(new WCHAR[CommandLine.size() + 1]); + auto_array_ptr<WCHAR> CommandLinePtr(new WCHAR[CommandLine.size() + 1]);
- wcscpy(CommandLinePtr.get(), CommandLine.c_str()); + wcscpy(CommandLinePtr, CommandLine.c_str());
- if(!CreateProcessW(NULL, CommandLinePtr.get(), NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, StartupInfo, &m_ProcessInfo)) + if(!CreateProcessW(NULL, CommandLinePtr, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, StartupInfo, &m_ProcessInfo)) TESTEXCEPTION("CreateProcessW failed\n"); }
diff --git a/modules/rostests/rosautotest/CWebService.cpp b/modules/rostests/rosautotest/CWebService.cpp index 59d856a52d1..85ead6d9135 100644 --- a/modules/rostests/rosautotest/CWebService.cpp +++ b/modules/rostests/rosautotest/CWebService.cpp @@ -66,7 +66,7 @@ CWebService::DoRequest(const string& InputData) { const WCHAR szHeaders[] = L"Content-Type: application/x-www-form-urlencoded";
- unique_ptr<char[]> Data; + auto_array_ptr<char> Data; DWORD DataLength;
/* Post our test results to the web service */ @@ -76,9 +76,9 @@ CWebService::DoRequest(const string& InputData) FATAL("HttpOpenRequestW failed\n");
Data.reset(new char[InputData.size() + 1]); - strcpy(Data.get(), InputData.c_str()); + strcpy(Data, InputData.c_str());
- if(!HttpSendRequestW(m_hHTTPRequest, szHeaders, lstrlenW(szHeaders), Data.get(), (DWORD)InputData.size())) + if(!HttpSendRequestW(m_hHTTPRequest, szHeaders, lstrlenW(szHeaders), Data, (DWORD)InputData.size())) FATAL("HttpSendRequestW failed\n");
/* Get the response */ @@ -87,7 +87,7 @@ CWebService::DoRequest(const string& InputData)
Data.reset(new char[DataLength + 1]);
- if(!InternetReadFile(m_hHTTPRequest, Data.get(), DataLength, &DataLength)) + if(!InternetReadFile(m_hHTTPRequest, Data, DataLength, &DataLength)) FATAL("InternetReadFile failed\n");
Data[DataLength] = 0; @@ -104,7 +104,7 @@ CWebService::DoRequest(const string& InputData) void CWebService::Finish(const char* TestType) { - unique_ptr<char[]> Response; + auto_array_ptr<char> Response; string Data; stringstream ss;
@@ -120,9 +120,9 @@ CWebService::Finish(const char* TestType)
Response.reset(DoRequest(Data));
- if (strcmp(Response.get(), "OK")) + if (strcmp(Response, "OK")) { - ss << "When finishing the test run, the server responded:" << endl << Response.get() << endl; + ss << "When finishing the test run, the server responded:" << endl << Response << endl; SSEXCEPTION; } } @@ -178,7 +178,7 @@ CWebService::GetTestID(const char* TestType) PCHAR CWebService::GetSuiteID(const char* TestType, CTestInfo* TestInfo) { - unique_ptr<char[]> SuiteID; + auto_array_ptr<char> SuiteID; string Data;
Data = "action=getsuiteid"; @@ -193,11 +193,11 @@ CWebService::GetSuiteID(const char* TestType, CTestInfo* TestInfo) SuiteID.reset(DoRequest(Data));
/* Verify that this is really a number */ - if(!IsNumber(SuiteID.get())) + if(!IsNumber(SuiteID)) { stringstream ss;
- ss << "Expected Suite ID, but received:" << endl << SuiteID.get() << endl; + ss << "Expected Suite ID, but received:" << endl << SuiteID << endl; SSEXCEPTION; }
@@ -216,8 +216,8 @@ CWebService::GetSuiteID(const char* TestType, CTestInfo* TestInfo) void CWebService::Submit(const char* TestType, CTestInfo* TestInfo) { - unique_ptr<char[]> Response; - unique_ptr<char[]> SuiteID; + auto_array_ptr<char> Response; + auto_array_ptr<char> SuiteID; string Data; stringstream ss;
@@ -233,15 +233,15 @@ CWebService::Submit(const char* TestType, CTestInfo* TestInfo) Data += "&testid="; Data += m_TestID; Data += "&suiteid="; - Data += SuiteID.get(); + Data += SuiteID; Data += "&log="; Data += EscapeString(TestInfo->Log);
Response.reset(DoRequest(Data));
- if (strcmp(Response.get(), "OK")) + if (strcmp(Response, "OK")) { - ss << "When submitting the result, the server responded:" << endl << Response.get() << endl; + ss << "When submitting the result, the server responded:" << endl << Response << endl; SSEXCEPTION; } } diff --git a/modules/rostests/rosautotest/auto_array_ptr.h b/modules/rostests/rosautotest/auto_array_ptr.h new file mode 100644 index 00000000000..f53c3b04552 --- /dev/null +++ b/modules/rostests/rosautotest/auto_array_ptr.h @@ -0,0 +1,64 @@ +/* + * PROJECT: ReactOS Automatic Testing Utility + * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) + * PURPOSE: Template similar to std::auto_ptr for arrays + * COPYRIGHT: Copyright 2009 Colin Finck (colin@reactos.org) + */ + +template<typename Type> +class auto_array_ptr +{ +private: + Type* m_Ptr; + +public: + typedef Type element_type; + + /* Construct an auto_array_ptr from a pointer */ + explicit auto_array_ptr(Type* Ptr = 0) throw() + : m_Ptr(Ptr) + { + } + + /* Construct an auto_array_ptr from an existing auto_array_ptr */ + auto_array_ptr(auto_array_ptr<Type>& Right) throw() + : m_Ptr(Right.release()) + { + } + + /* Destruct the auto_array_ptr and remove the corresponding array from memory */ + ~auto_array_ptr() throw() + { + delete[] m_Ptr; + } + + /* Get the pointer address */ + Type* get() const throw() + { + return m_Ptr; + } + + /* Release the pointer */ + Type* release() throw() + { + Type* Tmp = m_Ptr; + m_Ptr = 0; + + return Tmp; + } + + /* Reset to a new pointer */ + void reset(Type* Ptr = 0) throw() + { + if(Ptr != m_Ptr) + delete[] m_Ptr; + + m_Ptr = Ptr; + } + + /* Simulate all the functionality of real arrays by casting the auto_array_ptr to Type* on demand */ + operator Type*() const throw() + { + return m_Ptr; + } +}; diff --git a/modules/rostests/rosautotest/precomp.h b/modules/rostests/rosautotest/precomp.h index 0f46388a5e2..5e0f05b5794 100644 --- a/modules/rostests/rosautotest/precomp.h +++ b/modules/rostests/rosautotest/precomp.h @@ -33,7 +33,7 @@ using namespace std; #include <reactos/buildno.h>
/* Class includes */ -// #include "auto_array_ptr.h" +#include "auto_array_ptr.h" #include "CConfiguration.h" #include "CFatalException.h" #include "CInvalidParameterException.h"