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

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

?? nfsdrv.c

?? VXWORKS源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
    char *	fullName,		/* full file or directory name */    int		perm			/* 4:read 2:write 1:execute */    )    {    diropres	dirResult;		/* directory info returned via nfs */    nfs_fh	dirHandle;		/* file's directory file handle */    int		retVal;			/* return from nfsLookUpByName */    /* NFS permissions */     int     nfsPerms;			/* permissions of the opened file */    char    machineName [AUTH_UNIX_FIELD_LEN];    int     uid;		        /* user ID */    int     gid;		        /* group ID */    int     nGids;		        /* number of groups */    int     gids [MAX_GRPS];	        /* array of group IDs */    BOOL    sameUid = FALSE;	        /* set to TRUE if users match */    BOOL    sameGid = FALSE;	        /* set to TRUE if groups match */    bzero ((char *) &dirResult, sizeof (dirResult));    bzero ((char *) &dirHandle, sizeof (dirHandle));    bzero ((char *) &gids, sizeof (int) * MAX_GRPS);    if ((retVal = nfsLookUpByName (pNfsDev->host, fullName, 				   &pNfsDev->fileHandle, 				   &dirResult, &dirHandle)) != OK)	return (retVal);	/* ERROR/FOLLOW_LINK. errno has S_nfsLib prefix */     nfsPerms = dirResult.diropres_u.diropres.attributes.mode;    nfsAuthUnixGet (machineName, &uid, &gid, &nGids, gids);     sameUid = (uid == dirResult.diropres_u.diropres.attributes.uid               ? TRUE : FALSE);     if (gid == dirResult.diropres_u.diropres.attributes.gid)	sameGid = TRUE;    else while (nGids)	if (gids [--nGids] == dirResult.diropres_u.diropres.attributes.gid)            {            sameGid = TRUE;            break;	    }    /* Check "other" permissions */        if (!sameGid && !sameUid &&	((nfsPerms & perm) == perm))        goto permission_ok;    /* check group permissions */        else if (sameGid && ((nfsPerms & (perm << 3)) == (perm << 3)))        goto permission_ok;    /* check user permissions */     else if (sameUid && ((nfsPerms & (perm << 6)) == (perm << 6)))        goto permission_ok;    else	{	errno = S_nfsDrv_PERMISSION_DENIED;	return (ERROR);		/* caller should set EACCES to errno */	}permission_ok:    return (OK);    }/********************************************************************************* nfsOpen - open an NFS file** This routine opens the remote file.* Called only by the I/O system.** RETURNS: pointer to open network file descriptor || FOLLOW_LINK || ERROR*/LOCAL int nfsOpen    (    NFS_DEV * pNfsDev,		/* pointer to nfs device */    char *    fileName,		/* remote file or directory name to open */    int       flags,		/* O_RDONLY, O_WRONLY, or O_RDWR and O_CREAT */    int       mode		/* UNIX chmod style */    )    {    int status = OK;    char *fullName;	                /* full file or directory name */    FAST NFS_FD * nfsFd;    diropres dirResult;			/* directory info returned via nfs */    int	retVal;    nfs_fh dirHandle;			/* file's directory file handle */    int openMode = flags & FD_MODE;	/* mode to open file with */    					/* (O_RDONLY, O_WRONLY, or O_RDWR */    /* NFS permissions */    int     filePermissions;	       	/* permissions of the opened file */    int	    requestPerms = 0;		/* requested file permissions */    char    machineName [AUTH_UNIX_FIELD_LEN];    int     uid;		        /* user ID */    int     gid;		        /* group ID */    int     nGids;		        /* number of groups */    int     gids [MAX_GRPS];	        /* array of group IDs */    BOOL    correctPerms = FALSE;       /* set to TRUE if perms match */    BOOL    sameUid = FALSE;	        /* set to TRUE if users match */    BOOL    sameGid = FALSE;	        /* set to TRUE if groups match */        if ((openMode != O_RDONLY) && (openMode != O_WRONLY) &&         (openMode != O_RDWR))	{	errnoSet (S_nfsDrv_BAD_FLAG_MODE);	return (ERROR);	}    if (strlen (fileName) >= nfsMaxPath)	{	errnoSet (S_nfsLib_NFSERR_NAMETOOLONG);	return (ERROR);	}    if ((fullName = (char *) alloca (nfsMaxPath)) == NULL)	return (ERROR);    if (fileName [0] == EOS)	{	if (flags & O_CREAT)	    {	    errnoSet (S_nfsDrv_CREATE_NO_FILE_NAME);	    return (ERROR);	    }	(void) strcpy (fullName, ".");	}    else	(void) strcpy (fullName, fileName);    /* truncate file - check the file has write-permission */    if (flags & O_TRUNC)	{	int err;	#define READ_PERMISSION 2        if ((err = nfsChkFilePerms (pNfsDev, fullName,				    READ_PERMISSION)) == FOLLOW_LINK)	    return (FOLLOW_LINK);	else if (err == ERROR && errno == S_nfsDrv_PERMISSION_DENIED)	    return (ERROR);	/* i.e. don't return if NFSERR_NOENT */        else if (err == OK)            {	    /* the file has write-permission, go for deletion */	    retVal = nfsDelete (pNfsDev, fullName);	    if ((retVal == ERROR) && !(flags & O_CREAT))		return (ERROR);	    else		{		if (retVal == FOLLOW_LINK)		    {		    (void) strcpy (fileName, fullName);		    return (FOLLOW_LINK);		    }		}	    }	} /* O_TRUNC */    if ((flags & O_CREAT) || (flags & O_TRUNC)) /* create file or directory */        {        retVal = nfsLookUpByName (pNfsDev->host, fullName,                                   &pNfsDev->fileHandle,                                   &dirResult, &dirHandle);        if (retVal == FOLLOW_LINK)            {            (void) strcpy (fileName, fullName);            return (FOLLOW_LINK);            }        status = nfsThingCreate (pNfsDev->host, fullName, &pNfsDev->fileHandle,                                 &dirResult, &dirHandle, (u_int)mode);        }    else                        /* open existing file or directory */        {        status = nfsLookUpByName (pNfsDev->host, fullName,                                   &pNfsDev->fileHandle,                                  &dirResult, &dirHandle);        }    if (status == ERROR)	return (ERROR);    /* Check file permissions */    filePermissions = dirResult.diropres_u.diropres.attributes.mode;    switch (openMode)        {	case O_RDONLY: requestPerms = 4; break;	case O_WRONLY: requestPerms = 2; break;	case O_RDWR:   requestPerms = 6; break;	}    /* Check if uid and gid match file uid and gid */        nfsAuthUnixGet (machineName, &uid, &gid, &nGids, gids);    sameUid = (uid == dirResult.diropres_u.diropres.attributes.uid	       ? TRUE : FALSE);        if (gid == dirResult.diropres_u.diropres.attributes.gid)        sameGid = TRUE;    else while (nGids)        if (gids [--nGids] == dirResult.diropres_u.diropres.attributes.gid)	    {	    sameGid = TRUE;	    break;	    }    /* Check "other" permissions */        if (!sameGid && !sameUid &&	((filePermissions & requestPerms) == requestPerms))        correctPerms = TRUE;    /* check group permissions */        else if (sameGid &&	     ((filePermissions & (requestPerms << 3)) == (requestPerms << 3)))        correctPerms = TRUE;    /* check user permissions */    else if (sameUid &&	     ((filePermissions & (requestPerms << 6)) == (requestPerms << 6)))        correctPerms = TRUE;    else	{	errno = S_nfsDrv_PERMISSION_DENIED;	return (ERROR);	}        /*     * If the name returned by nfsLookUpByName doesn't start with a     * slash, then nfsLookUpByName has changed the name to the link, but the     * name no longer includes the name of the correct device.  If you pass     * this to iosDevFind, it returns a path on the default device, which is     * wrong (unless, of course, you get lucky and you are in fact looking     * for something on the default device).  So, need to prepend the name of     * the NFS device if fullName doesn't include it already.     */    if (status == FOLLOW_LINK)        {	if (fullName [0] != '/')	    {	    pathCat (pNfsDev->devHdr.name, fullName, fileName);	    }	else	    {	    (void) strcpy (fileName, fullName);	    }	}    if (status != OK)	return (status);    if ((nfsFd = (NFS_FD *) KHEAP_ALLOC(sizeof (NFS_FD) + nfsCacheSize)) == NULL)	return (ERROR);    /* fill in file descriptor with newly retrieved information */    bcopy ((char *) &dirResult.diropres_u.diropres.file,	   (char *) &nfsFd->fileHandle, sizeof (nfs_fh));    bcopy ((char *) &dirHandle,	   (char *) &nfsFd->dirHandle, sizeof (nfs_fh));    bcopy ((char *) &dirResult.diropres_u.diropres.attributes,	   (char *) &nfsFd->fileAttr, sizeof (fattr));    nfsFd->fileCurByte	= 0;    nfsFd->mode		= openMode;    nfsFd->cacheValid	= FALSE;    nfsFd->cacheBuf	= (char *) ((u_int) nfsFd + sizeof (NFS_FD));    nfsFd->cacheCurByte = nfsFd->cacheBuf;    nfsFd->cacheDirty	= FALSE;    nfsFd->cacheBytesLeft = 0;    nfsFd->nfsDev	= pNfsDev;    nfsFd->nfsFdSem = semMCreate (mutexOptionsNfsDrv);    if (nfsFd->nfsFdSem == NULL)        {        free ( (char *)nfsFd);        return (ERROR);        }    return ((int) nfsFd);    }/********************************************************************************* nfsClose - close a remote file** Called only by the I/O system.** RETURNS: OK or ERROR if file failed to flush*/LOCAL STATUS nfsClose    (    FAST NFS_FD *nfsFd          /* nfs file descriptor */    )    {    int status = OK;    semTake (nfsFd->nfsFdSem, WAIT_FOREVER);    if (nfsFd->cacheDirty)	status = nfsCacheFlush (nfsFd);    semDelete (nfsFd->nfsFdSem);	/* terminate nfs fd semaphore */    KHEAP_FREE((char *) nfsFd);    /* close client if "auto close" is selected */    if (nfsAutoClose)	nfsClientClose ();    return (status == ERROR ? ERROR : OK);    }/********************************************************************************* nfsRead - read bytes from remote file** nfsRead reads the specified number of bytes from the open NFS* file and puts them into a buffer.  Bytes are read starting* from the point marked by the file pointer.  The file pointer is then* updated to point immediately after the last character that was read.** A cache is used for keeping nfs network reads and writes down to a minimum.** Called only by the I/O system.** SIDE EFFECTS: moves file pointer** RETURNS: number of bytes read or ERROR.*/LOCAL int nfsRead    (    FAST NFS_FD *nfsFd, /* pointer to open network file descriptor */    char *buf,          /* pointer to buffer to receive bytes */    FAST int maxBytes   /* max number of bytes to read into buffer */    )    {    int nRead;			/* number of bytes read from cache or net */    int nCacheRead;		/* number of bytes read into cache */    int readCount;		/* cum. no. of bytes read into user's buf */    STATUS status = OK;    /* check for valid maxBytes */    if (maxBytes < 0)	{	errnoSet (S_nfsDrv_INVALID_NUMBER_OF_BYTES);	return (ERROR);	}    if (maxBytes == 0)	return (0);    /* if file opened for O_WRONLY, don't read */    if (nfsFd->mode == O_WRONLY)	{	errnoSet (S_nfsDrv_WRITE_ONLY_CANNOT_READ);	return (ERROR);	}    readCount = 0;    semTake (nfsFd->nfsFdSem, WAIT_FOREVER);    if (nfsCacheSize == 0)	{	/* no caching */	readCount = nfsFileRead (nfsFd->nfsDev->host, &nfsFd->fileHandle,			         nfsFd->fileCurByte, (unsigned) maxBytes, buf,			         &nfsFd->fileAttr);	if (readCount < 0)	    {	    semGive (nfsFd->nfsFdSem);	    return (ERROR);	    }	status = nfsSeek (nfsFd, (int) nfsFd->fileCurByte + readCount);	}    else	{	/* read from cache */	while ((readCount < maxBytes) && (status != ERROR))	    {	    /* keep reading until all bytes requested are read,	     * or an error occurs,	     * or the end of file is hit	     */	    if (!nfsFd->cacheValid)		{		/* if the cache isn't valid,		 * freshen it by reading across the net.		 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
秋霞影院一区二区| 日韩视频在线永久播放| 日韩精品自拍偷拍| 夜夜嗨av一区二区三区网页| 国内精品视频一区二区三区八戒 | 成人教育av在线| 91精品国产丝袜白色高跟鞋| 亚洲人成7777| 粉嫩av一区二区三区| 日韩欧美国产三级电影视频| 一区二区三区资源| 99精品久久免费看蜜臀剧情介绍| 欧美变态tickling挠脚心| 婷婷中文字幕一区三区| 91精品91久久久中77777| 国产精品美女www爽爽爽| 国产在线一区二区综合免费视频| 欧美高清dvd| 一区二区三区欧美日韩| 97国产一区二区| 亚洲欧洲日韩av| 成人精品高清在线| 中文字幕在线观看不卡视频| 懂色av一区二区在线播放| 欧美大肚乱孕交hd孕妇| 日日夜夜精品视频免费| 欧美久久高跟鞋激| 免费av成人在线| 欧美成人女星排名| 国产美女久久久久| 久久精品欧美一区二区三区麻豆 | 99久久精品久久久久久清纯| 26uuu亚洲| 国产成人在线影院| 中文字幕一区二区三区av| 成人久久久精品乱码一区二区三区| 久久品道一品道久久精品| 国产精品原创巨作av| 欧美韩国一区二区| 93久久精品日日躁夜夜躁欧美| 亚洲欧美日韩国产另类专区| 欧美日韩在线免费视频| 日本免费在线视频不卡一不卡二| 欧美一区二区三区白人| 精品一区二区三区影院在线午夜| 国产三级精品三级在线专区| 波多野结衣在线一区| 亚洲激情av在线| 欧美一区二区视频在线观看2020| 美女精品自拍一二三四| 国产欧美日韩视频在线观看| 色综合天天在线| 香蕉久久夜色精品国产使用方法| 日韩一级精品视频在线观看| 国产剧情一区二区| 一区二区三区欧美| 精品久久人人做人人爱| 成人高清视频免费观看| 一区二区三区四区不卡在线| 欧美成人精品福利| 99vv1com这只有精品| 免费人成黄页网站在线一区二区| 久久综合狠狠综合| 91成人国产精品| 精品一区二区三区的国产在线播放| 国产精品免费久久久久| 欧美日韩国产美女| 成人午夜视频福利| 免费在线一区观看| 亚洲免费视频中文字幕| 精品国产99国产精品| 91欧美一区二区| 国产自产v一区二区三区c| 亚洲伊人色欲综合网| 久久香蕉国产线看观看99| 欧美亚洲另类激情小说| 国产精品99久久久久久似苏梦涵| 亚洲成人av资源| 国产精品福利一区| 26uuu欧美日本| 欧美精品自拍偷拍动漫精品| 91亚洲男人天堂| 国产美女久久久久| 欧美aⅴ一区二区三区视频| 日韩理论在线观看| 日本一区二区三级电影在线观看 | 在线一区二区三区做爰视频网站| 美女网站一区二区| 亚洲一二三区不卡| 国产精品传媒入口麻豆| 久久亚洲欧美国产精品乐播 | 色婷婷久久一区二区三区麻豆| 麻豆精品视频在线观看免费| 亚洲一区二区在线免费观看视频| 国产精品国产三级国产aⅴ原创| 精品久久99ma| 69堂成人精品免费视频| 欧美日韩小视频| 欧美亚洲国产一区在线观看网站| 本田岬高潮一区二区三区| 国产精品综合一区二区| 久久se这里有精品| 久久99久久精品| 美国毛片一区二区| 裸体一区二区三区| 蜜桃视频在线一区| 天天综合天天做天天综合| 亚洲一区二区三区视频在线播放| 亚洲人成亚洲人成在线观看图片| 国产精品日日摸夜夜摸av| 国产精品亲子伦对白| 中文一区二区在线观看| 中文字幕欧美日本乱码一线二线| 久久久一区二区| 久久久99精品免费观看| 久久久午夜电影| 一区二区三区中文字幕| 国产精品乱人伦| 中文字幕一区二区视频| 亚洲乱码精品一二三四区日韩在线| 日韩一区欧美小说| 亚洲欧美日韩中文字幕一区二区三区| 国产精品看片你懂得| 亚洲欧美色图小说| 亚洲v中文字幕| 麻豆成人久久精品二区三区小说| 美洲天堂一区二卡三卡四卡视频| 久久精品国产免费看久久精品| 久热成人在线视频| 国产suv精品一区二区6| 99在线精品一区二区三区| 欧美自拍偷拍一区| 欧美一区二区三区在| 久久久久久久久久久久久久久99| 国产日产亚洲精品系列| 亚洲码国产岛国毛片在线| 亚洲国产毛片aaaaa无费看| 日本亚洲一区二区| 国产一区二区在线观看免费| 99久久久久久99| 欧美丰满高潮xxxx喷水动漫| 亚洲精品一区二区三区福利| 中文字幕制服丝袜成人av| 亚洲国产精品麻豆| 狠狠色综合日日| 91免费看`日韩一区二区| 在线综合+亚洲+欧美中文字幕| 久久久亚洲精品一区二区三区| 亚洲欧洲精品天堂一级| 日韩国产在线观看| 波多野洁衣一区| 91精品国产一区二区三区蜜臀| 国产精品美女久久福利网站| 天天爽夜夜爽夜夜爽精品视频| 国产高清精品久久久久| 欧美色爱综合网| 国产拍欧美日韩视频二区| 亚洲国产精品一区二区久久恐怖片| 激情丁香综合五月| 色综合天天综合网天天看片| 精品国产免费一区二区三区四区| 一区二区三区中文字幕精品精品| 狠狠色丁香久久婷婷综| 色屁屁一区二区| 亚洲国产成人一区二区三区| 肉丝袜脚交视频一区二区| 99视频有精品| 久久久久久久久岛国免费| 日产国产高清一区二区三区| 99re亚洲国产精品| 欧美成人aa大片| 亚洲午夜电影在线| 91在线码无精品| 国产欧美精品一区二区三区四区| 丝袜诱惑制服诱惑色一区在线观看 | 日韩一区二区三区视频| 亚洲一区二区三区国产| 99精品视频中文字幕| 日本一二三四高清不卡| 另类的小说在线视频另类成人小视频在线 | 日韩精品一区二区三区中文精品| 夜色激情一区二区| 色综合天天综合网国产成人综合天| 国产视频一区二区在线| 久久99精品久久久| 欧美一区二区高清| 亚洲18女电影在线观看| 色天天综合色天天久久| 亚洲欧美国产三级| 91麻豆精品视频| 亚洲欧美视频在线观看视频| 成人开心网精品视频| 中文字幕一区二区三区视频| 成人性生交大片免费看在线播放| 日本一区二区三区在线不卡| 国产精品一区二区视频| 久久精品亚洲麻豆av一区二区| 国产黄色精品视频| 欧美国产在线观看| 成人av综合在线|