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

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

?? nfshash.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
	if (lseek (pTbl->fd, (pTbl->numBlocks + 1) *  HASH_BKT_SZ - 1, 	    SEEK_SET) == ERROR)	    {	    return (BAD_OFFSET);	    }        pTbl->numBlocks ++;	return ((pTbl->numBlocks - 1) * HASH_BKT_SZ);	}    else        {	/* existing free block available */	/* scan byte wise then bit wise */	pIx = (char *) pBits;	for (; *pIx == 0; ++pIx)	    {};        for (ix = 0; ix < CHAR_BIT_LEN; ++ix)	    {	    if (*pIx & (0x1 << ix))		{		bitPos =  (pIx - (char*)pTbl->allocBits) * CHAR_BIT_LEN + 			  (CHAR_BIT_LEN - ix) - 1;		*pIx &= ~(0x1 << ix);  		return (bitPos * HASH_BKT_SZ);		}            }	/* impossible to reach here */        }    return (BAD_OFFSET);    }/*******************************************************************************  * namehashFn - hash by name function** RETURNS: index into hash table*/LOCAL int  nameHashFn     (    char *  pName    )    {    int   i = strlen (pName);    return (pName[i - 2] + pName[i - 1]) % NAME_HASH_TBL_LEN;    }/*******************************************************************************  * namehashFn - hash by file handle function** Index into hash table, must be multiplies by the hash file bucket size* to get the actual file offset.** RETURNS: index into hash table*/LOCAL int fhHashFn     (    int   fh     )    {    return  fh % FH_HASH_TBL_LEN;    }/*******************************************************************************  * name2Fh - convert name to file handle ** Given a file name <pName>, convert that to a file handle, using the hash * table given by <ptbl>. We only do a lookup, so if the name does not exist * in the lookup structure we do not create the file handle for it. ** RETURNS: N/A*/LOCAL int  name2Fh    (    TBL_DESC *   pTbl,    char *       pName    )    {    off_t        off_1 = 0;    char         buf [NFS_MAXPATHLEN + 1 + sizeof (HNDL_NAME)];    HNDL_NAME *  pEnt;    int          nameLen = strlen (pName);    semTake (pTbl->sem, WAIT_FOREVER);    for (off_1 = pTbl->nameHash [nameHashFn(pName)];	off_1 != BAD_OFFSET;	off_1 = pEnt->next	)	{	if (blkRead (pTbl->fd, off_1, buf, sizeof buf) == ERROR)	    {	    semGive (pTbl->sem);	    return (ERROR);	    }        pEnt = (HNDL_NAME*)buf;        if (pEnt->nameLen == nameLen && (strcmp (pEnt->name, pName) == 					 0))             {	    semGive (pTbl->sem);	    return (pEnt->fh);	    }        }    semGive (pTbl->sem);    return (ERROR);    }/*******************************************************************************  * fh2Name - convert  file handle  to name** Find the file name corresponding to a file handle <fh> using hahs table* <pTbl> and return name in <pName>.** RETURNS: OK else ERROR if name not found.*/LOCAL STATUS  fh2Name    (    TBL_DESC *  pTbl,            /* hash file descriptor ptr */    int         fh,             /* file handle */    char *      pName            /* name output buffer */    )    {    off_t              off_1 ;    HNDL_NAME *        pEnt;    HASH_BKT  *        pBlk;    char               buf [HASH_BKT_SZ];    struct stat        statBuf;    HNDL_NAME *        pTmpEnt;    char               entBuf [NFS_MAXPATHLEN + 1 + sizeof (HNDL_NAME)];    semTake (pTbl->sem, WAIT_FOREVER);    for (off_1 = fhHashFn(fh) *  HASH_BKT_SZ; off_1 != BAD_OFFSET;	 off_1 = pBlk->next	)	{	if (blkRead (pTbl->fd, off_1, buf, sizeof buf) == ERROR)	    {	    semGive (pTbl->sem);	    return (ERROR);	    }	pBlk = (HASH_BKT *) buf;        pEnt = (HNDL_NAME*) pBlk->entries;	for (pEnt = (HNDL_NAME *)pBlk->entries; 	     (char*)pEnt < (buf + sizeof(buf) - MIN_ENTRY_SZ);              pEnt = (HNDL_NAME*) ((char *)pEnt + pEnt->totalLen))	    {            if (pEnt->fh == fh)                 {		strcpy (pName, pEnt->name);                semGive (pTbl->sem);		if (stat(pName, &statBuf) == ERROR)		    {		    /* delete from hash file since handle is not valid */                    if (blkRead (pTbl->fd, pEnt->next, entBuf, sizeof (entBuf))			== ERROR)			{			return (ERROR);			}		    pTmpEnt = (HNDL_NAME*)entBuf;		    pTmpEnt->prev = pEnt->prev;                    if (blkWrite (pTbl->fd, pEnt->next, entBuf, sizeof (entBuf))			== ERROR)			{			return (ERROR);			}                    if (blkRead (pTbl->fd, pEnt->prev, entBuf, sizeof (entBuf))			== ERROR)			{			return (ERROR);			}		    pTmpEnt->next = pEnt->next;                    if (blkWrite (pTbl->fd, pEnt->prev, entBuf, sizeof (entBuf))			== ERROR)			{			return (ERROR);			}		    pEnt->nameLen = 0;		    pBlk->freeSpace += pEnt->totalLen;		    /* if all entries in a block are gone then we could free		     * the block however that is not done currently  since the 		     * space will most likely be used up again unless		     * the hash table gets unbalanced.		     */		    }    	        return (OK);    	        }            }        }    semGive (pTbl->sem);    return (ERROR);    }/*******************************************************************************  * fhInsert - insert a file handle and name pair into hash table* Inser the file handle <fh> and name <pName> into the hash table* <pTbl>.** RETURNS: OK or ERROR if unable to insert entry.*/LOCAL STATUS   fhInsert     (    TBL_DESC *  pTbl,    int         fh,    char *      pName    )    {    /* first select block based on hash by fh , insert into blk       then onto list of entries by name */    off_t            offPrev  = 0;    off_t            offNow ;    HNDL_NAME *      pEnt = 0;    HNDL_NAME *      pTmpEnt;    HASH_BKT *       pBlk = (HASH_BKT *) NULL;    char             buf [HASH_BKT_SZ];    int              need;    int              ix;    int              newEntryLen;    char             entBuf [NFS_MAXPATHLEN + 1 + sizeof (HNDL_NAME)];    need = ENTRY_HDR_SZ  +  STR_ALIGN_LEN (pName) ;    semTake (pTbl->sem, WAIT_FOREVER);    for (offNow = fhHashFn (fh) * HASH_BKT_SZ ; offNow != BAD_OFFSET;	offPrev = offNow,  offNow = pBlk->next	)	{	if (blkRead (pTbl->fd, offNow, buf, sizeof buf) == ERROR)	    {            semGive (pTbl->sem);	    return (ERROR);	    }	pBlk = (HASH_BKT *)buf;	if (pBlk->freeSpace < need)	    {	    continue;	    }	for (pEnt = (HNDL_NAME *)pBlk->entries; 	     (char*)pEnt <= (buf + sizeof(buf) - need);              pEnt = (HNDL_NAME*) ((char *)pEnt + pEnt->totalLen))	    {	    if (pEnt->nameLen == 0 && pEnt->totalLen >= need)		{		/* found an empty entry big enough */		goto scanDone;                }            }        }    /* At this point we may need to allocate a new blk */    /* allocate new block and link it in then set pEnt and offNow     * as in earlier case     */scanDone:    if (offNow == BAD_OFFSET)	{        offNow = blockAlloc (pTbl);	/* link new block into prev block */	if (blkRead (pTbl->fd, offPrev, buf, sizeof buf) == ERROR)	    {	    semGive (pTbl->sem);	    return (ERROR);	    }        pBlk = (HASH_BKT*)buf;	pBlk->next = offNow;	if (blkWrite (pTbl->fd, offPrev, buf, sizeof buf) == ERROR)	    {	    semGive (pTbl->sem);	    return (ERROR);	    }	/* Now convert buf into a new empty block. 	   initially the whole block is just one full sized empty entry */	pBlk->next = BAD_OFFSET;	pBlk->freeSpace = HASH_BKT_SZ -  HASH_BKT_HDR_SZ;	pEnt = (HNDL_NAME*) (pBlk->entries);        pEnt->totalLen = HASH_BKT_SZ -  HASH_BKT_HDR_SZ ;	pEnt->nameLen = 0;	}    /* At this point offNow points to the block to be updated and       pEnt points to the correct entry in the buffered bucket     */    ix = nameHashFn (pName);    pEnt->next = pTbl->nameHash [ix];    pEnt->prev = BAD_OFFSET;    pTbl->nameHash[ix] = offNow + ((char *)pEnt - buf);    /* update back ptr of next entry if there is one */    if (pEnt->next != BAD_OFFSET)	{        if (blkRead (pTbl->fd, pEnt->next, entBuf, sizeof (entBuf) == ERROR))	    {	    return (ERROR);	    };        pTmpEnt = (HNDL_NAME*)entBuf;        pTmpEnt->prev = pTbl->nameHash[ix];        if (blkWrite (pTbl->fd, pEnt->next, entBuf, sizeof (entBuf) == ERROR))	    {	    return (ERROR);	    };	}    /* if there is sufficient space in this entry to accomodate     * another entry at this end then divide this to get an empty entry     * at the end of first entry     */    newEntryLen = ENTRY_HDR_SZ + STR_ALIGN_LEN (pName);    if (pEnt->totalLen - newEntryLen >= MIN_ENTRY_SZ)       {       pTmpEnt = (HNDL_NAME*) ((char*)pEnt + newEntryLen);       pTmpEnt->totalLen = pEnt->totalLen - newEntryLen;       pTmpEnt->nameLen = 0;       pEnt->totalLen = newEntryLen;       }    pBlk->freeSpace -= pEnt->totalLen;    strcpy (pEnt->name, pName);    pEnt->fh = fh;    pEnt->nameLen = strlen (pName);    if (blkWrite (pTbl->fd, offNow, buf, sizeof buf) == ERROR)        {        return (ERROR);        }    semGive (pTbl->sem);    return (OK);    }/*******************************************************************************  * blkRead - read block from file* * Read block from file with file descriptor <fd>, offset <offset>* buffer <buf> and buffer len <len>* * RETURNS: num chars read or ERROR.*/LOCAL   int blkRead     (    int      fd,    off_t    offset,    char *   buf,    int      len    )    {    if (lseek (fd, offset, SEEK_SET) == ERROR)        {        return (ERROR);        }    return (read ( fd, buf, len));    }/*******************************************************************************  * blkWrite - write block to file* * Write block to file with file descriptor <fd>, offset <offset>* buffer <buf> and buffer len <len>* * RETURNS: num chars written or ERROR. */LOCAL int blkWrite     (    int      fd,    off_t    offset,    char *   buf,    int      len    )    {    if (lseek (fd, offset, SEEK_SET) == ERROR)        {        return (ERROR);        }    return (write ( fd, buf, len));    }/*******************************************************************************  * nfsFhLkup - find name corresponding to file handle ** using file handle <fh> as the key get corresponding file name* in <pName>.** RETURNS: OK or ERROR if name not found*/STATUS nfsFhLkup    (    NFS_FILE_HANDLE *   pFh,  /* key for lookup */    char *              pName  /* output name */    )    {    TBL_DESC *    pT;    pT = tblDescGet (pFh->volumeId);    if (pT == NULL)       {       return (ERROR);	}    if (fh2Name (pT, pFh->inode, pName) == ERROR)	{	return (ERROR);	}    else	{	return OK;	}    }/*******************************************************************************  * nfsNmLkupIns - find fh corresponding to file name** Find the file handle  corresponding to the given file name  <Pname> with* nfs mount volume id <mntId> and create and insert an entry in the table* if not found.** RETURNS: file handle or ERROR;* NOMANUAL*/int nfsNmLkupIns     (    int    mntId,     /* mount id no */    char * pName      /* seach key */    )    {    TBL_DESC *    pT;    int           in;    pT = tblDescGet (mntId);    if (pT == NULL)       return (ERROR);    if ((in = name2Fh (pT, pName)) == ERROR)	{	in = ++pT->nextInode;	if (fhInsert (pT, pT->nextInode, pName)== ERROR)	   return (ERROR);	}    return (in);    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲成人精品av97| 日韩和欧美一区二区三区| 国产精品一区二区久久精品爱涩| 欧美日韩一卡二卡三卡| 亚洲图片欧美综合| 欧美天堂亚洲电影院在线播放| 亚洲综合丁香婷婷六月香| 欧美日韩一区高清| 另类人妖一区二区av| 26uuu亚洲综合色欧美| 国产精品77777| ●精品国产综合乱码久久久久| 色综合天天综合色综合av | 日韩欧美自拍偷拍| 精品一区二区三区不卡| 欧美国产精品中文字幕| 在线一区二区观看| 久久激情五月激情| 国产精品高潮呻吟久久| 欧美日韩国产在线播放网站| 久久国产综合精品| 成人免费在线视频| 在线不卡一区二区| 成人综合日日夜夜| 亚洲一级电影视频| 国产亚洲一区二区三区四区| 一本一本大道香蕉久在线精品| 日韩av在线播放中文字幕| 久久久不卡网国产精品二区| 在线视频国内自拍亚洲视频| 久久精品国内一区二区三区| 综合久久给合久久狠狠狠97色 | 日韩精品欧美成人高清一区二区| 精品国产乱码久久久久久浪潮 | 夜夜精品浪潮av一区二区三区| 欧美丰满嫩嫩电影| 成人视屏免费看| 日韩vs国产vs欧美| 亚洲乱码国产乱码精品精的特点| 日韩亚洲欧美在线观看| 91精品中文字幕一区二区三区| 久久精品国产久精国产| 亚洲激情综合网| 久久香蕉国产线看观看99| 欧美在线不卡视频| 成人午夜电影小说| 美女免费视频一区二区| 亚洲男帅同性gay1069| 久久综合99re88久久爱| 欧美日韩国产大片| 91丝袜美腿高跟国产极品老师| 久久精品99国产精品| 一个色妞综合视频在线观看| 久久久三级国产网站| 91精品国产综合久久精品麻豆 | 国产精品99久久久久久久女警| 亚洲高清三级视频| 伊人开心综合网| 日本一区二区三区四区| 日韩女优视频免费观看| 欧美日韩五月天| 日本黄色一区二区| 粉嫩欧美一区二区三区高清影视| 美女一区二区视频| 日本欧美一区二区三区乱码| 午夜精品一区二区三区免费视频 | 亚洲免费在线观看| 国产精品国产三级国产普通话99| 久久综合色之久久综合| 日韩免费一区二区三区在线播放| 精品视频123区在线观看| 色哟哟在线观看一区二区三区| 成人黄色777网| 国产精品88av| 国产成人免费网站| 国产ts人妖一区二区| 欧美午夜精品久久久| 在线欧美一区二区| 欧美性生活久久| 欧美日韩精品一区二区三区四区 | 成人午夜激情影院| 成人免费毛片app| 成人国产精品免费网站| 丰满亚洲少妇av| 成人福利电影精品一区二区在线观看 | 国产成人在线影院| 国产酒店精品激情| 国产成人小视频| 成人午夜短视频| 色婷婷激情久久| 欧美日韩免费观看一区二区三区| 欧美体内she精高潮| 91精品国产欧美日韩| 欧美电影免费观看高清完整版在线观看 | 国产色爱av资源综合区| 欧美国产精品一区二区| 亚洲欧洲av在线| 亚洲风情在线资源站| 日本aⅴ免费视频一区二区三区| 欧美aaa在线| 国产精品羞羞答答xxdd| eeuss国产一区二区三区| 91久久一区二区| 欧美一二三在线| 国产视频一区二区在线观看| 国产精品成人一区二区艾草 | 成人激情免费电影网址| 欧美亚男人的天堂| 亚洲精品一区二区三区在线观看| 国产欧美日韩综合精品一区二区| 亚洲欧洲精品一区二区三区不卡| 亚洲综合免费观看高清完整版在线 | 国产精品美女久久久久aⅴ| 日韩伦理av电影| 视频一区二区三区中文字幕| 国产高清在线观看免费不卡| 色婷婷精品久久二区二区蜜臀av| 欧美一级高清大全免费观看| 久久久国产精品麻豆| 一区二区三区免费在线观看| 久久超碰97中文字幕| 97久久精品人人爽人人爽蜜臀| 这里只有精品免费| 中文字幕亚洲综合久久菠萝蜜| 国产在线一区观看| 在线观看成人小视频| 久久综合久久综合久久综合| 亚洲欧美日韩国产综合| 久久成人免费网站| 欧美在线一区二区| 国产欧美精品一区二区色综合 | 亚洲欧美日韩一区二区| 久久精品久久精品| 在线观看精品一区| 国产精品久久久久久久久久免费看 | 亚洲天堂中文字幕| 久久精品国产精品青草| 欧美性生活大片视频| 国产精品久久福利| 国产综合久久久久久鬼色| 欧美日韩中文国产| 亚洲欧美激情在线| 成人免费看片app下载| 欧美mv日韩mv| 日韩成人一级大片| 欧美精品在线视频| 亚洲激情六月丁香| 成人av综合在线| 欧美高清在线视频| 国内外成人在线| 欧美本精品男人aⅴ天堂| 婷婷一区二区三区| 欧美亚洲免费在线一区| 亚洲免费观看高清| 成人黄色777网| 国产精品情趣视频| 成人午夜视频福利| 国产亚洲精品aa| 国产精品综合一区二区三区| 日韩欧美国产一区在线观看| 爽好多水快深点欧美视频| 欧美性欧美巨大黑白大战| 亚洲精品免费播放| 色综合网色综合| 亚洲一区二区综合| 色菇凉天天综合网| 夜夜亚洲天天久久| 欧美日韩激情在线| 偷窥国产亚洲免费视频| 欧美久久一二区| 日本中文字幕一区二区有限公司| 欧美色网站导航| 日韩一区欧美二区| 日韩一区二区免费在线电影| 美腿丝袜在线亚洲一区| 日韩欧美一区二区久久婷婷| 久久国产视频网| 久久美女艺术照精彩视频福利播放 | 成人高清免费在线播放| 国产精品久久久一区麻豆最新章节| 丁香婷婷综合网| 18成人在线观看| 欧美日韩一区小说| 日韩激情中文字幕| 日韩欧美国产小视频| 国产精品资源网站| 日韩一区中文字幕| 欧美日本视频在线| 裸体一区二区三区| 国产视频一区二区三区在线观看| 成人av午夜影院| 亚洲一区二区在线免费看| 91精品一区二区三区久久久久久| 蜜乳av一区二区| 国产精品嫩草久久久久| 91一区二区在线| 日韩国产欧美一区二区三区| 精品国产亚洲在线| av一区二区三区| 五月激情丁香一区二区三区|