|
@@ -26,6 +26,7 @@
|
|
|
|
|
|
#pragma once
|
|
#pragma once
|
|
|
|
|
|
|
|
+#include <AK/Buffered.h>
|
|
#include <AK/Stream.h>
|
|
#include <AK/Stream.h>
|
|
#include <LibCore/File.h>
|
|
#include <LibCore/File.h>
|
|
|
|
|
|
@@ -50,6 +51,18 @@ public:
|
|
return InputFileStream { file_result.value() };
|
|
return InputFileStream { file_result.value() };
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ static Result<Buffered<InputFileStream>, String> open_buffered(StringView filename, IODevice::OpenMode mode = IODevice::OpenMode::ReadOnly, mode_t permissions = 0644)
|
|
|
|
+ {
|
|
|
|
+ ASSERT((mode & 0xf) == IODevice::OpenMode::ReadOnly || (mode & 0xf) == IODevice::OpenMode::ReadWrite);
|
|
|
|
+
|
|
|
|
+ auto file_result = File::open(filename, mode, permissions);
|
|
|
|
+
|
|
|
|
+ if (file_result.is_error())
|
|
|
|
+ return file_result.error();
|
|
|
|
+
|
|
|
|
+ return Buffered<InputFileStream> { file_result.value() };
|
|
|
|
+ }
|
|
|
|
+
|
|
size_t read(Bytes bytes) override
|
|
size_t read(Bytes bytes) override
|
|
{
|
|
{
|
|
size_t nread = 0;
|
|
size_t nread = 0;
|
|
@@ -145,11 +158,28 @@ public:
|
|
return OutputFileStream { file_result.value() };
|
|
return OutputFileStream { file_result.value() };
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ static Result<Buffered<OutputFileStream>, String> open_buffered(StringView filename, IODevice::OpenMode mode = IODevice::OpenMode::WriteOnly, mode_t permissions = 0644)
|
|
|
|
+ {
|
|
|
|
+ ASSERT((mode & 0xf) == IODevice::OpenMode::WriteOnly || (mode & 0xf) == IODevice::OpenMode::ReadWrite);
|
|
|
|
+
|
|
|
|
+ auto file_result = File::open(filename, mode, permissions);
|
|
|
|
+
|
|
|
|
+ if (file_result.is_error())
|
|
|
|
+ return file_result.error();
|
|
|
|
+
|
|
|
|
+ return Buffered<OutputFileStream> { file_result.value() };
|
|
|
|
+ }
|
|
|
|
+
|
|
static OutputFileStream stdout()
|
|
static OutputFileStream stdout()
|
|
{
|
|
{
|
|
return OutputFileStream { Core::File::stdout() };
|
|
return OutputFileStream { Core::File::stdout() };
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ static Buffered<OutputFileStream> stdout_buffered()
|
|
|
|
+ {
|
|
|
|
+ return Buffered<OutputFileStream> { Core::File::stdout() };
|
|
|
|
+ }
|
|
|
|
+
|
|
size_t write(ReadonlyBytes bytes) override
|
|
size_t write(ReadonlyBytes bytes) override
|
|
{
|
|
{
|
|
if (!m_file->write(bytes.data(), bytes.size())) {
|
|
if (!m_file->write(bytes.data(), bytes.size())) {
|