forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			633 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			633 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- SBPlatform.cpp ------------------------------------------*- C++ -*-===//
 | 
						|
//
 | 
						|
//                     The LLVM Compiler Infrastructure
 | 
						|
//
 | 
						|
// This file is distributed under the University of Illinois Open Source
 | 
						|
// License. See LICENSE.TXT for details.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#include "lldb/API/SBPlatform.h"
 | 
						|
#include "lldb/API/SBError.h"
 | 
						|
#include "lldb/API/SBFileSpec.h"
 | 
						|
#include "lldb/Core/ArchSpec.h"
 | 
						|
#include "lldb/Core/Error.h"
 | 
						|
#include "lldb/Host/File.h"
 | 
						|
#include "lldb/Interpreter/Args.h"
 | 
						|
#include "lldb/Target/Target.h"
 | 
						|
#include "lldb/Target/Platform.h"
 | 
						|
 | 
						|
using namespace lldb;
 | 
						|
using namespace lldb_private;
 | 
						|
 | 
						|
//----------------------------------------------------------------------
 | 
						|
// PlatformConnectOptions
 | 
						|
//----------------------------------------------------------------------
 | 
						|
struct PlatformConnectOptions {
 | 
						|
    PlatformConnectOptions(const char *url = NULL) :
 | 
						|
        m_url(),
 | 
						|
        m_rsync_options(),
 | 
						|
        m_rsync_remote_path_prefix(),
 | 
						|
        m_rsync_enabled(false),
 | 
						|
        m_rsync_omit_hostname_from_remote_path(false),
 | 
						|
        m_local_cache_directory ()
 | 
						|
    {
 | 
						|
        if (url && url[0])
 | 
						|
            m_url = url;
 | 
						|
    }
 | 
						|
    
 | 
						|
    ~PlatformConnectOptions()
 | 
						|
    {
 | 
						|
    }
 | 
						|
 | 
						|
    std::string m_url;
 | 
						|
    std::string m_rsync_options;
 | 
						|
    std::string m_rsync_remote_path_prefix;
 | 
						|
    bool m_rsync_enabled;
 | 
						|
    bool m_rsync_omit_hostname_from_remote_path;
 | 
						|
    ConstString m_local_cache_directory;
 | 
						|
};
 | 
						|
 | 
						|
//----------------------------------------------------------------------
 | 
						|
// PlatformShellCommand
 | 
						|
//----------------------------------------------------------------------
 | 
						|
struct PlatformShellCommand {
 | 
						|
    PlatformShellCommand(const char *shell_command = NULL) :
 | 
						|
        m_command(),
 | 
						|
        m_working_dir(),
 | 
						|
        m_status(0),
 | 
						|
        m_signo(0),
 | 
						|
        m_timeout_sec(UINT32_MAX)
 | 
						|
    {
 | 
						|
        if (shell_command && shell_command[0])
 | 
						|
            m_command = shell_command;
 | 
						|
    }
 | 
						|
    
 | 
						|
    ~PlatformShellCommand()
 | 
						|
    {
 | 
						|
    }
 | 
						|
    
 | 
						|
    std::string m_command;
 | 
						|
    std::string m_working_dir;
 | 
						|
    std::string m_output;
 | 
						|
    int m_status;
 | 
						|
    int m_signo;
 | 
						|
    uint32_t m_timeout_sec;
 | 
						|
};
 | 
						|
//----------------------------------------------------------------------
 | 
						|
// SBPlatformConnectOptions
 | 
						|
//----------------------------------------------------------------------
 | 
						|
SBPlatformConnectOptions::SBPlatformConnectOptions (const char *url) :
 | 
						|
    m_opaque_ptr(new PlatformConnectOptions(url))
 | 
						|
{
 | 
						|
    
 | 
						|
}
 | 
						|
 | 
						|
SBPlatformConnectOptions::SBPlatformConnectOptions(const SBPlatformConnectOptions &rhs) :
 | 
						|
    m_opaque_ptr(new PlatformConnectOptions())
 | 
						|
{
 | 
						|
    *m_opaque_ptr = *rhs.m_opaque_ptr;
 | 
						|
}
 | 
						|
    
 | 
						|
