diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index c2b7cd799e..7f18d3d35c 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -29,6 +29,7 @@ #include "alloc-util.h" #include "copy.h" +#include "def.h" #include "env-util.h" #include "fd-util.h" #include "fileio.h" @@ -1365,10 +1366,11 @@ int terminal_urlify_path(const char *path, const char *text, char **ret) { } static int cat_file(const char *filename, bool newline) { - _cleanup_close_ int fd; + _cleanup_fclose_ FILE *f = NULL; + int r; - fd = open(filename, O_RDONLY|O_CLOEXEC|O_NOCTTY); - if (fd < 0) + f = fopen(filename, "re"); + if (!f) return -errno; printf("%s%s# %s%s\n", @@ -1378,7 +1380,19 @@ static int cat_file(const char *filename, bool newline) { ansi_normal()); fflush(stdout); - return copy_bytes(fd, STDOUT_FILENO, (uint64_t) -1, 0); + for (;;) { + _cleanup_free_ char *line = NULL; + + r = read_line(f, LONG_LINE_MAX, &line); + if (r < 0) + return log_error_errno(r, "Failed to read \"%s\": %m", filename); + if (r == 0) + break; + + puts(line); + } + + return 0; } int cat_files(const char *file, char **dropins, CatFlags flags) {