Browse Source

LibCore: Add standard_{output, input, error} functions to File::Stream

davidot 2 years ago
parent
commit
d9360676cd
2 changed files with 18 additions and 2 deletions
  1. 15 2
      Userland/Libraries/LibCore/Stream.cpp
  2. 3 0
      Userland/Libraries/LibCore/Stream.h

+ 15 - 2
Userland/Libraries/LibCore/Stream.cpp

@@ -148,6 +148,19 @@ bool File::exists(StringView filename)
     return !Core::System::stat(filename).is_error();
 }
 
+ErrorOr<NonnullOwnPtr<File>> File::standard_input()
+{
+    return File::adopt_fd(STDIN_FILENO, OpenMode::Read, ShouldCloseFileDescriptor::No);
+}
+ErrorOr<NonnullOwnPtr<File>> File::standard_output()
+{
+    return File::adopt_fd(STDOUT_FILENO, OpenMode::Write, ShouldCloseFileDescriptor::No);
+}
+ErrorOr<NonnullOwnPtr<File>> File::standard_error()
+{
+    return File::adopt_fd(STDERR_FILENO, OpenMode::Write, ShouldCloseFileDescriptor::No);
+}
+
 ErrorOr<NonnullOwnPtr<File>> File::open_file_or_standard_stream(StringView filename, OpenMode mode)
 {
     if (!filename.is_empty() && filename != "-"sv)
@@ -155,9 +168,9 @@ ErrorOr<NonnullOwnPtr<File>> File::open_file_or_standard_stream(StringView filen
 
     switch (mode) {
     case OpenMode::Read:
-        return File::adopt_fd(STDIN_FILENO, mode);
+        return standard_input();
     case OpenMode::Write:
-        return File::adopt_fd(STDOUT_FILENO, mode);
+        return standard_output();
     default:
         VERIFY_NOT_REACHED();
     }

+ 3 - 0
Userland/Libraries/LibCore/Stream.h

@@ -198,6 +198,9 @@ public:
     static ErrorOr<NonnullOwnPtr<File>> adopt_fd(int fd, OpenMode, ShouldCloseFileDescriptor = ShouldCloseFileDescriptor::Yes);
     static bool exists(StringView filename);
 
+    static ErrorOr<NonnullOwnPtr<File>> standard_input();
+    static ErrorOr<NonnullOwnPtr<File>> standard_output();
+    static ErrorOr<NonnullOwnPtr<File>> standard_error();
     static ErrorOr<NonnullOwnPtr<File>> open_file_or_standard_stream(StringView filename, OpenMode mode);
 
     File(File&& other) { operator=(move(other)); }