diff --git a/Userland/Libraries/LibCore/Stream.cpp b/Userland/Libraries/LibCore/Stream.cpp index 5debcb987a4..d6462efbbd5 100644 --- a/Userland/Libraries/LibCore/Stream.cpp +++ b/Userland/Libraries/LibCore/Stream.cpp @@ -153,6 +153,21 @@ bool File::exists(StringView filename) return !Core::System::stat(filename).is_error(); } +ErrorOr> File::open_file_or_standard_stream(StringView filename, OpenMode mode) +{ + if (!filename.is_empty() && filename != "-"sv) + return File::open(filename, mode); + + switch (mode) { + case OpenMode::Read: + return File::adopt_fd(STDIN_FILENO, mode); + case OpenMode::Write: + return File::adopt_fd(STDOUT_FILENO, mode); + default: + VERIFY_NOT_REACHED(); + } +} + int File::open_mode_to_options(OpenMode mode) { int flags = 0; diff --git a/Userland/Libraries/LibCore/Stream.h b/Userland/Libraries/LibCore/Stream.h index f21dd8a109a..da990543379 100644 --- a/Userland/Libraries/LibCore/Stream.h +++ b/Userland/Libraries/LibCore/Stream.h @@ -185,6 +185,8 @@ public: static ErrorOr> adopt_fd(int fd, OpenMode); static bool exists(StringView filename); + static ErrorOr> open_file_or_standard_stream(StringView filename, OpenMode mode); + File(File&& other) { operator=(move(other)); } File& operator=(File&& other)