https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a12d029ec0bb9b33c4e71…
commit a12d029ec0bb9b33c4e7198a18e43a03d677a0ad
Author: Victor Perevertkin <victor.perevertkin(a)reactos.org>
AuthorDate: Thu Apr 9 03:04:44 2020 +0300
Commit: Victor Perevertkin <victor.perevertkin(a)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(a)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"