brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · e1c3e14 Raw
90 lines · cpp
1//===-- FileAction.cpp ----------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include <fcntl.h>10 11#include "lldb/Host/FileAction.h"12#include "lldb/Host/PosixApi.h"13#include "lldb/Utility/Stream.h"14 15using namespace lldb_private;16 17// FileAction member functions18 19FileAction::FileAction() : m_file_spec() {}20 21void FileAction::Clear() {22  m_action = eFileActionNone;23  m_fd = -1;24  m_arg = -1;25  m_file_spec.Clear();26}27 28llvm::StringRef FileAction::GetPath() const {29  return m_file_spec.GetPathAsConstString().AsCString();30}31 32const FileSpec &FileAction::GetFileSpec() const { return m_file_spec; }33 34bool FileAction::Open(int fd, const FileSpec &file_spec, bool read,35                      bool write) {36  if ((read || write) && fd >= 0 && file_spec) {37    m_action = eFileActionOpen;38    m_fd = fd;39    if (read && write)40      m_arg = O_NOCTTY | O_CREAT | O_RDWR;41    else if (read)42      m_arg = O_NOCTTY | O_RDONLY;43    else44      m_arg = O_NOCTTY | O_CREAT | O_WRONLY | O_TRUNC;45    m_file_spec = file_spec;46    return true;47  } else {48    Clear();49  }50  return false;51}52 53bool FileAction::Close(int fd) {54  Clear();55  if (fd >= 0) {56    m_action = eFileActionClose;57    m_fd = fd;58  }59  return m_fd >= 0;60}61 62bool FileAction::Duplicate(int fd, int dup_fd) {63  Clear();64  if (fd >= 0 && dup_fd >= 0) {65    m_action = eFileActionDuplicate;66    m_fd = fd;67    m_arg = dup_fd;68  }69  return m_fd >= 0;70}71 72void FileAction::Dump(Stream &stream) const {73  stream.PutCString("file action: ");74  switch (m_action) {75  case eFileActionClose:76    stream.Printf("close fd %d", m_fd);77    break;78  case eFileActionDuplicate:79    stream.Printf("duplicate fd %d to %d", m_fd, m_arg);80    break;81  case eFileActionNone:82    stream.PutCString("no action");83    break;84  case eFileActionOpen:85    stream.Printf("open fd %d with '%s', OFLAGS = 0x%x", m_fd,86                  m_file_spec.GetPath().c_str(), m_arg);87    break;88  }89}90