projects
/
oweals
/
busybox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add tests for gunzip
[oweals/busybox.git]
/
libbb
/
bb_askpass.c
diff --git
a/libbb/bb_askpass.c
b/libbb/bb_askpass.c
index cf384e52b9d1915b2f2275048c2b4443f898bfb5..435314ea029872f6975349b84bf2ae7b004a8ba2 100644
(file)
--- a/
libbb/bb_askpass.c
+++ b/
libbb/bb_askpass.c
@@
-8,13
+8,7
@@
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
*/
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
*/
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <signal.h>
#include <termios.h>
#include <termios.h>
-#include <sys/ioctl.h>
#include "libbb.h"
#include "libbb.h"
@@
-25,18
+19,22
@@
static void askpass_timeout(int ATTRIBUTE_UNUSED ignore)
char *bb_askpass(int timeout, const char * prompt)
{
char *bb_askpass(int timeout, const char * prompt)
{
- static char passwd[64];
+ /* Was static char[BIGNUM] */
+ enum { sizeof_passwd = 128 };
+ static char *passwd;
char *ret;
int i;
struct sigaction sa;
struct termios old, new;
char *ret;
int i;
struct sigaction sa;
struct termios old, new;
+ if (!passwd)
+ passwd = xmalloc(sizeof_passwd);
+ memset(passwd, 0, sizeof_passwd);
+
tcgetattr(STDIN_FILENO, &old);
tcflush(STDIN_FILENO, TCIFLUSH);
tcgetattr(STDIN_FILENO, &old);
tcflush(STDIN_FILENO, TCIFLUSH);
- memset(passwd, 0, sizeof(passwd));
-
fputs(prompt, stdout);
fflush(stdout);
fputs(prompt, stdout);
fflush(stdout);
@@
-53,14
+51,16
@@
char *bb_askpass(int timeout, const char * prompt)
}
ret = NULL;
}
ret = NULL;
- if (read(STDIN_FILENO, passwd, sizeof(passwd)-1) > 0) {
+ /* On timeout, read will hopefully be interrupted by SIGALRM,
+ * and we return NULL */
+ if (read(STDIN_FILENO, passwd, sizeof_passwd-1) > 0) {
ret = passwd;
i = 0;
/* Last byte is guaranteed to be 0
(read did not overwrite it) */
do {
if (passwd[i] == '\r' || passwd[i] == '\n')
ret = passwd;
i = 0;
/* Last byte is guaranteed to be 0
(read did not overwrite it) */
do {
if (passwd[i] == '\r' || passwd[i] == '\n')
- passwd[i] =
0
;
+ passwd[i] =
'\0'
;
} while (passwd[i++]);
}
} while (passwd[i++]);
}
@@
-69,7
+69,7
@@
char *bb_askpass(int timeout, const char * prompt)
}
tcsetattr(STDIN_FILENO, TCSANOW, &old);
}
tcsetattr(STDIN_FILENO, TCSANOW, &old);
-
puts(""
);
+
bb_putchar('\n'
);
fflush(stdout);
return ret;
}
fflush(stdout);
return ret;
}