diff options
author | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2016-01-03 19:20:40 +0100 |
---|---|---|
committer | Waldemar Brodkorb <wbx@uclibc-ng.org> | 2016-01-03 19:22:22 +0100 |
commit | a6975db114cce6484aa83f107d4496cd6045fd26 (patch) | |
tree | 15f21c6e8d8ce616c0fc6020161737df4cfe1ff6 | |
parent | 391e3c8487386ed74b981cab45705cde963c6da3 (diff) |
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 <lly.dev@gmail.com>
-rw-r--r-- | libc/misc/utmp/utent.c | 12 | ||||
-rw-r--r-- | libc/unistd/getpass.c | 8 |
2 files changed, 14 insertions, 6 deletions
diff --git a/libc/misc/utmp/utent.c b/libc/misc/utmp/utent.c index 3671bb05c..16f4b115f 100644 --- a/libc/misc/utmp/utent.c +++ b/libc/misc/utmp/utent.c @@ -18,6 +18,7 @@ #include <fcntl.h> #include <paths.h> #include <errno.h> +#include <malloc.h> #include <string.h> #include "internal/utmp.h" #include <not-cancel.h> @@ -27,7 +28,7 @@ __UCLIBC_MUTEX_STATIC(utmplock, PTHREAD_MUTEX_INITIALIZER); /* Some global crap */ static int static_fd = -1; -static struct UT static_utmp; +static struct UT *static_utmp = NULL; static const char default_file[] = __DEFAULT_PATH_UTMP; static const char *current_file = default_file; @@ -72,9 +73,12 @@ static struct UT *__get_unlocked(void) return NULL; } - if (read_not_cancel(static_fd, &static_utmp, - sizeof(static_utmp)) == sizeof(static_utmp)) { - return &static_utmp; + if (static_utmp == NULL) + static_utmp = (struct UT *)__uc_malloc(sizeof(struct UT)); + + if (read_not_cancel(static_fd, static_utmp, + sizeof(struct UT)) == sizeof(struct UT)) { + return static_utmp; } return NULL; 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 <string.h> #include <termios.h> #include <unistd.h> +#include <malloc.h> #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') |