1 //===-- FileAction.h --------------------------------------------*- C++ -*-===//
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLDB_HOST_FILEACTION_H
10 #define LLDB_HOST_FILEACTION_H
11 
12 #include "lldb/Utility/FileSpec.h"
13 #include <string>
14 
15 namespace lldb_private {
16 
17 class FileAction {
18 public:
19   enum Action {
20     eFileActionNone,
21     eFileActionClose,
22     eFileActionDuplicate,
23     eFileActionOpen
24   };
25 
26   FileAction();
27 
28   void Clear();
29 
30   bool Close(int fd);
31 
32   bool Duplicate(int fd, int dup_fd);
33 
34   bool Open(int fd, const FileSpec &file_spec, bool read, bool write);
35 
GetFD()36   int GetFD() const { return m_fd; }
37 
GetAction()38   Action GetAction() const { return m_action; }
39 
GetActionArgument()40   int GetActionArgument() const { return m_arg; }
41 
42   llvm::StringRef GetPath() const;
43 
44   const FileSpec &GetFileSpec() const;
45 
46   void Dump(Stream &stream) const;
47 
48 protected:
49   Action m_action = eFileActionNone; // The action for this file
50   int m_fd = -1;                     // An existing file descriptor
51   int m_arg = -1; // oflag for eFileActionOpen*, dup_fd for eFileActionDuplicate
52   FileSpec
53       m_file_spec; // A file spec to use for opening after fork or posix_spawn
54 };
55 
56 } // namespace lldb_private
57 
58 #endif
59