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 CommandLinePtr(new WCHAR[CommandLine.size() + 1]); + auto_array_ptr 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 Data; + auto_array_ptr 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 Response; + auto_array_ptr 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 SuiteID; + auto_array_ptr 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 Response; - unique_ptr SuiteID; + auto_array_ptr Response; + auto_array_ptr 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 +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& 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 /* Class includes */ -// #include "auto_array_ptr.h" +#include "auto_array_ptr.h" #include "CConfiguration.h" #include "CFatalException.h" #include "CInvalidParameterException.h"