summaryrefslogtreecommitdiffstats
path: root/source/API/SBPlatform.cpp
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2015-02-09 01:44:09 +0000
committeremaste <emaste@FreeBSD.org>2015-02-09 01:44:09 +0000
commitd61b076ede88b56f3372a55e7d1eac6a9d717120 (patch)
treea8f4b3abea3e6937e60728991c736e6e3d322fc1 /source/API/SBPlatform.cpp
parent0c2019f4ca6b2dc6d710f6bb16a0e3ed10271531 (diff)
downloadFreeBSD-src-d61b076ede88b56f3372a55e7d1eac6a9d717120.zip
FreeBSD-src-d61b076ede88b56f3372a55e7d1eac6a9d717120.tar.gz
Import LLDB as of upstream SVN 228549 (git 39760838)
Diffstat (limited to 'source/API/SBPlatform.cpp')
-rw-r--r--source/API/SBPlatform.cpp157
1 files changed, 82 insertions, 75 deletions
diff --git a/source/API/SBPlatform.cpp b/source/API/SBPlatform.cpp
index d3e769a..b23891d 100644
--- a/source/API/SBPlatform.cpp
+++ b/source/API/SBPlatform.cpp
@@ -10,6 +10,7 @@
#include "lldb/API/SBPlatform.h"
#include "lldb/API/SBError.h"
#include "lldb/API/SBFileSpec.h"
+#include "lldb/API/SBLaunchInfo.h"
#include "lldb/Core/ArchSpec.h"
#include "lldb/Core/Error.h"
#include "lldb/Host/File.h"
@@ -17,6 +18,8 @@
#include "lldb/Target/Target.h"
#include "lldb/Target/Platform.h"
+#include <functional>
+
using namespace lldb;
using namespace lldb_private;
@@ -484,104 +487,108 @@ SBError
SBPlatform::Put (SBFileSpec &src,
SBFileSpec &dst)
{
- SBError sb_error;
-
- PlatformSP platform_sp(GetSP());
- if (platform_sp)
- {
- if (src.Exists())
+ return ExecuteConnected(
+ [&](const lldb::PlatformSP& platform_sp)
+ {
+ if (src.Exists())
+ {
+ uint32_t permissions = src.ref().GetPermissions();
+ if (permissions == 0)
+ {
+ if (src.ref().GetFileType() == FileSpec::eFileTypeDirectory)
+ permissions = eFilePermissionsDirectoryDefault;
+ else
+ permissions = eFilePermissionsFileDefault;
+ }
+
+ return platform_sp->PutFile(src.ref(), dst.ref(), permissions);
+ }
+
+ Error error;
+ error.SetErrorStringWithFormat("'src' argument doesn't exist: '%s'", src.ref().GetPath().c_str());
+ return error;
+ });
+}
+
+SBError
+SBPlatform::Install (SBFileSpec &src,
+ SBFileSpec &dst)
+{
+ return ExecuteConnected(
+ [&](const lldb::PlatformSP& platform_sp)
+ {
+ if (src.Exists())
+ return platform_sp->Install(src.ref(), dst.ref());
+
+ Error error;
+ error.SetErrorStringWithFormat("'src' argument doesn't exist: '%s'", src.ref().GetPath().c_str());
+ return error;
+ });
+}
+
+
+SBError
+SBPlatform::Run (SBPlatformShellCommand &shell_command)
+{
+ return ExecuteConnected(
+ [&](const lldb::PlatformSP& platform_sp)
{
- uint32_t permissions = src.ref().GetPermissions();
- if (permissions == 0)
+ const char *command = shell_command.GetCommand();
+ if (!command)
+ return Error("invalid shell command (empty)");
+
+ const char *working_dir = shell_command.GetWorkingDirectory();
+ if (working_dir == NULL)
{
- if (src.ref().GetFileType() == FileSpec::eFileTypeDirectory)
- permissions = eFilePermissionsDirectoryDefault;
- else
- permissions = eFilePermissionsFileDefault;
+ working_dir = platform_sp->GetWorkingDirectory().GetCString();
+ if (working_dir)
+ shell_command.SetWorkingDirectory(working_dir);
}
+ return platform_sp->RunShellCommand(command,
+ working_dir,
+ &shell_command.m_opaque_ptr->m_status,
+ &shell_command.m_opaque_ptr->m_signo,
+ &shell_command.m_opaque_ptr->m_output,
+ shell_command.m_opaque_ptr->m_timeout_sec);
+ });
+}
- sb_error.ref() = platform_sp->PutFile(src.ref(),
- dst.ref(),
- permissions);
- }
- else
+SBError
+SBPlatform::Launch (SBLaunchInfo &launch_info)
+{
+ return ExecuteConnected(
+ [&](const lldb::PlatformSP& platform_sp)
{
- sb_error.ref().SetErrorStringWithFormat("'src' argument doesn't exist: '%s'", src.ref().GetPath().c_str());
- }
- }
- else
- {
- sb_error.SetErrorString("invalid platform");
- }
- return sb_error;
+ return platform_sp->LaunchProcess(launch_info.ref());
+ });
}
SBError
-SBPlatform::Install (SBFileSpec &src,
- SBFileSpec &dst)
+SBPlatform::Kill (const lldb::pid_t pid)
{
- SBError sb_error;
- PlatformSP platform_sp(GetSP());
- if (platform_sp)
- {
- if (src.Exists())
- {
- sb_error.ref() = platform_sp->Install(src.ref(), dst.ref());
- }
- else
+ return ExecuteConnected(
+ [&](const lldb::PlatformSP& platform_sp)
{
- sb_error.ref().SetErrorStringWithFormat("'src' argument doesn't exist: '%s'", src.ref().GetPath().c_str());
- }
- }
- else
- {
- sb_error.SetErrorString("invalid platform");
- }
- return sb_error;
+ return platform_sp->KillProcess(pid);
+ });
}
-
SBError
-SBPlatform::Run (SBPlatformShellCommand &shell_command)
+SBPlatform::ExecuteConnected (const std::function<Error(const lldb::PlatformSP&)>& func)
{
SBError sb_error;
- PlatformSP platform_sp(GetSP());
+ const auto platform_sp(GetSP());
if (platform_sp)
{
if (platform_sp->IsConnected())
- {
- const char *command = shell_command.GetCommand();
- if (command)
- {
- const char *working_dir = shell_command.GetWorkingDirectory();
- if (working_dir == NULL)
- {
- working_dir = platform_sp->GetWorkingDirectory().GetCString();
- if (working_dir)
- shell_command.SetWorkingDirectory(working_dir);
- }
- sb_error.ref() = platform_sp->RunShellCommand(command,
- working_dir,
- &shell_command.m_opaque_ptr->m_status,
- &shell_command.m_opaque_ptr->m_signo,
- &shell_command.m_opaque_ptr->m_output,
- shell_command.m_opaque_ptr->m_timeout_sec);
- }
- else
- {
- sb_error.SetErrorString("invalid shell command (empty)");
- }
- }
+ sb_error.ref() = func(platform_sp);
else
- {
sb_error.SetErrorString("not connected");
- }
}
else
- {
sb_error.SetErrorString("invalid platform");
- }
- return sb_error;
+
+ return sb_error;
}
SBError
OpenPOWER on IntegriCloud