Sfoglia il codice sorgente

LibCore: Make it possible to create a CFile for an existing file descriptor.

Andreas Kling 6 anni fa
parent
commit
0a68e0046f
2 ha cambiato i file con 13 aggiunte e 1 eliminazioni
  1. 9 1
      LibCore/CFile.cpp
  2. 4 0
      LibCore/CFile.h

+ 9 - 1
LibCore/CFile.cpp

@@ -10,10 +10,18 @@ CFile::CFile(const String& filename)
 
 CFile::~CFile()
 {
-    if (mode() != NotOpen)
+    if (m_should_close_file_descriptor == ShouldCloseFileDescriptor::Yes && mode() != NotOpen)
         close();
 }
 
+bool CFile::open(int fd, CIODevice::OpenMode mode, ShouldCloseFileDescriptor should_close)
+{
+    set_fd(fd);
+    set_mode(mode);
+    m_should_close_file_descriptor = should_close;
+    return true;
+}
+
 bool CFile::open(CIODevice::OpenMode mode)
 {
     int flags = 0;

+ 4 - 0
LibCore/CFile.h

@@ -14,8 +14,12 @@ public:
 
     virtual bool open(CIODevice::OpenMode) override;
 
+    enum class ShouldCloseFileDescriptor { No = 0, Yes };
+    bool open(int fd, CIODevice::OpenMode, ShouldCloseFileDescriptor);
+
     virtual const char* class_name() const override { return "CFile"; }
 
 private:
     String m_filename;
+    ShouldCloseFileDescriptor m_should_close_file_descriptor { ShouldCloseFileDescriptor::Yes };
 };