diff options
Diffstat (limited to 'Userland/Utilities')
-rw-r--r-- | Userland/Utilities/less.cpp | 25 |
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); |