aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Foundation/src/Process_WINCE.cpp
diff options
context:
space:
mode:
authororivej <orivej@yandex-team.ru>2022-02-10 16:45:01 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:45:01 +0300
commit2d37894b1b037cf24231090eda8589bbb44fb6fc (patch)
treebe835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/libs/poco/Foundation/src/Process_WINCE.cpp
parent718c552901d703c502ccbefdfc3c9028d608b947 (diff)
downloadydb-2d37894b1b037cf24231090eda8589bbb44fb6fc.tar.gz
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/poco/Foundation/src/Process_WINCE.cpp')
-rw-r--r--contrib/libs/poco/Foundation/src/Process_WINCE.cpp446
1 files changed, 223 insertions, 223 deletions
diff --git a/contrib/libs/poco/Foundation/src/Process_WINCE.cpp b/contrib/libs/poco/Foundation/src/Process_WINCE.cpp
index dfce9e5de2..e640f3be3d 100644
--- a/contrib/libs/poco/Foundation/src/Process_WINCE.cpp
+++ b/contrib/libs/poco/Foundation/src/Process_WINCE.cpp
@@ -1,223 +1,223 @@
-//
-// Process_WINCE.cpp
-//
-// Library: Foundation
-// Package: Processes
-// Module: Process
-//
-// Copyright (c) 2004-2010, Applied Informatics Software Engineering GmbH.
-// and Contributors.
-//
-// SPDX-License-Identifier: BSL-1.0
-//
-
-
-#include "Poco/Process_WINCE.h"
-#include "Poco/Exception.h"
-#include "Poco/NumberFormatter.h"
-#include "Poco/NamedEvent.h"
-#include "Poco/UnicodeConverter.h"
-#include "Poco/Pipe.h"
-
-
-namespace Poco {
-
-
-//
-// ProcessHandleImpl
-//
-ProcessHandleImpl::ProcessHandleImpl(HANDLE hProcess, UInt32 pid):
- _hProcess(hProcess),
- _pid(pid)
-{
-}
-
-
-ProcessHandleImpl::~ProcessHandleImpl()
-{
- closeHandle();
-}
-
-void ProcessHandleImpl::closeHandle()
-{
- if (_hProcess)
- {
- CloseHandle(_hProcess);
- _hProcess = NULL;
- }
-}
-
-UInt32 ProcessHandleImpl::id() const
-{
- return _pid;
-}
-
-
-HANDLE ProcessHandleImpl::process() const
-{
- return _hProcess;
-}
-
-
-int ProcessHandleImpl::wait() const
-{
- DWORD rc = WaitForSingleObject(_hProcess, INFINITE);
- if (rc != WAIT_OBJECT_0)
- throw SystemException("Wait failed for process", NumberFormatter::format(_pid));
-
- DWORD exitCode;
- if (GetExitCodeProcess(_hProcess, &exitCode) == 0)
- throw SystemException("Cannot get exit code for process", NumberFormatter::format(_pid));
-
- return exitCode;
-}
-
-
-//
-// ProcessImpl
-//
-ProcessImpl::PIDImpl ProcessImpl::idImpl()
-{
- return GetCurrentProcessId();
-}
-
-
-void ProcessImpl::timesImpl(long& userTime, long& kernelTime)
-{
- FILETIME ftCreation;
- FILETIME ftExit;
- FILETIME ftKernel;
- FILETIME ftUser;
-
- if (GetThreadTimes(GetCurrentThread(), &ftCreation, &ftExit, &ftKernel, &ftUser) != 0)
- {
- ULARGE_INTEGER time;
- time.LowPart = ftKernel.dwLowDateTime;
- time.HighPart = ftKernel.dwHighDateTime;
- kernelTime = long(time.QuadPart/10000000L);
- time.LowPart = ftUser.dwLowDateTime;
- time.HighPart = ftUser.dwHighDateTime;
- userTime = long(time.QuadPart/10000000L);
- }
- else
- {
- userTime = kernelTime = -1;
- }
-}
-
-
-ProcessHandleImpl* ProcessImpl::launchImpl(const std::string& command, const ArgsImpl& args, const std::string& initialDirectory, Pipe* inPipe, Pipe* outPipe, Pipe* errPipe, const EnvImpl& env)
-{
- std::wstring ucommand;
- UnicodeConverter::toUTF16(command, ucommand);
-
- std::string commandLine;
- for (ArgsImpl::const_iterator it = args.begin(); it != args.end(); ++it)
- {
- if (it != args.begin()) commandLine.append(" ");
- commandLine.append(*it);
- }
-
- std::wstring ucommandLine;
- UnicodeConverter::toUTF16(commandLine, ucommandLine);
-
- PROCESS_INFORMATION processInfo;
- BOOL rc = CreateProcessW(
- ucommand.c_str(),
- const_cast<wchar_t*>(ucommandLine.c_str()),
- NULL,
- NULL,
- FALSE,
- 0,
- NULL,
- NULL,
- NULL/*&startupInfo*/,
- &processInfo
- );
-
- if (rc)
- {
- CloseHandle(processInfo.hThread);
- return new ProcessHandleImpl(processInfo.hProcess, processInfo.dwProcessId);
- }
- else throw SystemException("Cannot launch process", command);
-}
-
-
-void ProcessImpl::killImpl(ProcessHandleImpl& handle)
-{
- if (handle.process())
- {
- if (TerminateProcess(handle.process(), 0) == 0)
- {
- handle.closeHandle();
- throw SystemException("cannot kill process");
- }
- handle.closeHandle();
- }
-}
-
-
-void ProcessImpl::killImpl(PIDImpl pid)
-{
- HANDLE hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
- if (hProc)
- {
- if (TerminateProcess(hProc, 0) == 0)
- {
- CloseHandle(hProc);
- throw SystemException("cannot kill process");
- }
- CloseHandle(hProc);
- }
- else
- {
- switch (GetLastError())
- {
- case ERROR_ACCESS_DENIED:
- throw NoPermissionException("cannot kill process");
- case ERROR_NOT_FOUND:
- throw NotFoundException("cannot kill process");
- default:
- throw SystemException("cannot kill process");
- }
- }
-}
-
-
-bool ProcessImpl::isRunningImpl(const ProcessHandleImpl& handle)
-{
- bool result = true;
- DWORD exitCode;
- BOOL rc = GetExitCodeProcess(handle.process(), &exitCode);
- if (!rc || exitCode != STILL_ACTIVE) result = false;
- return result;
-}
-
-
-bool ProcessImpl::isRunningImpl(PIDImpl pid)
-{
- HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
- bool result = true;
- DWORD exitCode;
- BOOL rc = GetExitCodeProcess(hProc, &exitCode);
- if (!rc || exitCode != STILL_ACTIVE) result = false;
- return result;}
-
-
-void ProcessImpl::requestTerminationImpl(PIDImpl pid)
-{
- NamedEvent ev(terminationEventName(pid));
- ev.set();
-}
-
-
-std::string ProcessImpl::terminationEventName(PIDImpl pid)
-{
- std::string evName("POCOTRM");
- NumberFormatter::appendHex(evName, pid, 8);
- return evName;
-}
-
-
-} // namespace Poco
+//
+// Process_WINCE.cpp
+//
+// Library: Foundation
+// Package: Processes
+// Module: Process
+//
+// Copyright (c) 2004-2010, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#include "Poco/Process_WINCE.h"
+#include "Poco/Exception.h"
+#include "Poco/NumberFormatter.h"
+#include "Poco/NamedEvent.h"
+#include "Poco/UnicodeConverter.h"
+#include "Poco/Pipe.h"
+
+
+namespace Poco {
+
+
+//
+// ProcessHandleImpl
+//
+ProcessHandleImpl::ProcessHandleImpl(HANDLE hProcess, UInt32 pid):
+ _hProcess(hProcess),
+ _pid(pid)
+{
+}
+
+
+ProcessHandleImpl::~ProcessHandleImpl()
+{
+ closeHandle();
+}
+
+void ProcessHandleImpl::closeHandle()
+{
+ if (_hProcess)
+ {
+ CloseHandle(_hProcess);
+ _hProcess = NULL;
+ }
+}
+
+UInt32 ProcessHandleImpl::id() const
+{
+ return _pid;
+}
+
+
+HANDLE ProcessHandleImpl::process() const
+{
+ return _hProcess;
+}
+
+
+int ProcessHandleImpl::wait() const
+{
+ DWORD rc = WaitForSingleObject(_hProcess, INFINITE);
+ if (rc != WAIT_OBJECT_0)
+ throw SystemException("Wait failed for process", NumberFormatter::format(_pid));
+
+ DWORD exitCode;
+ if (GetExitCodeProcess(_hProcess, &exitCode) == 0)
+ throw SystemException("Cannot get exit code for process", NumberFormatter::format(_pid));
+
+ return exitCode;
+}
+
+
+//
+// ProcessImpl
+//
+ProcessImpl::PIDImpl ProcessImpl::idImpl()
+{
+ return GetCurrentProcessId();
+}
+
+
+void ProcessImpl::timesImpl(long& userTime, long& kernelTime)
+{
+ FILETIME ftCreation;
+ FILETIME ftExit;
+ FILETIME ftKernel;
+ FILETIME ftUser;
+
+ if (GetThreadTimes(GetCurrentThread(), &ftCreation, &ftExit, &ftKernel, &ftUser) != 0)
+ {
+ ULARGE_INTEGER time;
+ time.LowPart = ftKernel.dwLowDateTime;
+ time.HighPart = ftKernel.dwHighDateTime;
+ kernelTime = long(time.QuadPart/10000000L);
+ time.LowPart = ftUser.dwLowDateTime;
+ time.HighPart = ftUser.dwHighDateTime;
+ userTime = long(time.QuadPart/10000000L);
+ }
+ else
+ {
+ userTime = kernelTime = -1;
+ }
+}
+
+
+ProcessHandleImpl* ProcessImpl::launchImpl(const std::string& command, const ArgsImpl& args, const std::string& initialDirectory, Pipe* inPipe, Pipe* outPipe, Pipe* errPipe, const EnvImpl& env)
+{
+ std::wstring ucommand;
+ UnicodeConverter::toUTF16(command, ucommand);
+
+ std::string commandLine;
+ for (ArgsImpl::const_iterator it = args.begin(); it != args.end(); ++it)
+ {
+ if (it != args.begin()) commandLine.append(" ");
+ commandLine.append(*it);
+ }
+
+ std::wstring ucommandLine;
+ UnicodeConverter::toUTF16(commandLine, ucommandLine);
+
+ PROCESS_INFORMATION processInfo;
+ BOOL rc = CreateProcessW(
+ ucommand.c_str(),
+ const_cast<wchar_t*>(ucommandLine.c_str()),
+ NULL,
+ NULL,
+ FALSE,
+ 0,
+ NULL,
+ NULL,
+ NULL/*&startupInfo*/,
+ &processInfo
+ );
+
+ if (rc)
+ {
+ CloseHandle(processInfo.hThread);
+ return new ProcessHandleImpl(processInfo.hProcess, processInfo.dwProcessId);
+ }
+ else throw SystemException("Cannot launch process", command);
+}
+
+
+void ProcessImpl::killImpl(ProcessHandleImpl& handle)
+{
+ if (handle.process())
+ {
+ if (TerminateProcess(handle.process(), 0) == 0)
+ {
+ handle.closeHandle();
+ throw SystemException("cannot kill process");
+ }
+ handle.closeHandle();
+ }
+}
+
+
+void ProcessImpl::killImpl(PIDImpl pid)
+{
+ HANDLE hProc = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
+ if (hProc)
+ {
+ if (TerminateProcess(hProc, 0) == 0)
+ {
+ CloseHandle(hProc);
+ throw SystemException("cannot kill process");
+ }
+ CloseHandle(hProc);
+ }
+ else
+ {
+ switch (GetLastError())
+ {
+ case ERROR_ACCESS_DENIED:
+ throw NoPermissionException("cannot kill process");
+ case ERROR_NOT_FOUND:
+ throw NotFoundException("cannot kill process");
+ default:
+ throw SystemException("cannot kill process");
+ }
+ }
+}
+
+
+bool ProcessImpl::isRunningImpl(const ProcessHandleImpl& handle)
+{
+ bool result = true;
+ DWORD exitCode;
+ BOOL rc = GetExitCodeProcess(handle.process(), &exitCode);
+ if (!rc || exitCode != STILL_ACTIVE) result = false;
+ return result;
+}
+
+
+bool ProcessImpl::isRunningImpl(PIDImpl pid)
+{
+ HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
+ bool result = true;
+ DWORD exitCode;
+ BOOL rc = GetExitCodeProcess(hProc, &exitCode);
+ if (!rc || exitCode != STILL_ACTIVE) result = false;
+ return result;}
+
+
+void ProcessImpl::requestTerminationImpl(PIDImpl pid)
+{
+ NamedEvent ev(terminationEventName(pid));
+ ev.set();
+}
+
+
+std::string ProcessImpl::terminationEventName(PIDImpl pid)
+{
+ std::string evName("POCOTRM");
+ NumberFormatter::appendHex(evName, pid, 8);
+ return evName;
+}
+
+
+} // namespace Poco