Userland: Less: emulate cat when stdout is not a tty

This is the most logical behavior when less is used in a pipe.
This commit is contained in:
Peter Elliott 2021-07-06 14:14:54 -06:00 committed by Ali Mohammad Pur
parent 1ec061d666
commit a11658737a
Notes: sideshowbarker 2024-07-18 10:13:05 +09:00

View file

@ -286,10 +286,26 @@ static String get_key_sequence()
return String(buff, n);
}
static void cat_file(FILE* file)
{
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)
{
VERIFY(isatty(STDOUT_FILENO));
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);