fixed NetWare CLIB implementation of getpass_r()

This commit is contained in:
Gunter Knauf
2007-07-06 14:58:59 +00:00
parent 7fd4f82a45
commit 836ffbfc22

View File

@@ -136,18 +136,27 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen)
#include <nwconio.h> #include <nwconio.h>
char *getpass_r(const char *prompt, char *buffer, size_t buflen) char *getpass_r(const char *prompt, char *buffer, size_t buflen)
{ {
int i = 0; size_t i = 0;
int c;
printf("%s", prompt); printf("%s", prompt);
do { do {
c = getch(); buffer[i++] = getch();
if (c != 13) { if (buffer[i-1] == '\b') {
buffer[i] = c; /* remove this letter and if this is not the first key,
i++; remove the previous one as well */
printf("%s", "*"); 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; return buffer;
} }
#endif /* __NOVELL_LIBC__ */ #endif /* __NOVELL_LIBC__ */