From a6975db114cce6484aa83f107d4496cd6045fd26 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sun, 3 Jan 2016 19:20:40 +0100 Subject: libc: getpass,getutent: allocate buffer dynamically Saves 0.6k bss with default buffer size(256). text data bss dec hex filename - 1172 8 408 1588 634 libc/misc/utmp/utent.os - 429 0 256 685 2ad libc/unistd/getpass.os + 1208 8 28 1244 4dc libc/misc/utmp/utent.os + 471 0 4 475 1db libc/unistd/getpass.os ================================================================ +78 -632 Signed-off-by: Leonid Lisovskiy --- libc/unistd/getpass.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'libc/unistd') diff --git a/libc/unistd/getpass.c b/libc/unistd/getpass.c index a490abe34..c46d3d442 100644 --- a/libc/unistd/getpass.c +++ b/libc/unistd/getpass.c @@ -19,6 +19,7 @@ #include #include #include +#include #if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_XOPEN2K) @@ -38,9 +39,12 @@ char * getpass (const char *prompt) FILE *in, *out; struct termios s, t; int tty_changed; - static char buf[PWD_BUFFER_SIZE]; + static char *buf = NULL; int nread; + if (buf == NULL) + buf = (char *)__uc_malloc(PWD_BUFFER_SIZE); + /* Try to write to and read from the terminal if we can. If we can't open the terminal, use stderr and stdin. */ @@ -74,7 +78,7 @@ char * getpass (const char *prompt) fflush(out); /* Read the password. */ - if (!fgets (buf, sizeof(buf), in)) + if (!fgets (buf, PWD_BUFFER_SIZE, in)) buf[0] = '\0'; nread = strlen(buf); if (nread > 0 && buf[nread - 1] == '\n') -- cgit v1.2.3