A read() write() pair can be replaced with sendfile(), and it should be more efficient than suffling bytes back and forth user and kernel space. Signed-off-by: Sami Kerola <kerolasa@xxxxxxxxxxxxxx> --- login-utils/nologin.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/login-utils/nologin.c b/login-utils/nologin.c index f38a3aab0..ca4ca4e84 100644 --- a/login-utils/nologin.c +++ b/login-utils/nologin.c @@ -3,6 +3,7 @@ */ #include <stdio.h> +#include <sys/sendfile.h> #include <sys/stat.h> #include <sys/types.h> #include <fcntl.h> @@ -97,12 +98,12 @@ int main(int argc, char *argv[]) if (c < 0 || !S_ISREG(st.st_mode)) goto dflt; else { - char buf[BUFSIZ]; - ssize_t rd; - - while ((rd = read(fd, buf, sizeof(buf))) > 0) - ignore_result( write(STDOUT_FILENO, buf, rd) ); + int stdout_fd; + stdout_fd = fileno(stdout); + if (stdout_fd < 0) + goto dflt; + ignore_result( sendfile(stdout_fd, fd, NULL, st.st_size) ); close(fd); return EXIT_FAILURE; } -- 2.28.0