From: Gunter Knauf Date: Fri, 6 Jul 2007 14:58:59 +0000 (+0000) Subject: fixed NetWare CLIB implementation of getpass_r() X-Git-Tag: curl-7_16_4~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=836ffbfc222db3377b605b07b244023dc4b4aaf7;p=thirdparty%2Fcurl.git fixed NetWare CLIB implementation of getpass_r() --- diff --git a/src/getpass.c b/src/getpass.c index 244b29b9e8..26d7433ea8 100644 --- a/src/getpass.c +++ b/src/getpass.c @@ -136,18 +136,27 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen) #include char *getpass_r(const char *prompt, char *buffer, size_t buflen) { - int i = 0; - int c; + size_t i = 0; printf("%s", prompt); do { - c = getch(); - if (c != 13) { - buffer[i] = c; - i++; - printf("%s", "*"); + buffer[i++] = getch(); + if (buffer[i-1] == '\b') { + /* remove this letter and if this is not the first key, + remove the previous one as well */ + if (i > 1) { + printf("\b \b"); + i = i - 2; + } else { + RingTheBell(); + i = i - 1; + } + } else if (buffer[i-1] != 13) { + putchar('*'); } - } while ((c != 13) && (i < buflen)); + } while ((buffer[i-1] != 13) && (i < buflen)); + buffer[i-1] = 0; + printf("\r\n"); return buffer; } #endif /* __NOVELL_LIBC__ */