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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? irpmarshall.c

?? package of develop dns
?? C
?? 第 1 頁 / 共 3 頁
字號:
	joinarray(ne->n_aliases, *buffer, COMMA) ; strcat(*buffer, fieldsep);	strcat(*buffer, nAddrType);		strcat(*buffer, fieldsep);	strcat(*buffer, nNet);			strcat(*buffer, fieldsep);	return (0);}/* * int irp_unmarshall_ne(struct netent *ne, char *buffer) * * notes: * *	See note up top. * * return: * *	0 on success and -1 on failure. * */intirp_unmarshall_ne(struct netent *ne, char *buffer) {	char *p, *q;	int naddrtype;	long nnet;	int bits;	char *name = NULL;	char **aliases = NULL;	char tmpbuf[24];	char *tb;	char fieldsep = ':';	int myerrno = EINVAL;	if (ne == NULL || buffer == NULL) {		goto error;	}	p = buffer;	/* n_name field */	name = NULL;	if (getfield(&name, 0, &p, fieldsep) == NULL || strlen(name) == 0U) {		goto error;	}	/* n_aliases field. Aliases are separated by commas */	q = strchr(p, fieldsep);	if (q == NULL) {		goto error;	}	aliases = splitarray(p, q, COMMA);	if (aliases == NULL) {		myerrno = errno;		goto error;	}	p = q + 1;	/* h_addrtype field */	tb = tmpbuf;	if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||	    strlen(tb) == 0U) {		goto error;	}	if (strcmp(tmpbuf, "AF_INET") == 0)		naddrtype = AF_INET;	else if (strcmp(tmpbuf, "AF_INET6") == 0)		naddrtype = AF_INET6;	else		goto error;	/* n_net field */	tb = tmpbuf;	if (getfield(&tb, sizeof tmpbuf, &p, fieldsep) == NULL ||	    strlen(tb) == 0U) {		goto error;	}	bits = inet_net_pton(naddrtype, tmpbuf, &nnet, sizeof nnet);	if (bits < 0) {		goto error;	}	nnet = ntohl(nnet);	ne->n_name = name;	ne->n_aliases = aliases;	ne->n_addrtype = naddrtype;	ne->n_net = nnet;	return (0); error:	errno = myerrno;	if (name != NULL) free(name);	free_array(aliases, 0);	return (-1);}/* ------------------------- struct netent ------------------------- *//* =========================================================================== *//* * static char ** splitarray(const char *buffer, const char *buffend, char delim) * * notes: * *	Split a delim separated astring. Not allowed *	to have two delims next to each other. BUFFER points to begining of *	string, BUFFEND points to one past the end of the string *	(i.e. points at where the null byte would be if null *	terminated). * * return: * *	Returns a malloced array of pointers, each pointer pointing to a *	malloced string. If BUFEER is an empty string, then return values is *	array of 1 pointer that is NULL. Returns NULL on failure. * */static char **splitarray(const char *buffer, const char *buffend, char delim) {	const char *p, *q;	int count = 0;	char **arr = NULL;	char **aptr;	if (buffend < buffer)		return (NULL);	else if (buffend > buffer && *buffer == delim)		return (NULL);	else if (buffend > buffer && *(buffend - 1) == delim)		return (NULL);	/* count the number of field and make sure none are empty */	if (buffend > buffer + 1) {		for (count = 1, q = buffer ; q != buffend ; q++) {			if (*q == delim) {				if (q > buffer && (*(q - 1) == delim)) {					errno = EINVAL;					return (NULL);				}				count++;			}		}	}	if (count > 0) {		count++ ;		/* for NULL at end */		aptr = arr = malloc(count * sizeof (char *));		if (aptr == NULL) {			 errno = ENOMEM;			 return (NULL);		 }		memset(arr, 0x0, count * sizeof (char *));		for (p = buffer ; p < buffend ; p++) {			for (q = p ; *q != delim && q != buffend ; q++)				/* nothing */;			*aptr = strndup(p, q - p);			p = q;			aptr++;		}		*aptr = NULL;	} else {		arr = malloc(sizeof (char *));		if (arr == NULL) {			errno = ENOMEM;			return (NULL);		}		*arr = NULL;	}	return (arr);}/* * static size_t joinlength(char * const *argv) * * return: * *	the number of bytes in all the arrays pointed at *	by argv, including their null bytes(which will usually be turned *	into commas). * * */static size_tjoinlength(char * const *argv) {	int len = 0;	while (argv && *argv) {		len += (strlen(*argv) + 1);		argv++;	}	return (len);}/* * int joinarray(char * const *argv, char *buffer, char delim) * * notes: * *	Copy all the ARGV strings into the end of BUFFER *	separating them with DELIM.  BUFFER is assumed to have *	enough space to hold everything and to be already null-terminated. * * return: * *	0 unless argv or buffer is NULL. * * */static intjoinarray(char * const *argv, char *buffer, char delim) {	char * const *p;	char sep[2];	if (argv == NULL || buffer == NULL) {		errno = EINVAL;		return (-1);	}	sep[0] = delim;	sep[1] = 0x0;	for (p = argv ; *p != NULL ; p++) {		strcat(buffer, *p);		if (*(p + 1) != NULL) {			strcat(buffer, sep);		}	}	return (0);}/* * static char * getfield(char **res, size_t reslen, char **ptr, char delim) * * notes: * *	Stores in *RES, which is a buffer of length RESLEN, a *	copy of the bytes from *PTR up to and including the first *	instance of DELIM. If *RES is NULL, then it will be *	assigned a malloced buffer to hold the copy. *PTR is *	modified to point at the found delimiter. * * return: * *	If there was no delimiter, then NULL is returned, *	otherewise *RES is returned. * */static char *getfield(char **res, size_t reslen, char **ptr, char delim) {	char *q;	if (res == NULL || ptr == NULL || *ptr == NULL) {		errno = EINVAL;		return (NULL);	}	q = strchr(*ptr, delim);	if (q == NULL) {		errno = EINVAL;		return (NULL);	} else {		if (*res == NULL) {			*res = strndup(*ptr, q - *ptr);		} else {			if ((size_t)(q - *ptr + 1) > reslen) { /* to big for res */				errno = EINVAL;				return (NULL);			} else {				strncpy(*res, *ptr, q - *ptr);				(*res)[q - *ptr] = 0x0;			}		}		*ptr = q + 1;	}	return (*res);}#ifndef HAVE_STRNDUP/* * static char * strndup(const char *str, size_t len) * * notes: * *	like strdup, except do len bytes instead of the whole string. Always *	null-terminates. * * return: * *	The newly malloced string. * */static char *strndup(const char *str, size_t len) {	char *p = malloc(len + 1);	if (p == NULL)		return (NULL);	strncpy(p, str, len);	p[len] = 0x0;	return (p);}#endif#if WANT_MAIN/* * static int strcmp_nws(const char *a, const char *b) * * notes: * *	do a strcmp, except uneven lengths of whitespace compare the same * * return: * */static intstrcmp_nws(const char *a, const char *b) {	while (*a && *b) {		if (isspace(*a) && isspace(*b)) {			do {				a++;			} while (isspace(*a));			do {				b++;			} while (isspace(*b));		}		if (*a < *b)			return (-1);		else if (*a > *b)			return (1);		a++;		b++;;	}	if (*a == *b)		return (0);	else if (*a > *b)		return (1);	else		return (-1);}#endif/* * static void free_array(char **argv, size_t entries) * * notes: * *	Free argv and each of the pointers inside it. The end of *	the array is when a NULL pointer is found inside. If *	entries is > 0, then NULL pointers inside the array do *	not indicate the end of the array. * */static voidfree_array(char **argv, size_t entries) {	char **p = argv;	int useEntries = (entries > 0U);	if (argv == NULL)		return;	while ((useEntries && entries > 0U) || *p) {		if (*p)			free(*p);		p++;		if (useEntries)			entries--;	}	free(argv);}/* ************************************************** */#if WANT_MAIN/* takes an option to indicate what sort of marshalling(read the code) and   an argument. If the argument looks like a marshalled buffer(has a ':'   embedded) then it's unmarshalled and the remarshalled and the new string   is compared to the old one.*/intmain(int argc, char **argv) {	char buffer[1024];	char *b = &buffer[0];	size_t len = sizeof buffer;	char option;	if (argc < 2 || argv[1][0] != '-')		exit(1);	option = argv[1][1];	argv++;	argc--;#if 0	{		char buff[10];		char *p = argv[1], *q = &buff[0];		while (getfield(&q, sizeof buff, &p, ':') != NULL) {			printf("field: \"%s\"\n", q);			p++;		}		printf("p is now \"%s\"\n", p);	}#endif#if 0	{		char **x = splitarray(argv[1], argv[1] + strlen(argv[1]),				      argv[2][0]);		char **p;		if (x == NULL)			printf("split failed\n");		for (p = x ; p != NULL && *p != NULL ; p++) {			printf("\"%s\"\n", *p);		}	}#endif#if 1	switch(option) {	case 'n': {		struct nwent ne;		int i;		if (strchr(argv[1], ':') != NULL) {			if (irp_unmarshall_nw(&ne, argv[1]) != 0) {				printf("Unmarhsalling failed\n");				exit(1);			}			printf("Name: \"%s\"\n", ne.n_name);			printf("Aliases:");			for (i = 0 ; ne.n_aliases[i] != NULL ; i++)				printf("\n\t\"%s\"", ne.n_aliases[i]);			printf("\nAddrtype: %s\n", ADDR_T_STR(ne.n_addrtype));			inet_net_ntop(ne.n_addrtype, ne.n_addr, ne.n_length,				      buffer, sizeof buffer);			printf("Net: \"%s\"\n", buffer);			*((long*)ne.n_addr) = htonl(*((long*)ne.n_addr));			inet_net_ntop(ne.n_addrtype, ne.n_addr, ne.n_length,				      buffer, sizeof buffer);			printf("Corrected Net: \"%s\"\n", buffer);		} else {			struct netent *np1 = getnetbyname(argv[1]);			ne.n_name = np1->n_name;			ne.n_aliases = np1->n_aliases;			ne.n_addrtype = np1->n_addrtype;			ne.n_addr = &np1->n_net;			ne.n_length = (IN_CLASSA(np1->n_net) ?				       8 :				       (IN_CLASSB(np1->n_net) ?					16 :					(IN_CLASSC(np1->n_net) ?					 24 : -1)));			np1->n_net = htonl(np1->n_net);			if (irp_marshall_nw(&ne, &b, &len) != 0) {				printf("Marshalling failed\n");			}			printf("%s\n", b);		}		break;	}	case 'r': {		char **hosts, **users, **domains;		size_t entries;		int i;		char *buff;		size_t size;		char *ngname;		if (strchr(argv[1], '(') != NULL) {			if (irp_unmarshall_ng(&ngname, &entries,					      &hosts, &users, &domains,					      argv[1]) != 0) {				printf("unmarshall failed\n");				exit(1);			}#define STRVAL(x) (x == NULL ? "*" : x)			printf("%s {\n", ngname);			for (i = 0 ; i < entries ; i++)				printf("\t\"%s\" : \"%s\" : \"%s\"\n",				       STRVAL(hosts[i]),				       STRVAL(users[i]),				       STRVAL(domains[i]));			printf("}\n\n\n");			irp_marshall_ng_start(ngname, NULL, &size);			for (i = 0 ; i < entries ; i++)				irp_marshall_ng_next(hosts[i], users[i],						     domains[i], NULL, &size);			irp_marshall_ng_end(NULL, &size);			buff = malloc(size);			irp_marshall_ng_start(ngname, buff, &size);			for (i = 0 ; i < entries ; i++) {				if (irp_marshall_ng_next(hosts[i], users[i],							 domains[i], buff,							 &size) != 0)					printf("next marshalling failed.\n");			}			irp_marshall_ng_end(buff, &size);			if (strcmp_nws(argv[1], buff) != 0) {				printf("compare failed:\n\t%s\n\t%s\n",				       buffer, argv[1]);			} else {				printf("compare ok\n");			}		} else {			char *h, *u, *d, *buff;			size_t size;			/* run through two times. First to figure out how			   much of a buffer we need. Second to do the			   actual marshalling */			setnetgrent(argv[1]);			irp_marshall_ng_start(argv[1], NULL, &size);			while (getnetgrent(&h, &u, &d) == 1)				irp_marshall_ng_next(h, u, d, NULL, &size);			irp_marshall_ng_end(NULL, &size);			endnetgrent(argv[1]);			buff = malloc(size);			setnetgrent(argv[1]);			if (irp_marshall_ng_start(argv[1], buff, &size) != 0)				printf("Marshalling start failed\n");			while (getnetgrent(&h, &u, &d) == 1) {				if (irp_marshall_ng_next(h, u, d, buff, &size)				    != 0) {					printf("Marshalling failed\n");				}			}			irp_marshall_ng_end(buff, &size);			endnetgrent();			printf("success: %s\n", buff);		}		break;	}	case 'h': {		struct hostent he, *hp;		int i;		if (strchr(argv[1], '@') != NULL) {			if (irp_unmarshall_ho(&he, argv[1]) != 0) {				printf("unmarshall failed\n");				exit(1);			}			printf("Host: \"%s\"\nAliases:", he.h_name);			for (i = 0 ; he.h_aliases[i] != NULL ; i++)				printf("\n\t\t\"%s\"", he.h_aliases[i]);			printf("\nAddr Type: \"%s\"\n",			       ADDR_T_STR(he.h_addrtype));			printf("Length: %d\nAddresses:", he.h_length);			for (i = 0 ; he.h_addr_list[i] != 0 ; i++) {				inet_ntop(he.h_addrtype, he.h_addr_list[i],					  buffer, sizeof buffer);				printf("\n\t\"%s\"\n", buffer);			}			printf("\n\n");			irp_marshall_ho(&he, &b, &len);			if (strcmp(argv[1], buffer) != 0) {				printf("compare failed:\n\t\"%s\"\n\t\"%s\"\n",				       buffer, argv[1]);			} else {				printf("compare ok\n");			}		} else {			if ((hp = gethostbyname(argv[1])) == NULL) {				perror("gethostbyname");				printf("\"%s\"\n", argv[1]);				exit(1);			}			if (irp_marshall_ho(hp, &b, &len) != 0) {				printf("irp_marshall_ho failed\n");				exit(1);			}			printf("success: \"%s\"\n", buffer);		}		break;	}	case 's': {		struct servent *sv;		struct servent sv1;		if (strchr(argv[1], ':') != NULL) {			sv = &sv1;			memset(sv, 0xef, sizeof (struct servent));			if (irp_unmarshall_sv(sv, argv[1]) != 0) {				printf("unmarshall failed\n");			}			irp_marshall_sv(sv, &b, &len);			if (strcmp(argv[1], buffer) != 0) {				printf("compare failed:\n\t\"%s\"\n\t\"%s\"\n",				       buffer, argv[1]);			} else {				printf("compare ok\n");			}		} else {			if ((sv = getservbyname(argv[1], argv[2])) == NULL) {				perror("getservent");				exit(1);			}			if (irp_marshall_sv(sv, &b, &len) != 0) {				printf("irp_marshall_sv failed\n");				exit(1);			}			printf("success: \"%s\"\n", buffer);		}		break;	}	case 'g': {		struct group *gr;		struct group gr1;		if (strchr(argv[1], ':') != NULL) {			gr = &gr1;			memset(gr, 0xef, sizeof (struct group));			if (irp_unmarshall_gr(gr, argv[1]) != 0) {				printf("unmarshall failed\n");			}			irp_marshall_gr(gr, &b, &len);			if (strcmp(argv[1], buffer) != 0) {				printf("compare failed:\n\t\"%s\"\n\t\"%s\"\n",				       buffer, argv[1]);			} else {				printf("compare ok\n");			}		} else {			if ((gr = getgrnam(argv[1])) == NULL) {				perror("getgrnam");				exit(1);			}			if (irp_marshall_gr(gr, &b, &len) != 0) {				printf("irp_marshall_gr failed\n");				exit(1);			}			printf("success: \"%s\"\n", buffer);		}		break;	}	case 'p': {		struct passwd *pw;		struct passwd pw1;		if (strchr(argv[1], ':') != NULL) {			pw = &pw1;			memset(pw, 0xef, sizeof (*pw));			if (irp_unmarshall_pw(pw, argv[1]) != 0) {				printf("unmarshall failed\n");				exit(1);			}			printf("User: \"%s\"\nPasswd: \"%s\"\nUid: %ld\nGid: %ld\n",			       pw->pw_name, pw->pw_passwd, (long)pw->pw_uid,			       (long)pw->pw_gid);			printf("Class: \"%s\"\nChange: %ld\nGecos: \"%s\"\n",			       pw->pw_class, (long)pw->pw_change, pw->pw_gecos);			printf("Shell: \"%s\"\nDirectory: \"%s\"\n",			       pw->pw_shell, pw->pw_dir);			pw = getpwnam(pw->pw_name);			irp_marshall_pw(pw, &b, &len);			if (strcmp(argv[1], buffer) != 0) {				printf("compare failed:\n\t\"%s\"\n\t\"%s\"\n",				       buffer, argv[1]);			} else {				printf("compare ok\n");			}		} else {			if ((pw = getpwnam(argv[1])) == NULL) {				perror("getpwnam");				exit(1);			}			if (irp_marshall_pw(pw, &b, &len) != 0) {				printf("irp_marshall_pw failed\n");				exit(1);			}			printf("success: \"%s\"\n", buffer);		}		break;	}	default:		printf("Wrong option: %c\n", option);		break;	}#endif	return (0);}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青草一区二区三区| 欧美丰满少妇xxxbbb| 欧美自拍偷拍一区| 久久综合狠狠综合久久综合88| 国产日韩欧美亚洲| 男女激情视频一区| 欧美网站大全在线观看| 亚洲欧洲av在线| 国产最新精品免费| 欧美一二三在线| 性久久久久久久久久久久| 97久久精品人人澡人人爽| 久久精品综合网| 久久精品国产网站| 欧美浪妇xxxx高跟鞋交| 亚洲影视在线播放| 91丨九色丨国产丨porny| 中文在线一区二区| 精品一区二区国语对白| 日韩区在线观看| 日本欧美一区二区| 欧美日韩午夜在线视频| 一区二区在线免费| 99在线热播精品免费| 欧美极品aⅴ影院| 国产精品一区二区不卡| 久久久99久久| 国产一区二区不卡| 精品久久免费看| 韩国精品久久久| 久久久亚洲国产美女国产盗摄| 视频一区二区三区在线| 欧美精品黑人性xxxx| 亚洲国产精品综合小说图片区| 日本高清不卡视频| 亚洲综合无码一区二区| 91浏览器打开| 国产精品你懂的在线| 不卡大黄网站免费看| 国产精品福利一区二区| 91丨porny丨中文| 国产精品国产馆在线真实露脸| 成人av免费在线| 亚洲男人的天堂在线aⅴ视频| 成人福利视频网站| 亚洲丝袜另类动漫二区| 91亚洲永久精品| 国产精品欧美极品| www.亚洲激情.com| 亚洲人成网站精品片在线观看| 91麻豆.com| 天天综合色天天| 精品理论电影在线| 国产99久久久久| 国产亚洲欧美日韩日本| 99国产一区二区三精品乱码| 亚洲欧美日韩在线不卡| 91久久国产最好的精华液| 亚洲免费观看视频| 91精品久久久久久蜜臀| 国产东北露脸精品视频| 国产精品欧美经典| 欧美三级日韩三级国产三级| 免费人成精品欧美精品| 久久影音资源网| 99re热视频这里只精品| 石原莉奈一区二区三区在线观看| 久久久亚洲精品一区二区三区| 一道本成人在线| 日韩制服丝袜av| 国产亚洲一区二区三区| 欧美日韩综合在线| 成人做爰69片免费看网站| 亚洲成a人片在线不卡一二三区| 久久久亚洲精华液精华液精华液| 99热这里都是精品| 精品影院一区二区久久久| 亚洲欧美日韩中文播放| 久久久久久亚洲综合| 精品视频全国免费看| 国产99久久久久久免费看农村| 极品美女销魂一区二区三区免费| 亚洲欧洲综合另类在线| 久久久久久久久久美女| 欧美在线啊v一区| 不卡欧美aaaaa| 狠狠色丁香久久婷婷综合丁香| 亚洲成av人片一区二区梦乃| 中文一区在线播放| 精品蜜桃在线看| 欧美一区二区三级| 色婷婷综合中文久久一本| 国产精品中文欧美| 麻豆精品精品国产自在97香蕉| 亚洲综合精品久久| 综合久久国产九一剧情麻豆| 国产亚洲欧美色| 精品国产乱码久久久久久久| 欧美日韩成人激情| 欧美天天综合网| 色先锋aa成人| 91在线国内视频| 成人深夜视频在线观看| 国产一区二区三区电影在线观看| 丝袜美腿高跟呻吟高潮一区| 亚洲成人激情av| 亚洲综合在线电影| 伊人开心综合网| 亚洲乱码中文字幕| 中文字幕一区二区视频| 中文无字幕一区二区三区| 久久一留热品黄| 久久久国产一区二区三区四区小说| 欧美tickling挠脚心丨vk| 91精品久久久久久蜜臀| 日韩视频在线永久播放| 欧美一级精品在线| 91精品国产入口| 日韩欧美视频在线| 久久蜜桃av一区精品变态类天堂 | 一区二区三区日韩精品视频| 国产喂奶挤奶一区二区三区| 久久久久久久久久久电影| 欧美精品一区二区蜜臀亚洲| 久久久久久毛片| 国产精品色眯眯| 亚洲婷婷综合色高清在线| 亚洲激情在线播放| 香港成人在线视频| 久久99在线观看| 成人国产在线观看| 色婷婷综合久色| 欧美日韩精品福利| 欧美大胆一级视频| 国产精品久久久久影院| 亚洲少妇中出一区| 亚洲国产精品影院| 久久er精品视频| 成人黄色免费短视频| 欧洲日韩一区二区三区| 欧美另类久久久品| 国产色爱av资源综合区| 亚洲精品水蜜桃| 久久精品国产在热久久| 成人av在线资源| 在线电影一区二区三区| 精品国产乱码久久久久久图片| 国产精品嫩草99a| 亚洲成人7777| 国产91综合一区在线观看| 在线观看一区二区视频| 日韩欧美aaaaaa| 中文字幕一区av| 奇米精品一区二区三区四区| 成人高清视频在线观看| 欧美日韩久久不卡| 国产日韩v精品一区二区| 亚洲与欧洲av电影| 国产精品99久久不卡二区| 欧洲中文字幕精品| 欧美国产亚洲另类动漫| 日本在线不卡视频| 99久久99久久精品国产片果冻| 欧美顶级少妇做爰| 国产精品久久久久久亚洲毛片 | 成人免费视频视频| 91精品国产综合久久久蜜臀图片| 国产清纯在线一区二区www| 香港成人在线视频| 97超碰欧美中文字幕| 日韩美女视频在线| 亚洲一二三专区| 99r国产精品| 国产亚洲精久久久久久| 午夜久久久久久久久久一区二区| 成人免费av资源| 欧美电影免费观看高清完整版 | 五月天中文字幕一区二区| 94色蜜桃网一区二区三区| www成人在线观看| 日韩国产高清影视| 色婷婷av一区二区三区大白胸| 国产午夜精品久久久久久久| 蜜桃久久精品一区二区| 8x福利精品第一导航| 亚洲亚洲人成综合网络| 91天堂素人约啪| 国产精品天美传媒| 国产久卡久卡久卡久卡视频精品| 欧美精品在线观看播放| 亚洲乱码国产乱码精品精可以看| 国产成人av在线影院| 久久精子c满五个校花| 久99久精品视频免费观看| 日韩一区二区三| 热久久国产精品| 日韩免费电影一区| 久久超级碰视频| www一区二区| 国产精品99久久久久久久vr |