瀏覽代碼

LibCore: Add optional custom read size argument in populate_read_buffer

This is a small preparation so IODevice::read() can use it in the next
commit.
Karol Kosek 3 年之前
父節點
當前提交
48a925b1d2
共有 2 個文件被更改,包括 15 次插入5 次删除
  1. 14 4
      Userland/Libraries/LibCore/IODevice.cpp
  2. 1 1
      Userland/Libraries/LibCore/IODevice.h

+ 14 - 4
Userland/Libraries/LibCore/IODevice.cpp

@@ -218,12 +218,22 @@ String IODevice::read_line(size_t max_size)
     return {};
     return {};
 }
 }
 
 
-bool IODevice::populate_read_buffer() const
+bool IODevice::populate_read_buffer(size_t size) const
 {
 {
     if (m_fd < 0)
     if (m_fd < 0)
         return false;
         return false;
-    u8 buffer[1024];
-    int nread = ::read(m_fd, buffer, sizeof(buffer));
+    if (!size)
+        return false;
+
+    auto buffer_result = ByteBuffer::create_uninitialized(size);
+    if (!buffer_result.has_value()) {
+        dbgln("IODevice::populate_read_buffer: Not enough memory to allocate a buffer of {} bytes", size);
+        return {};
+    }
+    auto buffer = buffer_result.release_value();
+    auto* buffer_ptr = (char*)buffer.data();
+
+    int nread = ::read(m_fd, buffer_ptr, size);
     if (nread < 0) {
     if (nread < 0) {
         set_error(errno);
         set_error(errno);
         return false;
         return false;
@@ -232,7 +242,7 @@ bool IODevice::populate_read_buffer() const
         set_eof(true);
         set_eof(true);
         return false;
         return false;
     }
     }
-    m_buffered_data.append(buffer, nread);
+    m_buffered_data.append(buffer.data(), nread);
     return true;
     return true;
 }
 }
 
 

+ 1 - 1
Userland/Libraries/LibCore/IODevice.h

@@ -103,7 +103,7 @@ protected:
     virtual void did_update_fd(int) { }
     virtual void did_update_fd(int) { }
 
 
 private:
 private:
-    bool populate_read_buffer() const;
+    bool populate_read_buffer(size_t size = 1024) const;
     bool can_read_from_fd() const;
     bool can_read_from_fd() const;
 
 
     int m_fd { -1 };
     int m_fd { -1 };