Files
clang-p2996/lldb/source/Target/FileAction.cpp
Zachary Turner c00cf4a068 Move FileSystem functions out of Host and into their own classes.
More specifically, this change can be summarized as follows:
1) Makes an lldbHostPosix library which contains code common to
   all posix platforms.
2) Creates Host/FileSystem.h which defines a common FileSystem
   interface.
3) Implements FileSystem.h in Host/windows and Host/posix.
4) Creates Host/FileCache.h, implemented in Host/common, which
   defines a class useful for storing handles to open files needed
   by the debugger.

Differential Revision: http://reviews.llvm.org/D4889

llvm-svn: 215775
2014-08-15 22:04:21 +00:00

96 lines
1.9 KiB
C++

//===-- FileAction.cpp ------------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include <fcntl.h>
#if defined(_WIN32)
#include "lldb/Host/Windows/win32.h" // For O_NOCTTY
#endif
#include "lldb/Target/FileAction.h"
using namespace lldb_private;
//----------------------------------------------------------------------------
// FileAction member functions
//----------------------------------------------------------------------------
FileAction::FileAction()
: m_action(eFileActionNone)
, m_fd(-1)
, m_arg(-1)
, m_path()
{
}
void
FileAction::Clear()
{
m_action = eFileActionNone;
m_fd = -1;
m_arg = -1;
m_path.clear();
}
const char *
FileAction::GetPath() const
{
if (m_path.empty())
return NULL;
return m_path.c_str();
}
bool
FileAction::Open(int fd, const char *path, bool read, bool write)
{
if ((read || write) && fd >= 0 && path && path[0])
{
m_action = eFileActionOpen;
m_fd = fd;
if (read && write)
m_arg = O_NOCTTY | O_CREAT | O_RDWR;
else if (read)
m_arg = O_NOCTTY | O_RDONLY;
else
m_arg = O_NOCTTY | O_CREAT | O_WRONLY;
m_path.assign(path);
return true;
}
else
{
Clear();
}
return false;
}
bool
FileAction::Close(int fd)
{
Clear();
if (fd >= 0)
{
m_action = eFileActionClose;
m_fd = fd;
}
return m_fd >= 0;
}
bool
FileAction::Duplicate(int fd, int dup_fd)
{
Clear();
if (fd >= 0 && dup_fd >= 0)
{
m_action = eFileActionDuplicate;
m_fd = fd;
m_arg = dup_fd;
}
return m_fd >= 0;
}