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

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

?? dosdiroldlib.c

?? vxworks操作系統的文件系統部分原代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
        switch( which )        {        case DH_TIME_CREAT:            tOff = pDirDesc->deDesc.creatTimeOff;            dOff = pDirDesc->deDesc.creatDateOff;            break;        case DH_TIME_MODIFY:            tOff = pDirDesc->deDesc.modifTimeOff;            dOff = pDirDesc->deDesc.modifDateOff;            break;        case DH_TIME_ACCESS:            tOff = pDirDesc->deDesc.accessTimeOff;            dOff = pDirDesc->deDesc.accessDateOff;            break;        default:            assert( FALSE );        }        if( dOff != (u_char)NONE )    	{    	dtBuf = DISK_TO_VX_16( pDirent + dOff );    	    	tm.tm_mday    = dtBuf & 0x1f;    		/* ANSI months are zero-based */	    	tm.tm_mon     = ((dtBuf >> 5) & 0x0f) - 1;    		/* DOS starts at 1980, ANSI starts at 1900 */	    	tm.tm_year    = ((dtBuf >> 9) & 0x7f) + 1980 - 1900;    	}    if( tOff != (u_char)NONE )    	{    	dtBuf = DISK_TO_VX_16( pDirent + tOff );    	    	tm.tm_sec     = (dtBuf & 0x1f) << 1;    	tm.tm_min     = (dtBuf >> 5) & 0x3f;    	tm.tm_hour    = (dtBuf >> 11) & 0x1f;    	}        /* encode into time_t format */        return mktime( &tm );    } /* dosDirOldTDDecode() *//***************************************************************************** dosDirOldTDEncode - encode time-date to disk format.** This routine takes time value is provided in <curTime> argument* and encodes it into directory entry format.* * Parameter <timesMask> defines which time fields to fill. Following* values can be bitwise or-ed:* DH_TIME_CREAT, DH_TIME_MODIFY, DH_TIME_ACCESS.** RETURNS: N/A.*/LOCAL void dosDirOldTDEncode    (    DOS_DIR_PDESCR_ID	pDirDesc,    u_char *	pDirEnt,    u_int	timesMask,    time_t	curTime	/* time to encode */    )    {    struct tm   tm;	/* buffer for split time-date */    u_char	timeB[2], dateB[2];	/* buffers for encoding */        localtime_r( &curTime, &tm );    /* encode time */        VX_TO_DISK_16( ( tm.tm_sec >> 1 ) |    		  ( tm.tm_min << 5 ) |    		  ( tm.tm_hour << 11 ), timeB );        /*     * encode date;     * in <pDate> year is related to 1980, but in tm,-to 1900     */    tm.tm_year =  ( tm.tm_year < 80 )? 80 : tm.tm_year;    VX_TO_DISK_16( tm.tm_mday | ( ( tm.tm_mon + 1 ) << 5 ) |    		  ( ( tm.tm_year - 80 ) <<  9 ), dateB );        /* put time-date into directory entry buffer */        if( timesMask & DH_TIME_CREAT &&        pDirDesc->deDesc.creatDateOff != (u_char)NONE  )    	{    	pDirEnt[ pDirDesc->deDesc.creatTimeOff ] = timeB[0];    	pDirEnt[ pDirDesc->deDesc.creatTimeOff + 1 ] = timeB[1];    	pDirEnt[ pDirDesc->deDesc.creatDateOff ] = dateB[0];    	pDirEnt[ pDirDesc->deDesc.creatDateOff + 1 ] = dateB[1];    	}    if( timesMask & DH_TIME_MODIFY &&        pDirDesc->deDesc.modifDateOff != (u_char)NONE  )    	{    	pDirEnt[ pDirDesc->deDesc.modifTimeOff ] = timeB[0];    	pDirEnt[ pDirDesc->deDesc.modifTimeOff + 1 ] = timeB[1];    	pDirEnt[ pDirDesc->deDesc.modifDateOff ] = dateB[0];    	pDirEnt[ pDirDesc->deDesc.modifDateOff + 1 ] = dateB[1];    	}    if( timesMask & DH_TIME_ACCESS &&        pDirDesc->deDesc.accessDateOff != (u_char)NONE  )    	{    	if( pDirDesc->deDesc.accessTimeOff != (u_char)NONE )    	    {    	    pDirEnt[ pDirDesc->deDesc.accessTimeOff ] = timeB[0];    	    pDirEnt[ pDirDesc->deDesc.accessTimeOff + 1 ] = timeB[1];    	    }    	pDirEnt[ pDirDesc->deDesc.accessDateOff ] = dateB[0];    	pDirEnt[ pDirDesc->deDesc.accessDateOff + 1 ] = dateB[1];    	}    } /* dosDirOldTDEncode() */    /***************************************************************************** dosDirOldNameEncode - encode name to disk format.** This routine encodes incoming file name to current volume* directory structure format* (8+3 uppercase or VxLong names). in the same time incoming* name is verified to be composed of valid characters.** RETURNS: OK or ERROR if name is invalid.* * ERRNO:* S_dosFsLib_ILLEGAL_NAME*/LOCAL STATUS dosDirOldNameEncode    (     DOS_DIR_PDESCR_ID	pDirDesc,    PATH_ARRAY_ID	pNamePtr,	/* name buffer */    u_char *	pDstName	/* buffer for name in disk format */    )    {    u_char const *	nameTransTbl;	/* name translation table */    u_char *	pSrc;	/* source name dynamic ptr */    u_char *	pDstBuf;	/* for debug output only */    int		i,j;		/* work */    u_char	extLen = pDirDesc->deDesc.extLen;    			/* extension length (0 - no extension) */        pDstBuf = pDstName;    nameTransTbl = ( pDirDesc->nameStyle == STDDOS )?    			shortNamesChar : longNamesChar;        bfill( (char *) pDstName,    	   pDirDesc->deDesc.nameLen + pDirDesc->deDesc.extLen,            SPACE );        /* encode name and check it by the way */        DBG_MSG( 600, "",0 ,0,0,0,0,0,0,0);    DBG_PRN_STR( 600, "%s\n", pNamePtr->pName, pNamePtr->nameLen, 0 );    for( i = 0, pSrc = pNamePtr->pName;    	 i < min( pDirDesc->deDesc.nameLen,    	 	  pNamePtr->nameLen );    	 i++, pDstName++, pSrc++  )    	{    	/* check for extension */    	    	if( extLen != 0 && *pSrc == DOT )    	    break;    	    	/* allow all high characters */    	    	if( *pSrc & 0x80 )    	    {    	    *pDstName = *pSrc;    	    continue;    	    }    	    	*pDstName = nameTransTbl[ *pSrc ];    	if( *pDstName == INVALID_CHAR )    	    goto error;    	}    /* check state */        if( i == pNamePtr->nameLen )    	goto retOK;	/* name finished */        if( extLen != 0 )	/* traditional DOS: 8.3 */    	{    	if( *pSrc != DOT )	/* name too long */    	    goto error;    	pSrc++;	/* pass DOT */    	pDstName += pDirDesc->deDesc.nameLen - i;    	i++;    	}    else	/* vxWorks old long names */    	goto error;	/* name too long */        /* encode extension */        for( j = 0; j < extLen && i < pNamePtr->nameLen;    	 i++, j++, pDstName++, pSrc++  )    	{    	/* allow all high characters */    	    	if( *pSrc & 0x80 )    	    {    	    *pDstName = *pSrc;    	    continue;    	    }    	    	*pDstName = nameTransTbl[ *pSrc ];    	if( *pDstName == INVALID_CHAR )    	    goto error;    	}        /* check status */        if( i < pNamePtr->nameLen )	/* extension too long */    	goto error;retOK:    DBG_PRN_STR( 600, "result: %s\n", pDstBuf,     		 pDirDesc->deDesc.nameLen + pDirDesc->deDesc.extLen,0 );    return OK;    error:    errnoSet( S_dosFsLib_ILLEGAL_NAME );    return ERROR;    } /* dosDirOldNameEncode() */    /***************************************************************************** dosDirOldDirentGet - get directory entry from disk.** This routine reads directory entry from disk. ** <which> argument defines which entry to get.* This routine can be* used for readdir (<which> = RD_FIRST/RD_CURRENT/RD_NEXT),* in what case <pFd> describes the* directory is being read, or for getting directory entry* corresponding to <pFd> (<which> = FD_ENTRY).** RETURNS: OK or ERROR if directory chain end reached or*  disk access error.*/LOCAL STATUS dosDirOldDirentGet    (    DOS_FILE_DESC_ID	pFd,	/* dos file descriptor to fill */    u_char *	pDirEnt,    RDE_OPTION	 which		/* which entry to get */    )    {    DOS_DIR_PDESCR_ID	pDirDesc = (void *)pFd->pVolDesc->pDirDesc;    DOS_DIR_HDL_ID	pDirHdl = (void *)&(pFd->pFileHdl->dirHdl);    int			dirEntSize = pDirDesc->deDesc.dirEntSize;    DOS_FILE_DESC	workFd;        /* prepare to operation */        if( which == FD_ENTRY ) /* get directory entry of file */    	{    	DBG_MSG( 600, "pFd = %p, FD_ENTRY\n", pFd ,0,0,0,0,0,0,0);    	/*    	 * it is being read directory entry of the file/dir,    	 * pointed by file descriptor.    	 * Prepare working fd.    	 */    	workFd = *pFd;    	workFd.curSec = pDirHdl->sector;    	workFd.pos = pDirHdl->offset;    	workFd.cbioCookie = pDirHdl->cookie;    	    	goto getEntry;    	}        /* readdir */        if(  which == RD_CURRENT )	/* read current dir entry */    	{    	assert( pFd->nSec != 0 );    	assert( pFd->curSec != 0 );    	    	goto getEntry;    	}        if( which == RD_FIRST )	/* read start dir entry */    	{    	DBG_MSG( 600, "pFd = %p, RD_FIRST\n", pFd ,0,0,0,0,0,0,0);    	dosDirOldRewindDir( pFd );	/* rewind directory */    	}    else if( which == RD_NEXT )	/* read next dir entry */    	{    	DBG_MSG( 600, "pFd = %p, RD_NEXT\n", pFd ,0,0,0,0,0,0,0);    	assert( pFd->curSec != 0 );    	    	/* correct position */    	    	pFd->pos += dirEntSize;    	    	/* check for sector bounds */    	    	if( OFFSET_IN_SEC( pFd->pVolDesc, pFd->pos ) == 0 )    	    {    	    pFd->curSec++;    	    pFd->nSec--;    	    }    	}    else	/* impossible flag */    	{    	assert( which != which );    	}     	    /* may be contiguous block finished - get next contiguous block */    	        if( pFd->nSec == 0 )    	{    	if( pFd->pVolDesc->pFatDesc->getNext(    	    			pFd, FAT_NOT_ALLOC ) == ERROR )    	    {    	    return ERROR;    	    }    	pFd->cbioCookie = (cookie_t) NULL;	/* we jumped to other sector */    	}        workFd = *pFd;    getEntry:    assert( OFFSET_IN_SEC( workFd.pVolDesc, workFd.pos ) <=		workFd.pVolDesc->bytesPerSec - dirEntSize );    	    /* read directory entry */        if( cbioBytesRW( workFd.pVolDesc->pCbio, workFd.curSec,    		     OFFSET_IN_SEC( workFd.pVolDesc, workFd.pos),		     (addr_t)pDirEnt, dirEntSize, CBIO_READ,    		     &workFd.cbioCookie ) == ERROR )    	{    	return ERROR;    	}    DBG_PRN_STR( 600, "entry: %s\n", pDirEnt,    		 pDirDesc->deDesc.nameLen + pDirDesc->deDesc.extLen,0 );    		     return OK;    } /* dosDirOldDirentGet() */    /***************************************************************************** dosDirOldLkupInDir - look in directory for specified name.** This routine searches directory, that is pointed by <pFd> for name, that* is pointed by <pNamePtr> structure and fills <pFd> in accordance with* directory entry data, if found.** If name not found, <pFreeEnt> will be filled with pointer onto* some deleted entry in directory or onto free space in last directory* cluster. If both not found,* <pFreeEnt->sector> is set to 0.** RETURNS: OK or ERROR if name not found or invalid name.*/LOCAL STATUS dosDirOldLkupInDir    (    DOS_FILE_DESC_ID	pFd,	/* dos file descriptor to fill */    PATH_ARRAY_ID	pNamePtr,	/* name buffer */    DIRENT_PTR_ID	pFreeEnt	/* empty entry in directory */    )    {    DOS_DIR_PDESCR_ID	pDirDesc = (void *)pFd->pVolDesc->pDirDesc;    STATUS	status;	/* search result status */    u_int	nEntries;	/* number of entries in directory */    u_short	nameLen;	/* name length on disk */    u_char	name[  DOS_VX_LONG_NAME_LEN ]; /* name in disk format */    u_char	dirent[ DOS_VX_DIRENT_LEN ]; /* directory entry buffer */        nameLen = pDirDesc->deDesc.nameLen + pDirDesc->deDesc.extLen;    DBG_MSG( 400, "pFd = %p", pFd ,0,0,0,0,0,0,0);    DBG_PRN_STR( 400, "name: %s\n", pNamePtr->pName,    			pNamePtr->nameLen, 0 );        pFreeEnt->sector = 0;    pFreeEnt->offset = 0;        /* prepare name */        if( dosDirOldNameEncode( pDirDesc, pNamePtr, name ) == ERROR )    	return ERROR;        for( nEntries = 0, (status = dosDirOldDirentGet( pFd, dirent, RD_FIRST ));    	 (status != ERROR) && *dirent != LAST_DIRENT;    	 status = dosDirOldDirentGet( pFd, dirent, RD_NEXT ), nEntries++ )    	{    	/* pass volume label */    	    	if( *(dirent + pDirDesc->deDesc.atrribOff) & DOS_ATTR_VOL_LABEL )    	    continue;    	    	/* pass deleted entry, that later can be used to store new entry */    	    	if( *dirent == DOS_DEL_MARK )    	    {    	    pFreeEnt->sector = pFd->curSec;    	    pFreeEnt->offset = pFd->pos;    	    continue;    	    }    	    	/* compare names */    	    	if( bcmp( (char *)name, (char *)dirent, nameLen ) == 0 )    	    {    	    break;    	    }    	}        /* check result */        if( status == ERROR ||        ( IS_ROOT( pFd ) && nEntries > pDirDesc->rootMaxEntries ) )        {    	return ERROR;    	}        if(  *dirent == LAST_DIRENT )    	{        /* will create new entry on this place, if required */        	if( pFreeEnt->sector == 0 )    	    {    	    pFreeEnt->sector = pFd->curSec;    	    pFreeEnt->offset = pFd->pos;    	    }    	return ERROR;    	}        /* file found; fill file descriptor */        dosDirOldFillFd( pFd, dirent );    return OK;     } /* dosDirOldLkupInDir() */    /***************************************************************************** dosDirOldClustAdd - add and init cluster to directory.** RETURNS: OK or ERROR if no more cluster could be allocated.*/LOCAL STATUS dosDirOldClustAdd    (    DOS_FILE_DESC_ID	pFd    )    {    block_t	sec;	/* work count */        /* allocate cluster */        if( pFd->pVolDesc->pFatDesc->getNext( pFd, FAT_ALLOC_ONE ) == ERROR )    	return ERROR;        assert( pFd->pFileHdl->startClust != 0 );        /* fill cluster: */    for( sec = pFd->curSec; sec < pFd->curSec + pFd->nSec;         sec ++ )    	{    	if( cbioIoctl(pFd->pVolDesc->pCbio, CBIO_CACHE_NEWBLK,			(void *)sec ) == ERROR )    	    {    	    return ERROR;    	    }    	}            return OK;    } /* dosDirOldClustAdd() *//***************************************************************************** dosDirOldUpdateEntry - set new directory entry contents.** This routine pulls file size, attributes and so on out of* file descriptor and stores in the file directory entry.* * This function is also used for entry deletion. In this* case <flags> have to be set to DH_DELETE.** Time value provided in <curTime> can be encoded into appropriate* fields within directory entry structure in accordance with* <flags> argument. <flags> can be or-ed of* DH_TIME_CREAT, DH_TIME_MODIFY or DH_TIME_ACCESS.* If <curTime> is 0, current system time is used.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区视频免费在线观看| 亚洲成av人片在线| 日韩国产欧美在线播放| 国产馆精品极品| 欧美精品tushy高清| 中文字幕视频一区二区三区久| 亚洲va欧美va国产va天堂影院| 国产精品综合视频| 91精品国产免费| 亚洲国产中文字幕| 99综合电影在线视频| 精品国产区一区| 视频精品一区二区| 欧美精品久久天天躁| 亚洲视频一区在线| 成人免费av在线| 国产欧美精品日韩区二区麻豆天美| 日韩激情一二三区| 欧美无砖专区一中文字| 综合在线观看色| 国产a久久麻豆| 久久久影视传媒| 国产激情视频一区二区三区欧美| 日韩欧美高清在线| 免费在线观看视频一区| 在线91免费看| 五月婷婷激情综合网| 欧美日韩午夜在线视频| 亚洲一区二区五区| 欧美网站一区二区| 一区二区在线观看不卡| 91国在线观看| 亚洲国产一区二区在线播放| 欧美亚洲动漫精品| 图片区小说区区亚洲影院| 欧美色视频一区| 免费在线观看视频一区| 精品国偷自产国产一区| 韩国精品在线观看| 国产午夜精品美女毛片视频| 国产suv一区二区三区88区| 国产欧美一区二区三区沐欲| 国产成人av电影免费在线观看| 精品国产污网站| www.欧美精品一二区| 亚洲欧美另类图片小说| 欧美日韩情趣电影| 裸体健美xxxx欧美裸体表演| 日韩精品在线一区| 国产成都精品91一区二区三| 国产精品久久毛片a| 在线观看区一区二| 久久国产福利国产秒拍| 久久精品日产第一区二区三区高清版| 成人美女在线观看| 一区二区三区四区在线播放| 制服丝袜av成人在线看| 精品亚洲国产成人av制服丝袜| 国产欧美一区二区三区网站| 在线一区二区观看| 精品一区二区三区欧美| 中文字幕亚洲一区二区va在线| 欧美日韩免费视频| 国产乱人伦偷精品视频不卡| 亚洲女与黑人做爰| 日韩午夜av一区| 91丝袜美女网| 久久精品国产99国产精品| 国产精品不卡一区二区三区| 欧美欧美欧美欧美首页| 国产精品99久久久久久久女警| 亚洲另类春色国产| 精品国产99国产精品| 91国在线观看| 国产成人免费在线观看| 亚洲一二三区视频在线观看| 久久久久久久精| 5566中文字幕一区二区电影 | 欧美精品在欧美一区二区少妇| 狠狠色丁香婷综合久久| 亚洲国产wwwccc36天堂| 日本一区二区三区四区在线视频| 欧美肥妇free| 色综合久久久久综合体| 国产一区二区三区观看| 天堂在线亚洲视频| 一区二区三区久久| 国产精品传媒入口麻豆| 2024国产精品| 日韩一区二区三区四区五区六区| 91农村精品一区二区在线| 国产精品中文有码| 免费日本视频一区| 亚洲三级在线看| 国产日本欧美一区二区| 日韩一区二区三区精品视频| 欧美三日本三级三级在线播放| 成人黄色国产精品网站大全在线免费观看 | 五月婷婷另类国产| 伊人一区二区三区| 亚洲欧美综合在线精品| 国产精品天美传媒| 国产偷v国产偷v亚洲高清| 久久综合久久久久88| 欧美一区二区高清| 91精品国产综合久久婷婷香蕉 | 丝袜美腿一区二区三区| 亚洲愉拍自拍另类高清精品| 国产精品国产自产拍在线| 精品福利一区二区三区| 日韩欧美国产麻豆| 精品sm在线观看| 久久亚洲精品国产精品紫薇| 精品va天堂亚洲国产| 2020国产精品自拍| 久久久777精品电影网影网 | 欧美一区二区视频在线观看2022| 欧美在线免费观看亚洲| 欧美亚洲禁片免费| 欧美精品色一区二区三区| 91精品国产91久久综合桃花| 欧美一区二区黄色| 精品久久人人做人人爽| 日本一区二区在线不卡| 国产精品卡一卡二| 亚洲蜜臀av乱码久久精品| 一区二区三区91| 日韩影院免费视频| 开心九九激情九九欧美日韩精美视频电影| 日本va欧美va精品发布| 九九国产精品视频| 成人手机在线视频| 欧美视频在线播放| 精品成人私密视频| 国产精品乱码一区二三区小蝌蚪| 亚洲另类一区二区| 青青草97国产精品免费观看 | 国产在线播精品第三| 成人激情动漫在线观看| 在线视频亚洲一区| 日韩欧美国产系列| 亚洲丝袜制服诱惑| 日韩av在线播放中文字幕| 国产老妇另类xxxxx| 91丨九色丨国产丨porny| 91.麻豆视频| 欧美国产日本视频| 亚洲成人综合在线| 国产精品一区二区在线看| 色欧美乱欧美15图片| 日韩一级大片在线| 自拍偷拍欧美激情| 美日韩一区二区三区| 91在线国内视频| 日韩欧美中文一区| 亚洲品质自拍视频| 国产主播一区二区| 欧美精品在线一区二区| 国产精品久久久久久亚洲毛片| 无码av免费一区二区三区试看 | 亚洲午夜视频在线| 国产麻豆视频精品| 欧美日韩国产123区| 亚洲国产经典视频| 七七婷婷婷婷精品国产| 色综合久久中文综合久久牛| 精品国产一区二区三区四区四| 亚洲欧美视频在线观看视频| 狠狠色2019综合网| 欧美日韩在线三级| 亚洲同性gay激情无套| 国内精品国产三级国产a久久| 欧洲精品视频在线观看| 中文字幕一区二区在线观看 | 卡一卡二国产精品| 欧美无砖专区一中文字| 自拍偷拍亚洲欧美日韩| 国产精品一区二区男女羞羞无遮挡| 欧美日韩免费一区二区三区| 亚洲精品视频免费看| 成人午夜视频免费看| 久久五月婷婷丁香社区| 免费在线成人网| 6080午夜不卡| 日韩黄色免费电影| 欧美午夜片在线看| 亚洲第一福利一区| 欧美丝袜丝nylons| 亚洲成av人片观看| 欧美日韩国产高清一区二区 | 3d动漫精品啪啪1区2区免费| 亚洲另类在线一区| 日本福利一区二区| 亚洲精品你懂的| 色婷婷av一区二区三区gif| 国产精品国产三级国产aⅴ原创 | 精品污污网站免费看| 亚洲一二三四在线| 欧美午夜精品理论片a级按摩| 一区二区三区在线免费播放|