SBPlatformConnectOptions::~SBPlatformConnectOptions ()
 | 
						|
{
 | 
						|
    delete m_opaque_ptr;
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
SBPlatformConnectOptions::operator=(const SBPlatformConnectOptions &rhs)
 | 
						|
{
 | 
						|
    *m_opaque_ptr = *rhs.m_opaque_ptr;
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
SBPlatformConnectOptions::GetURL()
 | 
						|
{
 | 
						|
    if (m_opaque_ptr->m_url.empty())
 | 
						|
        return NULL;
 | 
						|
    return m_opaque_ptr->m_url.c_str();
 | 
						|
}
 | 
						|
    
 | 
						|
void
 | 
						|
SBPlatformConnectOptions::SetURL(const char *url)
 | 
						|
{
 | 
						|
    if (url && url[0])
 | 
						|
        m_opaque_ptr->m_url = url;
 | 
						|
    else
 | 
						|
        m_opaque_ptr->m_url.clear();
 | 
						|
}
 | 
						|
 | 
						|
bool
 | 
						|
SBPlatformConnectOptions::GetRsyncEnabled()
 | 
						|
{
 | 
						|
    return m_opaque_ptr->m_rsync_enabled;
 | 
						|
}
 | 
						|
    
 | 
						|
void
 | 
						|
SBPlatformConnectOptions::EnableRsync (const char *options,
 | 
						|
                                       const char *remote_path_prefix,
 | 
						|
                                       bool omit_hostname_from_remote_path)
 | 
						|
{
 | 
						|
    m_opaque_ptr->m_rsync_enabled = true;
 | 
						|
    m_opaque_ptr->m_rsync_omit_hostname_from_remote_path = omit_hostname_from_remote_path;
 | 
						|
    if (remote_path_prefix && remote_path_prefix[0])
 | 
						|
        m_opaque_ptr->m_rsync_remote_path_prefix = remote_path_prefix;
 | 
						|
    else
 | 
						|
        m_opaque_ptr->m_rsync_remote_path_prefix.clear();
 | 
						|
 | 
						|
    if (options && options[0])
 | 
						|
        m_opaque_ptr->m_rsync_options = options;
 | 
						|
    else
 | 
						|
        m_opaque_ptr->m_rsync_options.clear();
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
SBPlatformConnectOptions::DisableRsync ()
 | 
						|
{
 | 
						|
    m_opaque_ptr->m_rsync_enabled = false;
 | 
						|
}
 | 
						|
    
 | 
						|
const char *
 | 
						|
SBPlatformConnectOptions::GetLocalCacheDirectory()
 | 
						|
{
 | 
						|
    return m_opaque_ptr->m_local_cache_directory.GetCString();
 | 
						|
}
 | 
						|
    
 | 
						|
void
 | 
						|
SBPlatformConnectOptions::SetLocalCacheDirectory(const char *path)
 | 
						|
{
 | 
						|
    if (path && path[0])
 | 
						|
        m_opaque_ptr->m_local_cache_directory.SetCString(path);
 | 
						|
    else
 | 
						|
        m_opaque_ptr->m_local_cache_directory = ConstString();
 | 
						|
}
 | 
						|
 | 
						|
//----------------------------------------------------------------------
 | 
						|
// SBPlatformShellCommand
 | 
						|
//----------------------------------------------------------------------
 | 
						|
SBPlatformShellCommand::SBPlatformShellCommand (const char *shell_command) :
 | 
						|
    m_opaque_ptr(new PlatformShellCommand(shell_command))
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
SBPlatformShellCommand::SBPlatformShellCommand (const SBPlatformShellCommand &rhs) :
 | 
						|
    m_opaque_ptr(new PlatformShellCommand())
 | 
						|
{
 | 
						|
    *m_opaque_ptr = *rhs.m_opaque_ptr;
 | 
						|
}
 | 
						|
 | 
						|
SBPlatformShellCommand::~SBPlatformShellCommand()
 | 
						|
{
 | 
						|
    delete m_opaque_ptr;
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
SBPlatformShellCommand::Clear()
 | 
						|
{
 | 
						|
    m_opaque_ptr->m_output = std::move(std::string());
 | 
						|
    m_opaque_ptr->m_status = 0;
 | 
						|
    m_opaque_ptr->m_signo = 0;
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
SBPlatformShellCommand::GetCommand()
 | 
						|
{
 | 
						|
    if (m_opaque_ptr->m_command.empty())
 | 
						|
        return NULL;
 | 
						|
    return m_opaque_ptr->m_command.c_str();
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
SBPlatformShellCommand::SetCommand(const char *shell_command)
 | 
						|
{
 | 
						|
    if (shell_command && shell_command[0])
 | 
						|
        m_opaque_ptr->m_command = shell_command;
 | 
						|
    else
 | 
						|
        m_opaque_ptr->m_command.clear();
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
SBPlatformShellCommand::GetWorkingDirectory ()
 | 
						|
{
 | 
						|
    if (m_opaque_ptr->m_working_dir.empty())
 | 
						|
        return NULL;
 | 
						|
    return m_opaque_ptr->m_working_dir.c_str();
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
SBPlatformShellCommand::SetWorkingDirectory (const char *path)
 | 
						|
{
 | 
						|
    if (path && path[0])
 | 
						|
        m_opaque_ptr->m_working_dir = path;
 | 
						|
    else
 | 
						|
        m_opaque_ptr->m_working_dir.clear();
 | 
						|
}
 | 
						|
 | 
						|
uint32_t
 | 
						|
SBPlatformShellCommand::GetTimeoutSeconds ()
 | 
						|
{
 | 
						|
    return m_opaque_ptr->m_timeout_sec;
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
SBPlatformShellCommand::SetTimeoutSeconds (uint32_t sec)
 | 
						|
{
 | 
						|
    m_opaque_ptr->m_timeout_sec = sec;
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
SBPlatformShellCommand::GetSignal ()
 | 
						|
{
 | 
						|
    return m_opaque_ptr->m_signo;
 | 
						|
}
 | 
						|
 | 
						|
int
 | 
						|
SBPlatformShellCommand::GetStatus ()
 | 
						|
{
 | 
						|
    return m_opaque_ptr->m_status;
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
SBPlatformShellCommand::GetOutput ()
 | 
						|
{
 | 
						|
    if (m_opaque_ptr->m_output.empty())
 | 
						|
        return NULL;
 | 
						|
    return m_opaque_ptr->m_output.c_str();
 | 
						|
}
 | 
						|
 | 
						|
//----------------------------------------------------------------------
 | 
						|
// SBPlatform
 | 
						|
//----------------------------------------------------------------------
 | 
						|
SBPlatform::SBPlatform () :
 | 
						|
    m_opaque_sp ()
 | 
						|
{
 | 
						|
    
 | 
						|
}
 | 
						|
 | 
						|
SBPlatform::SBPlatform (const char *platform_name) :
 | 
						|
    m_opaque_sp ()
 | 
						|
{
 | 
						|
    Error error;
 | 
						|
    m_opaque_sp = Platform::Create (platform_name, error);
 | 
						|
}
 | 
						|
 | 
						|
SBPlatform::~SBPlatform()
 | 
						|
{
 | 
						|
}
 | 
						|
 | 
						|
bool
 | 
						|
SBPlatform::IsValid () const
 | 
						|
{
 | 
						|
    return m_opaque_sp.get() != NULL;
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
SBPlatform::Clear ()
 | 
						|
{
 | 
						|
    m_opaque_sp.reset();
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
SBPlatform::GetName ()
 | 
						|
{
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
        return platform_sp->GetName().GetCString();
 | 
						|
    return NULL;
 | 
						|
}
 | 
						|
 | 
						|
lldb::PlatformSP
 | 
						|
SBPlatform::GetSP () const
 | 
						|
{
 | 
						|
    return m_opaque_sp;
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
SBPlatform::SetSP (const lldb::PlatformSP& platform_sp)
 | 
						|
{
 | 
						|
    m_opaque_sp = platform_sp;
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
SBPlatform::GetWorkingDirectory()
 | 
						|
{
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
        return platform_sp->GetWorkingDirectory().GetCString();
 | 
						|
    return NULL;
 | 
						|
}
 | 
						|
 | 
						|
bool
 | 
						|
SBPlatform::SetWorkingDirectory(const char *path)
 | 
						|
{
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
    {
 | 
						|
        if (path)
 | 
						|
            platform_sp->SetWorkingDirectory(ConstString(path));
 | 
						|
        else
 | 
						|
            platform_sp->SetWorkingDirectory(ConstString());
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
    return false;
 | 
						|
}
 | 
						|
 | 
						|
SBError
 | 
						|
SBPlatform::ConnectRemote (SBPlatformConnectOptions &connect_options)
 | 
						|
{
 | 
						|
    SBError sb_error;
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp && connect_options.GetURL())
 | 
						|
    {
 | 
						|
        Args args;
 | 
						|
        args.AppendArgument(connect_options.GetURL());
 | 
						|
        sb_error.ref() = platform_sp->ConnectRemote(args);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        sb_error.SetErrorString("invalid platform");
 | 
						|
    }
 | 
						|
    return sb_error;
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
SBPlatform::DisconnectRemote ()
 | 
						|
{
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
        platform_sp->DisconnectRemote();
 | 
						|
}
 | 
						|
 | 
						|
bool
 | 
						|
SBPlatform::IsConnected()
 | 
						|
{
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
        platform_sp->IsConnected();
 | 
						|
    return false;
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
SBPlatform::GetTriple()
 | 
						|
{
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
    {
 | 
						|
        ArchSpec arch(platform_sp->GetRemoteSystemArchitecture());
 | 
						|
        if (arch.IsValid())
 | 
						|
        {
 | 
						|
            // Const-ify the string so we don't need to worry about the lifetime of the string
 | 
						|
            return ConstString(arch.GetTriple().getTriple().c_str()).GetCString();
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return NULL;
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
SBPlatform::GetOSBuild()
 | 
						|
{
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
    {
 | 
						|
        std::string s;
 | 
						|
        if (platform_sp->GetOSBuildString(s))
 | 
						|
        {
 | 
						|
            if (!s.empty())
 | 
						|
            {
 | 
						|
                // Const-ify the string so we don't need to worry about the lifetime of the string
 | 
						|
                return ConstString(s.c_str()).GetCString();
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return NULL;
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
SBPlatform::GetOSDescription()
 | 
						|
{
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
    {
 | 
						|
        std::string s;
 | 
						|
        if (platform_sp->GetOSKernelDescription(s))
 | 
						|
        {
 | 
						|
            if (!s.empty())
 | 
						|
            {
 | 
						|
                // Const-ify the string so we don't need to worry about the lifetime of the string
 | 
						|
                return ConstString(s.c_str()).GetCString();
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return NULL;
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
SBPlatform::GetHostname ()
 | 
						|
{
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
        return platform_sp->GetHostname();
 | 
						|
    return NULL;
 | 
						|
}
 | 
						|
 | 
						|
uint32_t
 | 
						|
SBPlatform::GetOSMajorVersion ()
 | 
						|
{
 | 
						|
    uint32_t major, minor, update;
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp && platform_sp->GetOSVersion(major, minor, update))
 | 
						|
        return major;
 | 
						|
    return UINT32_MAX;
 | 
						|
    
 | 
						|
}
 | 
						|
 | 
						|
uint32_t
 | 
						|
SBPlatform::GetOSMinorVersion ()
 | 
						|
{
 | 
						|
    uint32_t major, minor, update;
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp && platform_sp->GetOSVersion(major, minor, update))
 | 
						|
        return minor;
 | 
						|
    return UINT32_MAX;
 | 
						|
}
 | 
						|
 | 
						|
uint32_t
 | 
						|
SBPlatform::GetOSUpdateVersion ()
 | 
						|
{
 | 
						|
    uint32_t major, minor, update;
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp && platform_sp->GetOSVersion(major, minor, update))
 | 
						|
        return update;
 | 
						|
    return UINT32_MAX;
 | 
						|
}
 | 
						|
 | 
						|
SBError
 | 
						|
SBPlatform::Get (SBFileSpec &src,
 | 
						|
                 SBFileSpec &dst)
 | 
						|
{
 | 
						|
    SBError sb_error;
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
    {
 | 
						|
        sb_error.ref() = platform_sp->GetFile(src.ref(), dst.ref());
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        sb_error.SetErrorString("invalid platform");
 | 
						|
    }
 | 
						|
    return sb_error;
 | 
						|
}
 | 
						|
 | 
						|
SBError
 | 
						|
SBPlatform::Put (SBFileSpec &src,
 | 
						|
                 SBFileSpec &dst)
 | 
						|
{
 | 
						|
    SBError sb_error;
 | 
						|
    
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (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;
 | 
						|
            }
 | 
						|
 | 
						|
            sb_error.ref() = platform_sp->PutFile(src.ref(),
 | 
						|
                                                  dst.ref(),
 | 
						|
                                                  permissions);
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            sb_error.ref().SetErrorStringWithFormat("'src' argument doesn't exist: '%s'", src.ref().GetPath().c_str());
 | 
						|
        }
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        sb_error.SetErrorString("invalid platform");
 | 
						|
    }
 | 
						|
    return sb_error;
 | 
						|
}
 | 
						|
 | 
						|
SBError
 | 
						|
SBPlatform::Install (SBFileSpec &src,
 | 
						|
                     SBFileSpec &dst)
 | 
						|
{
 | 
						|
    SBError sb_error;
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
    {
 | 
						|
        if (src.Exists())
 | 
						|
        {
 | 
						|
            sb_error.ref() = platform_sp->Install(src.ref(), dst.ref());
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            sb_error.ref().SetErrorStringWithFormat("'src' argument doesn't exist: '%s'", src.ref().GetPath().c_str());
 | 
						|
        }
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        sb_error.SetErrorString("invalid platform");
 | 
						|
    }
 | 
						|
    return sb_error;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
SBError
 | 
						|
SBPlatform::Run (SBPlatformShellCommand &shell_command)
 | 
						|
{
 | 
						|
    SBError sb_error;
 | 
						|
    PlatformSP 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)");
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            sb_error.SetErrorString("not connected");
 | 
						|
        }
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        sb_error.SetErrorString("invalid platform");
 | 
						|
    }
 | 
						|
    return sb_error;
 | 
						|
}
 | 
						|
 | 
						|
SBError
 | 
						|
SBPlatform::MakeDirectory (const char *path, uint32_t file_permissions)
 | 
						|
{
 | 
						|
    SBError sb_error;
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
    {
 | 
						|
        sb_error.ref() = platform_sp->MakeDirectory(path, file_permissions);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        sb_error.SetErrorString("invalid platform");
 | 
						|
    }
 | 
						|
    return sb_error;
 | 
						|
}
 | 
						|
 | 
						|
uint32_t
 | 
						|
SBPlatform::GetFilePermissions (const char *path)
 | 
						|
{
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
    {
 | 
						|
        uint32_t file_permissions = 0;
 | 
						|
        platform_sp->GetFilePermissions(path, file_permissions);
 | 
						|
        return file_permissions;
 | 
						|
    }
 | 
						|
    return 0;
 | 
						|
    
 | 
						|
}
 | 
						|
 | 
						|
SBError
 | 
						|
SBPlatform::SetFilePermissions (const char *path, uint32_t file_permissions)
 | 
						|
{
 | 
						|
    SBError sb_error;
 | 
						|
    PlatformSP platform_sp(GetSP());
 | 
						|
    if (platform_sp)
 | 
						|
    {
 | 
						|
        sb_error.ref() = platform_sp->SetFilePermissions(path, file_permissions);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        sb_error.SetErrorString("invalid platform");
 | 
						|
    }
 | 
						|
    return sb_error;
 | 
						|
    
 | 
						|
}
 | 
						|
 |