| Index: fusl/src/legacy/getpass.c
|
| diff --git a/fusl/src/legacy/getpass.c b/fusl/src/legacy/getpass.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..15ab9851e8f886d52187cf8910619b08f63cb5bc
|
| --- /dev/null
|
| +++ b/fusl/src/legacy/getpass.c
|
| @@ -0,0 +1,40 @@
|
| +#define _GNU_SOURCE
|
| +#include <stdio.h>
|
| +#include <termios.h>
|
| +#include <unistd.h>
|
| +#include <fcntl.h>
|
| +#include <string.h>
|
| +
|
| +char *getpass(const char *prompt)
|
| +{
|
| + int fd;
|
| + struct termios s, t;
|
| + ssize_t l;
|
| + static char password[128];
|
| +
|
| + if ((fd = open("/dev/tty", O_RDWR|O_NOCTTY|O_CLOEXEC)) < 0) return 0;
|
| +
|
| + tcgetattr(fd, &t);
|
| + s = t;
|
| + t.c_lflag &= ~(ECHO|ISIG);
|
| + t.c_lflag |= ICANON;
|
| + t.c_iflag &= ~(INLCR|IGNCR);
|
| + t.c_iflag |= ICRNL;
|
| + tcsetattr(fd, TCSAFLUSH, &t);
|
| + tcdrain(fd);
|
| +
|
| + dprintf(fd, "%s", prompt);
|
| +
|
| + l = read(fd, password, sizeof password);
|
| + if (l >= 0) {
|
| + if (l > 0 && password[l-1] == '\n') l--;
|
| + password[l] = 0;
|
| + }
|
| +
|
| + tcsetattr(fd, TCSAFLUSH, &s);
|
| +
|
| + dprintf(fd, "\n");
|
| + close(fd);
|
| +
|
| + return l<0 ? 0 : password;
|
| +}
|
|
|