亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? cmds.c

?? 這是 FTP協(xié)議的 0。17版本的源代碼 在一定程度上是比較適用的
?? C
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
/* * Copyright (c) 1985, 1989 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS 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 REGENTS OR CONTRIBUTORS 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. *//* * from: @(#)cmds.c	5.26 (Berkeley) 3/5/91 */char cmds_rcsid[] =    "$Id: cmds.c,v 1.33 2000/07/23 01:36:59 dholland Exp $";/* * FTP User Program -- Command Routines. */#include <sys/types.h>#include <sys/wait.h>#include <sys/stat.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/ftp.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <netdb.h>#include <ctype.h>#include <limits.h>	/* for PATH_MAX */#include <time.h>#include <string.h>#include <unistd.h>#ifdef __USE_READLINE__#include <readline/readline.h>#include <readline/history.h>#endif#include "ftp_var.h"#include "pathnames.h"#include "cmds.h"#include "glob.h"void intr(int);extern FILE *cout;extern int data;extern const char *home;extern off_t restart_point;extern char reply_string[];static char *mname;static sigjmp_buf jabort;static sigjmp_buf abortprox;static char *remglob(char *argv[], int doswitch);static int checkglob(int fd, const char *pattern);static char *dotrans(char *name);static char *domap(char *name);static char *globulize(char *str);static int confirm(const char *cmd, const char *file);static int getit(int argc, char *argv[], int restartit, const char *modestr);static void quote1(const char *initial, int argc, char **argv);/* * pipeprotect: protect against "special" local filenames by prepending * "./". Special local filenames are "-" and "|..." AND "/...". */static char *pipeprotect(char *name) {	char *nu;	if (strcmp(name, "-") && *name!='|' && *name!='/') {		return name;	}	/* We're going to leak this memory. XXX. */	nu = malloc(strlen(name)+3);	if (nu==NULL) {		perror("malloc");		code = -1;		return NULL;	}	strcpy(nu, ".");	if (*name != '/') strcat(nu, "/");	strcat(nu, name);	return nu;}/* * Look for embedded ".." in a pathname and change it to "!!", printing * a warning. */static char *pathprotect(char *name){	int gotdots=0, i, len;		/* Convert null terminator to trailing / to catch a trailing ".." */	len = strlen(name)+1;	name[len-1] = '/';	/*	 * State machine loop. gotdots is < 0 if not looking at dots,	 * 0 if we just saw a / and thus might start getting dots,	 * and the count of dots seen so far if we have seen some.	 */	for (i=0; i<len; i++) {		if (name[i]=='.' && gotdots>=0) gotdots++;		else if (name[i]=='/' && gotdots<0) gotdots=0;		else if (name[i]=='/' && gotdots==2) {		    printf("Warning: embedded .. in %.*s (changing to !!)\n",			   len-1, name);		    name[i-1] = '!';		    name[i-2] = '!';		    gotdots = 0;		}		else if (name[i]=='/') gotdots = 0;		else gotdots = -1;	}	name[len-1] = 0;	return name;}/* * `Another' gets another argument, and stores the new argc and argv. * It reverts to the top level (via main.c's intr()) on EOF/error. * * Returns false if no new arguments have been added. */intanother(int *pargc, char ***pargv, const char *prompt){	int margc;	char **margv;	unsigned len = strlen(line);	int ret;	if (len >= sizeof(line) - 3) {		printf("sorry, arguments too long\n");		intr(0);	}	printf("(%s) ", prompt);	line[len++] = ' ';	if (fgets(&line[len], sizeof(line) - len, stdin) == NULL)		intr(0);	len += strlen(&line[len]);	if (len > 0 && line[len - 1] == '\n')		line[len - 1] = '\0';	margv = makeargv(&margc, NULL);	ret = margc > *pargc;	*pargc = margc;	*pargv = margv;	return ret;}/* * Connect to peer server and * auto-login, if possible. */voidsetpeer(int argc, char *argv[]){	char *host;	unsigned short port;	if (connected) {		printf("Already connected to %s, use close first.\n",			hostname);		code = -1;		return;	}	if (argc < 2)		(void) another(&argc, &argv, "to");	if (argc < 2 || argc > 3) {		printf("usage: %s host-name [port]\n", argv[0]);		code = -1;		return;	}	port = ftp_port;	if (argc > 2) {		port = atoi(argv[2]);		if (port < 1) {			printf("%s: bad port number-- %s\n", argv[1], argv[2]);			printf ("usage: %s host-name [port]\n", argv[0]);			code = -1;			return;		}		port = htons(port);	}	host = hookup(argv[1], port);	if (host) {		int overbose;		connected = 1;		/*		 * Set up defaults for FTP.		 */		(void) strcpy(typename, "ascii"), type = TYPE_A;		curtype = TYPE_A;		(void) strcpy(formname, "non-print"), form = FORM_N;		(void) strcpy(modename, "stream"), mode = MODE_S;		(void) strcpy(structname, "file"), stru = STRU_F;		(void) strcpy(bytename, "8"), bytesize = 8;		if (autologin)			(void) dologin(argv[1]);#if defined(__unix__) && CHAR_BIT == 8/* * this ifdef is to keep someone form "porting" this to an incompatible * system and not checking this out. This way they have to think about it. */		overbose = verbose;		if (debug == 0)			verbose = -1;		if (command("SYST") == COMPLETE && overbose) {			register char *cp, c = 0;			cp = index(reply_string+4, ' ');			if (cp == NULL)				cp = index(reply_string+4, '\r');			if (cp) {				if (cp[-1] == '.')					cp--;				c = *cp;				*cp = '\0';			}			printf("Remote system type is %s.\n",				reply_string+4);			if (cp)				*cp = c;		}		if (!strncmp(reply_string, "215 UNIX Type: L8", 17)) {			if (proxy)				unix_proxy = 1;			else				unix_server = 1;			/*			 * Set type to 0 (not specified by user),			 * meaning binary by default, but don't bother			 * telling server.  We can use binary			 * for text files unless changed by the user.			 */			type = 0;			(void) strcpy(typename, "binary");			if (overbose)			    printf("Using %s mode to transfer files.\n",				typename);		} else {			if (proxy)				unix_proxy = 0;			else				unix_server = 0;			if (overbose && 			    !strncmp(reply_string, "215 TOPS20", 10))				printf("Remember to set tenex mode when transfering binary files from this machine.\n");		}		verbose = overbose;#else#warning "Unix auto-mode code skipped"#endif /* unix */	}}struct	types {	const char *t_name;	const char *t_mode;	int t_type;	const char *t_arg;} types[] = {	{ "ascii",	"A",	TYPE_A,	NULL },	{ "binary",	"I",	TYPE_I,	NULL },	{ "image",	"I",	TYPE_I,	NULL },	{ "ebcdic",	"E",	TYPE_E,	NULL },	{ "tenex",	"L",	TYPE_L,	bytename },	{ NULL, NULL, 0, NULL }};/* * Set transfer type. */static voiddo_settype(const char *thetype) {	struct types *p;	int comret;	for (p = types; p->t_name; p++)		if (strcmp(thetype, p->t_name) == 0)			break;	if (p->t_name == 0) {		printf("%s: unknown mode\n", thetype);		code = -1;		return;	}	if ((p->t_arg != NULL) && (*(p->t_arg) != '\0'))		comret = command("TYPE %s %s", p->t_mode, p->t_arg);	else		comret = command("TYPE %s", p->t_mode);	if (comret == COMPLETE) {		(void) strcpy(typename, p->t_name);		curtype = type = p->t_type;	}}voidsettype(int argc, char *argv[]){	struct types *p;	if (argc > 2) {		const char *sep;		printf("usage: %s [", argv[0]);		sep = " ";		for (p = types; p->t_name; p++) {			printf("%s%s", sep, p->t_name);			sep = " | ";		}		printf(" ]\n");		code = -1;		return;	}	if (argc < 2) {		printf("Using %s mode to transfer files.\n", typename);		code = 0;		return;	}	do_settype(argv[1]);}/* * Internal form of settype; changes current type in use with server * without changing our notion of the type for data transfers. * Used to change to and from ascii for listings. */voidchangetype(int newtype, int show){	register struct types *p;	int comret, oldverbose = verbose;	int oldtick = tick;	if (newtype == 0)		newtype = TYPE_I;	if (newtype == curtype)		return;	if (debug == 0 && show == 0)		verbose = 0;	tick = 0;	for (p = types; p->t_name; p++)		if (newtype == p->t_type)			break;	if (p->t_name == 0) {		printf("ftp: internal error: unknown type %d\n", newtype);		return;	}	if (newtype == TYPE_L && bytename[0] != '\0')		comret = command("TYPE %s %s", p->t_mode, bytename);	else		comret = command("TYPE %s", p->t_mode);	if (comret == COMPLETE)		curtype = newtype;	verbose = oldverbose;	tick = oldtick;}/* * Set binary transfer type. *//*VARARGS*/voidsetbinary(void){	do_settype("binary");}/* * Set ascii transfer type. *//*VARARGS*/voidsetascii(void){	do_settype("ascii");}/* * Set tenex transfer type. *//*VARARGS*/voidsettenex(void){	do_settype("tenex");}/* * Set file transfer mode. *//*ARGSUSED*/voidsetmode(void){	printf("We only support %s mode, sorry.\n", modename);	code = -1;}/* * Set file transfer format. *//*ARGSUSED*/voidsetform(void){	printf("We only support %s format, sorry.\n", formname);	code = -1;}/* * Set file transfer structure. */voidsetstruct(void){	printf("We only support %s structure, sorry.\n", structname);	code = -1;}/* * Send a single file. */voidput(int argc, char *argv[]){	const char *cmd;	int loc = 0;	char *oldargv1, *oldargv2;	if (argc == 2) {		argc++;		argv[2] = argv[1];		loc++;	}	if (argc < 2 && !another(&argc, &argv, "local-file"))		goto usage;	if (argc < 3 && !another(&argc, &argv, "remote-file")) {usage:		printf("usage: %s local-file remote-file\n", argv[0]);		code = -1;		return;	}	oldargv1 = argv[1];	oldargv2 = argv[2];	argv[1] = globulize(argv[1]);	if (!argv[1]) {		code = -1;		return;	}	/*	 * If "globulize" modifies argv[1], and argv[2] is a copy of	 * the old argv[1], make it a copy of the new argv[1].	 */	if (argv[1] != oldargv1 && argv[2] == oldargv1) {		argv[2] = argv[1];	}	cmd = (argv[0][0] == 'a') ? "APPE" : ((sunique) ? "STOU" : "STOR");	if (loc && ntflag) {		argv[2] = dotrans(argv[2]);	}	if (loc && mapflag) {		argv[2] = domap(argv[2]);	}	sendrequest(cmd, argv[1], argv[2],	    argv[1] != oldargv1 || argv[2] != oldargv2);}void mabort(int);/* * Send multiple files. */voidmput(int argc, char *argv[]){	register int i;	void (*oldintr)(int);	int ointer;	char *tp;	if (argc < 2 && !another(&argc, &argv, "local-files")) {		printf("usage: %s local-files\n", argv[0]);		code = -1;		return;	}	mname = argv[0];	mflag = 1;	oldintr = signal(SIGINT, mabort);	(void) sigsetjmp(jabort, 1);	if (proxy) {		char *cp, *tp2, tmpbuf[PATH_MAX];		while ((cp = remglob(argv,0)) != NULL) {			if (*cp == 0) {				mflag = 0;				continue;			}			if (mflag && confirm(argv[0], cp)) {				tp = cp;				if (mcase) {					while (*tp && !islower(*tp)) {						tp++;					}					if (!*tp) {						tp = cp;						tp2 = tmpbuf;						while ((*tp2 = *tp) != '\0') {						     if (isupper(*tp2)) {						        *tp2 = 'a' + *tp2 - 'A';						     }						     tp++;						     tp2++;						}					}					tp = tmpbuf;				}				if (ntflag) {					tp = dotrans(tp);				}				if (mapflag) {					tp = domap(tp);				}				sendrequest((sunique) ? "STOU" : "STOR",				    cp, tp, cp != tp || !interactive);				if (!mflag && fromatty) {					ointer = interactive;					interactive = 1;					if (confirm("Continue with","mput")) {						mflag++;					}					interactive = ointer;				}			}		}		(void) signal(SIGINT, oldintr);		mflag = 0;		return;	}	for (i = 1; i < argc; i++) {		register char **cpp, **gargs;		if (!doglob) {			if (mflag && confirm(argv[0], argv[i])) {				tp = (ntflag) ? dotrans(argv[i]) : argv[i];				tp = (mapflag) ? domap(tp) : tp;				sendrequest((sunique) ? "STOU" : "STOR",				    argv[i], tp, tp != argv[i] || !interactive);				if (!mflag && fromatty) {					ointer = interactive;					interactive = 1;					if (confirm("Continue with","mput")) {						mflag++;					}					interactive = ointer;				}			}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情文学综合插| 中文字幕一区免费在线观看| 亚洲成人综合视频| 首页综合国产亚洲丝袜| 国内不卡的二区三区中文字幕 | 欧美视频一区二区三区四区 | 五月婷婷综合激情| 麻豆国产精品777777在线| 大胆亚洲人体视频| 欧美性猛片xxxx免费看久爱| 日韩美女视频在线| 国产精品美女久久久久久久网站| 亚洲国产综合色| 韩国欧美一区二区| 日本高清免费不卡视频| 日韩亚洲国产中文字幕欧美| 中文字幕在线不卡| 日韩av一级电影| 94色蜜桃网一区二区三区| 欧美精品久久久久久久久老牛影院 | 国产精品三级av| 日韩激情一区二区| 91丨国产丨九色丨pron| 日韩欧美的一区| 亚洲精品成人精品456| 黑人精品欧美一区二区蜜桃| 日本道色综合久久| 日本一区二区电影| 蜜臀久久久99精品久久久久久| 成人免费视频国产在线观看| 欧美一级片在线看| 一区二区三区小说| 成人黄色av网站在线| 91精品婷婷国产综合久久| 亚洲免费观看高清完整版在线观看| 麻豆91精品视频| 欧美自拍偷拍一区| 中文字幕av不卡| 久久成人免费网| 欧美日韩另类国产亚洲欧美一级| 中文文精品字幕一区二区| 日本美女视频一区二区| 在线视频一区二区免费| 国产欧美日韩在线看| 久久精品国产一区二区三| 欧美日韩一区二区三区四区五区| 国产女主播一区| 极品少妇xxxx偷拍精品少妇| 欧美日韩和欧美的一区二区| 亚洲免费视频成人| www.成人网.com| 欧美国产欧美综合| 国产一区二区在线影院| 91精品国产色综合久久不卡蜜臀| 夜夜爽夜夜爽精品视频| 色综合久久88色综合天天 | 91精品国产aⅴ一区二区| 亚洲美女区一区| 91蜜桃网址入口| 中文字幕中文在线不卡住| 国产成人综合精品三级| 亚洲精品一区二区三区精华液 | 欧美日韩另类国产亚洲欧美一级| 亚洲日本护士毛茸茸| 99精品欧美一区二区蜜桃免费 | 国产69精品久久久久777| 337p粉嫩大胆色噜噜噜噜亚洲| 日本亚洲天堂网| 制服.丝袜.亚洲.另类.中文 | 欧美日韩一二三| 亚洲成人午夜影院| 欧美裸体bbwbbwbbw| 婷婷成人激情在线网| 欧美片在线播放| 免费av网站大全久久| 日韩精品一区二区三区在线观看| 蜜桃久久久久久久| 精品粉嫩超白一线天av| 国产在线观看免费一区| 久久久高清一区二区三区| 国产黑丝在线一区二区三区| 国产三级欧美三级| www.66久久| 一区二区三区在线观看网站| 在线观看亚洲精品视频| 亚洲成av人**亚洲成av**| 欧美顶级少妇做爰| 另类小说图片综合网| 精品福利在线导航| 粉嫩欧美一区二区三区高清影视| 一色屋精品亚洲香蕉网站| 日本电影欧美片| 日韩精品高清不卡| 精品1区2区在线观看| 成人黄色小视频在线观看| 一区二区三区国产| 欧美一区二区在线免费观看| 国内成人精品2018免费看| 国产精品久久看| 欧美日韩中文国产| 麻豆精品在线播放| 国产女人18水真多18精品一级做| 97se亚洲国产综合自在线不卡| 亚洲一区二区三区四区不卡| 日韩视频免费观看高清完整版在线观看 | 国产精品自拍av| 亚洲视频在线一区二区| 欧美日韩在线播放三区| 久久精品噜噜噜成人av农村| 欧美极品xxx| 精品视频999| 国模无码大尺度一区二区三区| 日韩理论在线观看| 91麻豆精品91久久久久久清纯| 激情av综合网| 亚洲三级在线免费观看| 在线播放一区二区三区| 国产v综合v亚洲欧| 亚洲成人av福利| 国产清纯白嫩初高生在线观看91| 色八戒一区二区三区| 另类小说欧美激情| 亚洲美女屁股眼交3| 精品精品国产高清一毛片一天堂| 91色综合久久久久婷婷| 麻豆精品一二三| 亚洲免费伊人电影| www成人在线观看| 欧美色视频一区| 国产iv一区二区三区| 亚洲妇女屁股眼交7| 国产日韩欧美不卡| 欧美一级一区二区| 色先锋资源久久综合| 国产一区二区主播在线| 五月婷婷色综合| 中文字幕在线不卡国产视频| 精品入口麻豆88视频| 在线这里只有精品| 国产精品1区2区| 日本亚洲天堂网| 亚洲精品高清在线| 日本一区二区成人在线| 欧美v日韩v国产v| 欧美综合一区二区| av亚洲精华国产精华精| 精品一区二区在线看| 亚洲va在线va天堂| 亚洲日本免费电影| 国产丝袜美腿一区二区三区| 91精品欧美综合在线观看最新| 色综合色综合色综合色综合色综合| 久久精品国产精品亚洲精品| 亚洲国产综合在线| 亚洲欧美另类小说视频| 日本一区二区三区久久久久久久久不 | 精品捆绑美女sm三区| 欧美亚洲国产怡红院影院| 成人免费高清视频在线观看| 久久激五月天综合精品| 午夜欧美在线一二页| 亚洲欧美欧美一区二区三区| 国产偷国产偷精品高清尤物| 日韩精品综合一本久道在线视频| 欧美老女人在线| 欧洲一区在线观看| 色综合久久88色综合天天6| yourporn久久国产精品| 国产高清久久久| 国产精品一区一区三区| 国产九色精品成人porny| 国产精一区二区三区| 久久精品国产精品亚洲综合| 美女视频黄免费的久久| 免费在线观看精品| 麻豆精品一二三| 狠狠色综合日日| 黄色日韩网站视频| 激情欧美一区二区三区在线观看| 久久激五月天综合精品| 激情六月婷婷综合| 狠狠色狠狠色综合日日91app| 狠狠色丁香久久婷婷综合_中| 韩国欧美一区二区| 国产黄色精品视频| 国产aⅴ精品一区二区三区色成熟| 国产老女人精品毛片久久| 国产不卡高清在线观看视频| 成人激情小说网站| 99re免费视频精品全部| 91久久久免费一区二区| 欧美亚洲国产怡红院影院| 欧美日韩在线精品一区二区三区激情| 欧美日韩五月天| 91精品国产综合久久福利软件| 欧美一区二区黄| 欧美精品一区二区在线播放| 欧美激情在线看| 亚洲日本乱码在线观看| 亚洲国产日韩精品|