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

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

?? nfsmount.c

?? 手機嵌入式Linux下可用的busybox源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
				tcp = !val;			else if (!strcmp(opt, "lock")) {				if (nfs_mount_version >= 3)					nolock = !val;				else					printf(_("Warning: option nolock is not supported.\n"));			} else {				printf(_("unknown nfs mount option: "					   "%s%s\n"), val ? "" : "no", opt);				goto fail;			}		}	}	proto = (tcp) ? IPPROTO_TCP : IPPROTO_UDP;	data.flags = (soft ? NFS_MOUNT_SOFT : 0)		| (intr ? NFS_MOUNT_INTR : 0)		| (posix ? NFS_MOUNT_POSIX : 0)		| (nocto ? NFS_MOUNT_NOCTO : 0)		| (noac ? NFS_MOUNT_NOAC : 0);#if NFS_MOUNT_VERSION >= 2	if (nfs_mount_version >= 2)		data.flags |= (tcp ? NFS_MOUNT_TCP : 0);#endif#if NFS_MOUNT_VERSION >= 3	if (nfs_mount_version >= 3)		data.flags |= (nolock ? NFS_MOUNT_NONLM : 0);#endif	if (nfsvers > MAX_NFSPROT) {		error_msg("NFSv%d not supported!", nfsvers);		return 0;	}	if (mountvers > MAX_NFSPROT) {		error_msg("NFSv%d not supported!", nfsvers);		return 0;	}	if (nfsvers && !mountvers)		mountvers = (nfsvers < 3) ? 1 : nfsvers;	if (nfsvers && nfsvers < mountvers) {		mountvers = nfsvers;	}	/* Adjust options if none specified */	if (!data.timeo)		data.timeo = tcp ? 70 : 7;#ifdef NFS_MOUNT_DEBUG	printf("rsize = %d, wsize = %d, timeo = %d, retrans = %d\n",		data.rsize, data.wsize, data.timeo, data.retrans);	printf("acreg (min, max) = (%d, %d), acdir (min, max) = (%d, %d)\n",		data.acregmin, data.acregmax, data.acdirmin, data.acdirmax);	printf("port = %d, bg = %d, retry = %d, flags = %.8x\n",		port, bg, retry, data.flags);	printf("mountprog = %d, mountvers = %d, nfsprog = %d, nfsvers = %d\n",		mountprog, mountvers, nfsprog, nfsvers);	printf("soft = %d, intr = %d, posix = %d, nocto = %d, noac = %d\n",		(data.flags & NFS_MOUNT_SOFT) != 0,		(data.flags & NFS_MOUNT_INTR) != 0,		(data.flags & NFS_MOUNT_POSIX) != 0,		(data.flags & NFS_MOUNT_NOCTO) != 0,		(data.flags & NFS_MOUNT_NOAC) != 0);#if NFS_MOUNT_VERSION >= 2	printf("tcp = %d\n",		(data.flags & NFS_MOUNT_TCP) != 0);#endif#endif	data.version = nfs_mount_version;	*mount_opts = (char *) &data;	if (*flags & MS_REMOUNT)		return 0;	/*	 * If the previous mount operation on the same host was	 * backgrounded, and the "bg" for this mount is also set,	 * give up immediately, to avoid the initial timeout.	 */	if (bg && !running_bg &&	    prev_bg_host && strcmp(hostname, prev_bg_host) == 0) {		if (retry > 0)			retval = EX_BG;		return retval;	}	/* create mount deamon client */	/* See if the nfs host = mount host. */	if (mounthost) {	  if (mounthost[0] >= '0' && mounthost[0] <= '9') {	    mount_server_addr.sin_family = AF_INET;	    mount_server_addr.sin_addr.s_addr = inet_addr(hostname);	  } else {		  if ((hp = gethostbyname(mounthost)) == NULL) {			  herror_msg("%s", mounthost);			  goto fail;		  } else {			  if (hp->h_length > sizeof(struct in_addr)) {				  error_msg("got bad hp->h_length?");				  hp->h_length = sizeof(struct in_addr);			  }			  mount_server_addr.sin_family = AF_INET;			  memcpy(&mount_server_addr.sin_addr,				 hp->h_addr, hp->h_length);		  }	  }	}	/*	 * The following loop implements the mount retries. On the first	 * call, "running_bg" is 0. When the mount times out, and the	 * "bg" option is set, the exit status EX_BG will be returned.	 * For a backgrounded mount, there will be a second call by the	 * child process with "running_bg" set to 1.	 *	 * The case where the mount point is not present and the "bg"	 * option is set, is treated as a timeout. This is done to	 * support nested mounts.	 *	 * The "retry" count specified by the user is the number of	 * minutes to retry before giving up.	 *	 * Only the first error message will be displayed.	 */	retry_timeout.tv_sec = 3;	retry_timeout.tv_usec = 0;	total_timeout.tv_sec = 20;	total_timeout.tv_usec = 0;	timeout = time(NULL) + 60 * retry;	prevt = 0;	t = 30;	val = 1;	for (;;) {		if (bg && stat(node, &statbuf) == -1) {			if (running_bg) {				sleep(val);	/* 1, 2, 4, 8, 16, 30, ... */				val *= 2;				if (val > 30)					val = 30;			}		} else {			/* be careful not to use too many CPU cycles */			if (t - prevt < 30)				sleep(30);			pm_mnt = get_mountport(&mount_server_addr,				       mountprog,				       mountvers,				       proto, 				       mountport);			/* contact the mount daemon via TCP */			mount_server_addr.sin_port = htons(pm_mnt->pm_port);			msock = RPC_ANYSOCK;			switch (pm_mnt->pm_prot) {			case IPPROTO_UDP:				mclient = clntudp_create(&mount_server_addr,						 pm_mnt->pm_prog,						 pm_mnt->pm_vers,						 retry_timeout,						 &msock);		  if (mclient)			  break;		  mount_server_addr.sin_port = htons(pm_mnt->pm_port);		  msock = RPC_ANYSOCK;		case IPPROTO_TCP:			mclient = clnttcp_create(&mount_server_addr,						 pm_mnt->pm_prog,						 pm_mnt->pm_vers,						 &msock, 0, 0);			break;		default:			mclient = 0;			}			if (mclient) {				/* try to mount hostname:pathname */				mclient->cl_auth = authunix_create_default();			/* make pointers in xdr_mountres3 NULL so			 * that xdr_array allocates memory for us			 */			memset(&status, 0, sizeof(status));			if (pm_mnt->pm_vers == 3)				clnt_stat = clnt_call(mclient, MOUNTPROC3_MNT,						      (xdrproc_t) xdr_dirpath,						      (caddr_t) &pathname,						      (xdrproc_t) xdr_mountres3,						      (caddr_t) &status,					total_timeout);			else				clnt_stat = clnt_call(mclient, MOUNTPROC_MNT,						      (xdrproc_t) xdr_dirpath,						      (caddr_t) &pathname,						      (xdrproc_t) xdr_fhstatus,						      (caddr_t) &status,						      total_timeout);				if (clnt_stat == RPC_SUCCESS)					break;		/* we're done */				if (errno != ECONNREFUSED) {					clnt_perror(mclient, "mount");					goto fail;	/* don't retry */				}				if (!running_bg && prevt == 0)					clnt_perror(mclient, "mount");				auth_destroy(mclient->cl_auth);				clnt_destroy(mclient);				mclient = 0;				close(msock);			} else {				if (!running_bg && prevt == 0)					clnt_pcreateerror("mount");			}			prevt = t;		}		if (!bg)		        goto fail;		if (!running_bg) {			prev_bg_host = xstrdup(hostname);			if (retry > 0)				retval = EX_BG;			goto fail;		}		t = time(NULL);		if (t >= timeout)			goto fail;	}	nfsvers = (pm_mnt->pm_vers < 2) ? 2 : pm_mnt->pm_vers;	if (nfsvers == 2) {		if (status.nfsv2.fhs_status != 0) {			error_msg("%s:%s failed, reason given by server: %s",				hostname, pathname,				nfs_strerror(status.nfsv2.fhs_status));			goto fail;		}		memcpy(data.root.data,		       (char *) status.nfsv2.fhstatus_u.fhs_fhandle,		       NFS_FHSIZE);#if NFS_MOUNT_VERSION >= 4		data.root.size = NFS_FHSIZE;		memcpy(data.old_root.data,		       (char *) status.nfsv2.fhstatus_u.fhs_fhandle,		       NFS_FHSIZE);#endif	} else {#if NFS_MOUNT_VERSION >= 4		fhandle3 *my_fhandle;		if (status.nfsv3.fhs_status != 0) {			error_msg("%s:%s failed, reason given by server: %s",				hostname, pathname,				nfs_strerror(status.nfsv3.fhs_status));			goto fail;		}		my_fhandle = &status.nfsv3.mountres3_u.mountinfo.fhandle;		memset(data.old_root.data, 0, NFS_FHSIZE);		memset(&data.root, 0, sizeof(data.root));		data.root.size = my_fhandle->fhandle3_len;		memcpy(data.root.data,		       (char *) my_fhandle->fhandle3_val,		       my_fhandle->fhandle3_len);		data.flags |= NFS_MOUNT_VER3;#endif	}	/* create nfs socket for kernel */	if (tcp) {		if (nfs_mount_version < 3) {	     		printf(_("NFS over TCP is not supported.\n"));			goto fail;		}		fsock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);	} else		fsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);	if (fsock < 0) {		perror(_("nfs socket"));		goto fail;	}	if (bindresvport(fsock, 0) < 0) {		perror(_("nfs bindresvport"));		goto fail;	}	if (port == 0) {		server_addr.sin_port = PMAPPORT;		port = pmap_getport(&server_addr, nfsprog, nfsvers,			tcp ? IPPROTO_TCP : IPPROTO_UDP);		if (port == 0)			port = NFS_PORT;#ifdef NFS_MOUNT_DEBUG		else			printf(_("used portmapper to find NFS port\n"));#endif	}#ifdef NFS_MOUNT_DEBUG	printf(_("using port %d for nfs deamon\n"), port);#endif	server_addr.sin_port = htons(port);	 /*	  * connect() the socket for kernels 1.3.10 and below only,	  * to avoid problems with multihomed hosts.	  * --Swen	  */	if (get_kernel_revision() <= 66314	    && connect(fsock, (struct sockaddr *) &server_addr,		       sizeof (server_addr)) < 0) {		perror(_("nfs connect"));		goto fail;	}	/* prepare data structure for kernel */	data.fd = fsock;	memcpy((char *) &data.addr, (char *) &server_addr, sizeof(data.addr));	strncpy(data.hostname, hostname, sizeof(data.hostname));	/* clean up */	auth_destroy(mclient->cl_auth);	clnt_destroy(mclient);	close(msock);	return 0;	/* abort */fail:	if (msock != -1) {		if (mclient) {			auth_destroy(mclient->cl_auth);			clnt_destroy(mclient);		}		close(msock);	}	if (fsock != -1)		close(fsock);	return retval;}	/* * We need to translate between nfs status return values and * the local errno values which may not be the same. * * Andreas Schwab <schwab@LS5.informatik.uni-dortmund.de>: change errno: * "after #include <errno.h> the symbol errno is reserved for any use, *  it cannot even be used as a struct tag or field name". */#ifndef EDQUOT#define EDQUOT	ENOSPC#endifstatic struct {	enum nfs_stat stat;	int errnum;} nfs_errtbl[] = {	{ NFS_OK,		0		},	{ NFSERR_PERM,		EPERM		},	{ NFSERR_NOENT,		ENOENT		},	{ NFSERR_IO,		EIO		},	{ NFSERR_NXIO,		ENXIO		},	{ NFSERR_ACCES,		EACCES		},	{ NFSERR_EXIST,		EEXIST		},	{ NFSERR_NODEV,		ENODEV		},	{ NFSERR_NOTDIR,	ENOTDIR		},	{ NFSERR_ISDIR,		EISDIR		},#ifdef NFSERR_INVAL	{ NFSERR_INVAL,		EINVAL		},	/* that Sun forgot */#endif	{ NFSERR_FBIG,		EFBIG		},	{ NFSERR_NOSPC,		ENOSPC		},	{ NFSERR_ROFS,		EROFS		},	{ NFSERR_NAMETOOLONG,	ENAMETOOLONG	},	{ NFSERR_NOTEMPTY,	ENOTEMPTY	},	{ NFSERR_DQUOT,		EDQUOT		},	{ NFSERR_STALE,		ESTALE		},#ifdef EWFLUSH	{ NFSERR_WFLUSH,	EWFLUSH		},#endif	/* Throw in some NFSv3 values for even more fun (HP returns these) */	{ 71,			EREMOTE		},	{ -1,			EIO		}};static char *nfs_strerror(int status){	int i;	static char buf[256];	for (i = 0; nfs_errtbl[i].stat != -1; i++) {		if (nfs_errtbl[i].stat == status)			return strerror(nfs_errtbl[i].errnum);	}	sprintf(buf, _("unknown nfs status return value: %d"), status);	return buf;}static bool_txdr_fhandle (XDR *xdrs, fhandle objp){	//register int32_t *buf;	 if (!xdr_opaque (xdrs, objp, FHSIZE))		 return FALSE;	return TRUE;}bool_txdr_fhstatus (XDR *xdrs, fhstatus *objp){	//register int32_t *buf;	 if (!xdr_u_int (xdrs, &objp->fhs_status))		 return FALSE;	switch (objp->fhs_status) {	case 0:		 if (!xdr_fhandle (xdrs, objp->fhstatus_u.fhs_fhandle))			 return FALSE;		break;	default:		break;	}	return TRUE;}bool_txdr_dirpath (XDR *xdrs, dirpath *objp){	//register int32_t *buf;	 if (!xdr_string (xdrs, objp, MNTPATHLEN))		 return FALSE;	return TRUE;}bool_txdr_fhandle3 (XDR *xdrs, fhandle3 *objp){	//register int32_t *buf;	 if (!xdr_bytes (xdrs, (char **)&objp->fhandle3_val, (u_int *) &objp->fhandle3_len, FHSIZE3))		 return FALSE;	return TRUE;}bool_txdr_mountres3_ok (XDR *xdrs, mountres3_ok *objp){	//register int32_t *buf;	 if (!xdr_fhandle3 (xdrs, &objp->fhandle))		 return FALSE;	 if (!xdr_array (xdrs, (char **)&objp->auth_flavours.auth_flavours_val, (u_int *) &objp->auth_flavours.auth_flavours_len, ~0,		sizeof (int), (xdrproc_t) xdr_int))		 return FALSE;	return TRUE;}bool_txdr_mountstat3 (XDR *xdrs, mountstat3 *objp){	//register int32_t *buf;	 if (!xdr_enum (xdrs, (enum_t *) objp))		 return FALSE;	return TRUE;}bool_txdr_mountres3 (XDR *xdrs, mountres3 *objp){	//register int32_t *buf;	 if (!xdr_mountstat3 (xdrs, &objp->fhs_status))		 return FALSE;	switch (objp->fhs_status) {	case MNT_OK:		 if (!xdr_mountres3_ok (xdrs, &objp->mountres3_u.mountinfo))			 return FALSE;		break;	default:		break;	}	return TRUE;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜视频在线观看一区二区 | 国产高清不卡一区二区| 亚洲图片欧美色图| 亚洲精品国产一区二区精华液| 亚洲香肠在线观看| 欧美日韩在线观看一区二区| 99精品偷自拍| 欧美日韩免费高清一区色橹橹| 亚洲国产精品v| 亚洲人成人一区二区在线观看 | 亚洲一区免费观看| 国产成人精品免费在线| 欧美日韩不卡一区二区| 亚洲精品欧美专区| 成人动漫一区二区| 精品一区二区三区免费视频| 91视频免费观看| 国产精品入口麻豆九色| 国精品**一区二区三区在线蜜桃| 欧美日韩国产一区| 亚洲www啪成人一区二区麻豆| 99九九99九九九视频精品| 国产亚洲欧美中文| 国产在线精品免费av| 欧美不卡在线视频| 天天综合色天天综合色h| 亚洲尤物视频在线| 色就色 综合激情| 亚洲欧美日韩在线播放| 波多野结衣中文字幕一区二区三区 | 久久99国产精品久久| 777久久久精品| 日本不卡视频在线| 欧美电视剧在线看免费| 激情综合网最新| 精品av久久707| 国产乱子伦视频一区二区三区| www一区二区| 国产91在线|亚洲| 中文字幕一区视频| 在线精品视频一区二区三四| 亚洲成精国产精品女| 日韩欧美色综合网站| 国产精品1区2区| 国产精品不卡一区二区三区| 91欧美一区二区| 亚洲国产精品精华液网站| 欧美丰满一区二区免费视频| 久久精品国产在热久久| 久久久久久久久久久电影| 成人aa视频在线观看| 亚洲午夜久久久久久久久久久| 91精品国产欧美一区二区成人| 理论电影国产精品| 国产精品电影一区二区三区| 色呦呦日韩精品| 日本欧美在线观看| 国产精品婷婷午夜在线观看| 在线观看免费视频综合| 乱一区二区av| 亚洲欧洲日产国产综合网| 欧美日韩高清一区二区不卡| 精品一区精品二区高清| 亚洲视频在线一区观看| 91精品国产乱码久久蜜臀| 国产美女娇喘av呻吟久久| 亚洲综合色丁香婷婷六月图片| 日韩一区二区视频| 91小宝寻花一区二区三区| 日韩精品电影一区亚洲| 国产日韩欧美精品电影三级在线 | 国产一区二区三区蝌蚪| 中文字幕中文字幕一区二区| 538在线一区二区精品国产| 国产福利一区在线| 亚洲成av人片一区二区梦乃| 欧美激情艳妇裸体舞| 欧美久久婷婷综合色| 国产成人av电影| 秋霞午夜av一区二区三区| 亚洲欧美二区三区| 久久精品亚洲国产奇米99| 欧美日韩一区高清| 99国产精品久久久| 国产高清不卡一区二区| 久久国产成人午夜av影院| 亚洲在线视频免费观看| 国产精品伦理一区二区| 欧美第一区第二区| 67194成人在线观看| 91福利视频久久久久| 国产不卡在线一区| 精品一区二区国语对白| 亚洲超碰精品一区二区| 一区二区三区在线观看动漫| 国产性天天综合网| 精品欧美久久久| 91精品国产综合久久久久久久久久| 色综合天天综合给合国产| 国产成人精品一区二区三区网站观看| 青青国产91久久久久久| 天天免费综合色| 亚洲国产精品人人做人人爽| 亚洲视频综合在线| 亚洲欧美激情视频在线观看一区二区三区| 国产欧美精品区一区二区三区 | 日韩免费观看高清完整版在线观看| 在线观看亚洲a| 91国偷自产一区二区三区观看| 99视频在线观看一区三区| 成人一区二区在线观看| 成人黄色片在线观看| 成人免费va视频| av亚洲精华国产精华精华| 97超碰欧美中文字幕| av电影在线观看完整版一区二区| 不卡一区中文字幕| 97久久超碰国产精品电影| 97久久精品人人澡人人爽| 色婷婷亚洲精品| 欧美精品三级在线观看| 69av一区二区三区| 精品99999| 国产精品嫩草影院com| 综合网在线视频| 亚洲自拍与偷拍| 蜜桃视频免费观看一区| 极品瑜伽女神91| 成人免费av网站| 欧美一a一片一级一片| 欧美精品tushy高清| 日韩美女主播在线视频一区二区三区 | 国产精品不卡一区| 亚洲一区二区三区四区在线 | 天天操天天综合网| 国产在线精品免费| 色婷婷精品大在线视频| 欧美一区日本一区韩国一区| 国产婷婷色一区二区三区四区| 国产精品成人免费精品自在线观看| 亚洲伦理在线精品| 免费日本视频一区| 东方aⅴ免费观看久久av| 色偷偷久久一区二区三区| 制服丝袜亚洲色图| 日本一区二区免费在线观看视频| 亚洲欧美日韩国产成人精品影院 | 亚洲在线观看免费视频| 美国欧美日韩国产在线播放| 国产91丝袜在线18| 欧美浪妇xxxx高跟鞋交| 久久精品欧美日韩| 亚洲国产综合人成综合网站| 国产综合色在线| 91搞黄在线观看| 国产蜜臀97一区二区三区 | 日韩女优视频免费观看| 亚洲女爱视频在线| 国产一区二区精品在线观看| 欧洲精品中文字幕| 欧美激情综合在线| 免费在线观看视频一区| 95精品视频在线| 久久嫩草精品久久久精品一| 亚洲国产欧美在线| 成人av网站在线观看免费| 日韩免费高清电影| 丝袜亚洲精品中文字幕一区| jlzzjlzz国产精品久久| 26uuu久久天堂性欧美| 亚洲第一成年网| jlzzjlzz亚洲女人18| 国产亚洲精品aa午夜观看| 秋霞电影一区二区| 欧美精品v日韩精品v韩国精品v| 亚洲欧美日韩一区二区三区在线观看| 韩国女主播一区| 日韩视频中午一区| 亚洲成人久久影院| 91久久精品国产91性色tv| 亚洲国产成人私人影院tom| 久久国产精品99精品国产| 在线播放中文一区| 一区二区在线看| 色综合天天综合网国产成人综合天| 国产欧美精品日韩区二区麻豆天美| 精品一区二区三区香蕉蜜桃| 日韩一区二区三区视频在线| 亚洲成精国产精品女| 欧美三电影在线| 亚洲午夜影视影院在线观看| 色综合久久综合中文综合网| 亚洲同性gay激情无套| 99久久精品久久久久久清纯| 中文字幕在线观看不卡视频| 成人性生交大合| 国产精品国产三级国产普通话三级 | 久久尤物电影视频在线观看| 精品亚洲国产成人av制服丝袜 | 国产精品毛片高清在线完整版|