?? getpass.c
字號:
/* Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.This file is part of the GNU C Library.The GNU C Library is free software; you can redistribute it and/ormodify it under the terms of the GNU Library General Public License aspublished by the Free Software Foundation; either version 2 of theLicense, or (at your option) any later version.The GNU C Library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNULibrary General Public License for more details.You should have received a copy of the GNU Library General PublicLicense along with the GNU C Library; see the file COPYING.LIB. Ifnot, write to the Free Software Foundation, Inc., 675 Mass Ave,Cambridge, MA 02139, USA. *//* Changes: * uses 'fgets' instead of 'getline' to work outside glibc * trivial replacement for AmigaDOS (without ixemul) by Dieter Baron and Armin Obersteiner*/#include <stdio.h>#ifdef AMIGAchar *getpass(char *prompt){ char x[1024]; printf("WARNING: password will be echoed!\n"); printf("%s",prompt); fflush(stdout); return gets(x);}#else /* unix */#include <termios.h>#include <unistd.h>/* It is desireable to use this bit on systems that have it. The only bit of terminal state we want to twiddle is echoing, which is done in software; there is no need to change the state of the terminal hardware. */#ifndef TCSASOFT#define TCSASOFT 0#endifchar *getpass (prompt) const char *prompt;{ FILE *in, *out; struct termios t; int echo_off; static char buf[256]; size_t bufsize = 256; ssize_t nread; /* Try to write to and read from the terminal if we can. If we can't open the terminal, use stderr and stdin. */ in = fopen ("/dev/tty", "w+"); if (in == NULL) { in = stdin; out = stderr; } else out = in; /* Turn echoing off if it is on now. */ if (tcgetattr (fileno (in), &t) == 0) { if (t.c_lflag & ECHO) { t.c_lflag &= ~ECHO; echo_off = tcsetattr (fileno (in), TCSAFLUSH|TCSASOFT, &t) == 0; t.c_lflag |= ECHO; } else echo_off = 0; } else echo_off = 0; /* Write the prompt. */ fputs (prompt, out); fflush (out); /* Read the password. */ if (fgets(buf,bufsize,in) != NULL) { nread=strlen(buf); if (buf[nread - 1] == '\n') { /* Remove the newline. */ buf[nread - 1] = '\0'; if (echo_off) /* Write the newline that was not echoed. */ putc ('\n', out); } } /* Restore echoing. */ if (echo_off) (void) tcsetattr (fileno (in), TCSAFLUSH|TCSASOFT, &t); if (in != stdin) /* We opened the terminal; now close it. */ fclose (in); return buf;}#endif /* unix */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -