From: Karel Zak Date: Thu, 17 Oct 2019 08:41:39 +0000 (+0200) Subject: login: reduce file-descriptors cleanup overhead X-Git-Tag: v2.35-rc1~96 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=70ff760d416adcb182b191f9efbc92b8a3d8f095;p=thirdparty%2Futil-linux.git login: reduce file-descriptors cleanup overhead Addresses: https://github.com/karelzak/util-linux/issues/883 Signed-off-by: Karel Zak --- diff --git a/login-utils/login.c b/login-utils/login.c index d213e4784b..23bb3c4344 100644 --- a/login-utils/login.c +++ b/login-utils/login.c @@ -1116,14 +1116,15 @@ static void __attribute__((__noreturn__)) usage(void) int main(int argc, char **argv) { int c; - int cnt; char *childArgv[10]; char *buff; int childArgc = 0; int retcode; struct sigaction act; struct passwd *pwd; - + static const int wanted_fds[] = { + STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO + }; struct login_context cxt = { .tty_mode = TTY_MODE, /* tty chmod() */ .pid = getpid(), /* PID */ @@ -1218,8 +1219,7 @@ int main(int argc, char **argv) *p++ = ' '; } - for (cnt = get_fd_tabsize() - 1; cnt > 2; cnt--) - close(cnt); + close_all_fds(wanted_fds, ARRAY_SIZE(wanted_fds)); setpgrp(); /* set pgid to pid this means that setsid() will fail */ init_tty(&cxt);