summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Utilities/less.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/Userland/Utilities/less.cpp b/Userland/Utilities/less.cpp
index 3662ba59a2..f89be6c5f4 100644
--- a/Userland/Utilities/less.cpp
+++ b/Userland/Utilities/less.cpp
@@ -286,10 +286,26 @@ static String get_key_sequence()
return String(buff, n);
}
-int main(int argc, char** argv)
+static void cat_file(FILE* file)
{
- VERIFY(isatty(STDOUT_FILENO));
+ ByteBuffer buffer = ByteBuffer::create_uninitialized(4096);
+ while (!feof(file)) {
+ size_t n = fread(buffer.data(), 1, buffer.size(), file);
+ if (n == 0 && ferror(file)) {
+ perror("fread");
+ exit(1);
+ }
+
+ n = fwrite(buffer.data(), 1, n, stdout);
+ if (n == 0 && ferror(stdout)) {
+ perror("fwrite");
+ exit(1);
+ }
+ }
+}
+int main(int argc, char** argv)
+{
char const* filename = "-";
char const* prompt = "?f%f :.(line %l)?e (END):.";
bool dont_switch_buffer = false;
@@ -321,6 +337,11 @@ int main(int argc, char** argv)
prompt = "--More--";
}
+ if (!isatty(STDOUT_FILENO)) {
+ cat_file(file);
+ return 0;
+ }
+
setup_tty(!dont_switch_buffer);
Pager pager(file, stdout, g_wsize.ws_col, g_wsize.ws_row);