⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getpass.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/* ============================================================================ * Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al. * * Redistribution and use are freely permitted provided that: * *   1) This header remain in tact. *   2) The prototypes for getpass and getpass_r are not changed from: *         char *getpass(const char *prompt) *         char *getpass_r(const char *prompt, char* buffer, int buflen) *   3) This source code is not used outside of this(getpass.c) file. *   4) Any changes to this(getpass.c) source code are made publicly available. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE * AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * ============================================================================ * * $Id: getpass.c,v 1.1 2003/10/16 14:09:39 bagder Exp $ * * The spirit of this license is to allow use of this source code in any * project be it open or closed but still encourage the use of the open, * library based equivilents. * * Author(s): *   Angus Mackay <amackay@gus.ml.org> * * Contributor(s): *   Daniel Stenberg <daniel@haxx.se> */#include "setup.h" /* setup.h is required for read() prototype */#ifndef HAVE_GETPASS_R#ifndef WIN32#ifdef	VMS#include <stdio.h>#include <string.h>#include descrip#include starlet#include iodef#include iosbdefchar *getpass_r(const char *prompt, char *buffer, size_t buflen){	long sts;	short chan;	struct _iosb iosb;	$DESCRIPTOR(ttdesc, "TT");	buffer[0]='\0';	if ((sts = sys$assign(&ttdesc, &chan,0,0)) & 1) {		if (((sts = sys$qiow(0, chan, IO$_READPROMPT | IO$M_NOECHO, &iosb, 0, 0, buffer, buflen, 0, 0, prompt, strlen(prompt))) & 1) && (iosb.iosb$w_status&1)) {			buffer[iosb.iosb$w_bcnt] = '\0';		} 		sts = sys$dassgn(chan);	}	return buffer; /* we always return success */}#else /* VMS */#ifdef HAVE_TERMIOS_H#  if !defined(HAVE_TCGETATTR) && !defined(HAVE_TCSETATTR) #    undef HAVE_TERMIOS_H#  endif#endif#ifndef RETSIGTYPE#  define RETSIGTYPE void#endif#ifdef HAVE_UNISTD_H#include <unistd.h>#endif#include <stdio.h>#include <signal.h>#ifdef HAVE_TERMIOS_H#  include <termios.h>#else#  ifdef HAVE_TERMIO_H#  include <termio.h>#  else#  endif#endif/* The last #include file should be: */#ifdef CURLDEBUG#include "../lib/memdebug.h"#endifchar *getpass_r(const char *prompt, char *buffer, size_t buflen){  FILE *infp;  char infp_fclose = 0;  FILE *outfp;  RETSIGTYPE (*sigint)();#ifdef SIGTSTP  RETSIGTYPE (*sigtstp)();#endif  size_t bytes_read;  int infd;  int outfd;#ifdef HAVE_TERMIOS_H  struct termios orig;  struct termios noecho;#else#  ifdef HAVE_TERMIO_H  struct termio orig;  struct termio noecho;  #  else#  endif#endif  sigint = signal(SIGINT, SIG_IGN);#ifdef SIGTSTP  sigtstp = signal(SIGTSTP, SIG_IGN);#endif  infp=fopen("/dev/tty", "r");  if( NULL == infp )    infp = stdin;  else    infp_fclose = 1;  outfp = stderr;  infd = fileno(infp);  outfd = fileno(outfp);  /* dissable echo */#ifdef HAVE_TERMIOS_H  tcgetattr(outfd, &orig);  noecho = orig;  noecho.c_lflag &= ~ECHO;  tcsetattr(outfd, TCSANOW, &noecho);#else#  ifdef HAVE_TERMIO_H  ioctl(outfd, TCGETA, &orig);  noecho = orig;  noecho.c_lflag &= ~ECHO;  ioctl(outfd, TCSETA, &noecho);#  else#  endif#endif  fputs(prompt, outfp);  fflush(outfp);  bytes_read=read(infd, buffer, buflen);  buffer[bytes_read > 0 ? (bytes_read -1) : 0] = '\0';  /* print a new line if needed */#ifdef HAVE_TERMIOS_H  fputs("\n", outfp);#else#  ifdef HAVE_TERMIO_H  fputs("\n", outfp);#  else#  endif#endif  /*   * reset term charectaristics, use TCSAFLUSH incase the   * user types more than buflen   */#ifdef HAVE_TERMIOS_H  tcsetattr(outfd, TCSAFLUSH, &orig);#else#  ifdef HAVE_TERMIO_H  ioctl(outfd, TCSETA, &orig);#  else#  endif#endif    signal(SIGINT, sigint);#ifdef SIGTSTP  signal(SIGTSTP, sigtstp);#endif  if(infp_fclose)    fclose(infp);  return buffer; /* we always return success */}#endif /* VMS */#else /* WIN32 */#include <stdio.h>#include <conio.h>char *getpass_r(const char *prompt, char *buffer, int buflen){  int i;  printf("%s", prompt);   for(i=0; i<buflen; i++) {    buffer[i] = getch();    if ( buffer[i] == '\r' ) {      buffer[i] = 0;      break;    }  }  /* if user didn't hit ENTER, terminate buffer */  if (i==buflen)    buffer[buflen-1]=0;  return buffer; /* we always return success */}#endif#endif /* ifndef HAVE_GETPASS_R */#if 0/* for consistensy, here's the old-style function: */char *getpass(const char *prompt){  static char buf[256];  return getpass_r(prompt, buf, sizeof(buf));}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -