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

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

?? dosdiroldlib.c

?? vxworks的完整的源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* dosDirOldLib.c - MS-DOS old style names dir handler */ /* Copyright 1999-2002 Wind River Systems, Inc. *//*modification history--------------------01j,29apr02,jkf  SPR#72255, upon file creation, set the create, modification,                 and access time fields to match creation rather than using                 the epoch (0).01i,10dec01,jkf  SPR#72039, various fixes from Mr. T. Johnson.01h,21aug01,jkf  SPR#69031, common code for both AE & 5.x.01g,06mar01,jkf  SPR#34704, rootNSec calculation must round up.01f,29feb00,jkf  T3 merge01e,31jul99,jkf  T2 merge, tidiness & spelling.01d,22nov98,vld  all offsets of directory entry changed to be		 counted in absolute offset from parent directory		 start01c,28sep98,vld  gnu extensions dropped from DBG_MSG/ERR_MSG macros01b,02jul98,lrn  doc review01a,18jan98,vld	 written*//*DESCRIPTIONThis library is part of dosFsLib and  is designed to handlethe DOS4.0 standard disk directory structure as well asvxWorks proprietary long names in case sensitive manner.File names in DOS4.0 are composed of a 8 characters name and3 characters extension separated by dot character.They are stored on disk in uppercase mode, and name lookupis case insensitive. New VFAT file name standard alsosupports DOS4.0 directory structure, and if both handlers(this one and dosVDirLib) are installed, VFAT handler take precedence,and will be used for such a volume by default.VxWorks proprietary long names are composed of up to 40 charactersand are fully case sensitive. Also, files with length greater, than4GB can be stored on the volume is formatted with VxWorks proprietarylong names directory structure.Routine dosDirOldLibInit() has to be called once to install thisinto dosFsLib directory handlers list. Once it has been done this directoryhandler will be automatically mounted on each new appropriate volumebeing mounted.SEE ALSO:dosFsLib.*//* includes */#include "vxWorks.h"#include "private/dosFsVerP.h"#include "stat.h"#include "dirent.h"#include "time.h"#include "stdio.h"#include "ctype.h"#include "taskLib.h"#include "stdlib.h"#include "string.h"#include "semLib.h"#include "logLib.h"#include "errnoLib.h"#include "time.h"#include "utime.h"#include "memLib.h"#include "private/dosFsLibP.h"#include "private/dosDirLibP.h"/* defines *//* macros */#undef DBG_PRN_STR#undef DBG_MSG#undef ERR_MSG#undef NDEBUG #ifdef DEBUG#   undef LOCAL#   define LOCAL#   undef ERR_SET_SELF#   define ERR_SET_SELF#   define DBG_PRN_STR( lvl, fmt, pStr, len, arg )		\	{ if( (lvl) <= dosDirOldDebug )		{		\	    char cBuf = ((char *)(pStr))[len];			\	    (pStr)[len] = EOS; 					\	    printErr( (fmt),(pStr),(arg) );			\	    ((char *)(pStr))[len] = cBuf; 	} }#   define DBG_MSG( lvl, fmt, arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8 )	\	{ if( (lvl) <= dosDirOldDebug )					\	    printErr( "%s : %d : " fmt,				\	               __FILE__, __LINE__, arg1,arg2,	\		       arg3,arg4,arg5,arg6,arg7,arg8 ); }#   define ERR_MSG( lvl, fmt, a1,a2,a3,a4,a5,a6 )		\        { logMsg( __FILE__ " : " fmt, (int)(a1), (int)(a2),	\		  (int)(a3), (int)(a4), (int)(a5), (int)(a6) ); }#else	/* NO DEBUG */#   define NDEBUG#   define DBG_PRN_STR( lvl, fmt, pStr, len, arg )	{}#   define DBG_MSG(lvl,fmt,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) 	{}#   define ERR_MSG( lvl, fmt, a1,a2,a3,a4,a5,a6 )		\	{ if( (lvl) <= dosDirOldDebug ) 				\            logMsg( __FILE__ " : " fmt, (int)(a1), (int)(a2),	\		  (int)(a3), (int)(a4), (int)(a5), (int)(a6) ); }#endif /* DEBUG */ #include "assert.h"#ifdef ERR_SET_SELF#   define errnoSet( err ) errnoSetOut( __FILE__, __LINE__, #err, (err) )#endif /* ERR_SET_SELF *//* vxWorks long names specific  *//* typedefs */typedef enum {RD_FIRST, RD_CURRENT, RD_NEXT, FD_ENTRY} RDE_OPTION;				/* function argument */typedef struct DOS_DIROLD_DESC	/* directory handler's part of */				/* volume descriptor */    {    DOS_DIR_PDESCR	genDirDesc;	/* generic descriptor */    } DOS_DIROLD_DESC;typedef DOS_DIROLD_DESC *	DOS_DIROLD_DESC_ID;/* globals */int	dosDirOldDebug = 1;/* locals *//* valid filename characters table ('|' is invalid character) */static const u_char	shortNamesChar[] =                                        /* 0123456789abcdef */                                          "||||||||||||||||"                                          "||||||||||||||||"                                          " !|#$%&'()|||-||"                                          "0123456789||||||"                                          "@ABCDEFGHIJKLMNO"                                          "PQRSTUVWXYZ|||^_"                                          "`ABCDEFGHIJKLMNO"                                          "PQRSTUVWXYZ{|}~|" ,                        longNamesChar[] =                                        /* 0123456789abcdef */                                          "||||||||||||||||"                                          "||||||||||||||||"                                          " !|#$%&'()|+,-.|"                                          "0123456789|;|=||"                                          "@ABCDEFGHIJKLMNO"                                          "PQRSTUVWXYZ[|]^_"                                          "`abcdefghijklmno"                                          "pqrstuvwxyz{|}~|" ;/* forward declarations */#ifdef ERR_SET_SELF/******************************************************************************** errnoSetOut - put error message** This routine is called instead errnoSet during debugging.*/static VOID errnoSetOut(char * pFile, int line, const char * pStr, int errCode )    {    if( errCode != OK  && strcmp( str, "errnoBuf" ) != 0 )        printf( " %s : line %d : %s = %p, task %p\n",                pFile, line, pStr, (void *)errCode,                (void *)taskIdSelf() );    errno = errCode;    }#endif  /* ERR_SET_SELF */ /***************************************************************************** dosDirOldFillFd - fill file descriptor for directory entry.** RETURNS: N/A.*/LOCAL void dosDirOldFillFd    (    DOS_FILE_DESC_ID	pFd,	/* dos file descriptor to fill */    u_char *	pDirEnt		/* directory entry from disk */    )    {    DOS_DIR_PDESCR_ID	pDirDesc = (void *)pFd->pVolDesc->pDirDesc;    DOS_DIR_HDL_ID	pDirHdl = (void *)&(pFd->pFileHdl->dirHdl);    DIRENT_DESCR_ID	pDeDesc;        pDeDesc = &pDirDesc->deDesc;        if( pDirEnt == (u_char *) NULL )	/* root directory */    	{    	DBG_MSG( 600, "root directory\n", 0,0,0,0,0,0,0,0 );    	ROOT_SET( pFd );	/* via <parDirStartCluster> field */    	pFd->curSec = pDirDesc->dirDesc.rootStartSec;    	pFd->nSec = pDirDesc->dirDesc.rootNSec;    	pFd->pos = 0;    	pFd->pFileHdl->attrib = DOS_ATTR_DIRECTORY;    	pFd->pFileHdl->startClust = pDirDesc->rootStartClust;    	    	pDirHdl->sector = NONE;    	pDirHdl->offset = NONE;    	    	pFd->cbioCookie = (cookie_t) NULL;    	pDirHdl->cookie = (cookie_t) NULL;    	    	goto rewind;    	}        /* at the beginning fill directory handle using file descriptor */        pDirHdl->parDirStartCluster = pFd->pFileHdl->startClust;    pDirHdl->sector = pFd->curSec;    pDirHdl->offset = pFd->pos;    pDirHdl->cookie = pFd->cbioCookie;    pFd->cbioCookie = (cookie_t) NULL;    /* disassemble directory entry */        pFd->pos = 0;        pFd->curSec = 0;    pFd->nSec = 0;        pFd->pFileHdl->attrib = *(pDirEnt + pDeDesc->atrribOff);    pFd->pFileHdl->startClust =    		START_CLUST_DECODE( pFd->pVolDesc, pDeDesc, pDirEnt );        pFd->pFileHdl->size = DISK_TO_VX_32(pDirEnt + pDeDesc->sizeOff);        if( pDeDesc->extSizeOff != (u_char) NONE )    	{    	pFd->pFileHdl->size += EXT_SIZE_DECODE( pDeDesc, pDirEnt );    	}        rewind:    DBG_MSG( 600, "pFd = %p "    		  "dir hdl (sec-of-par = %u sector = %u offset = %u)\n"                  "pFileHdl = %p "                  "(startClust = %u size = %lu attr = %p)\n",                  pFd, pDirHdl->parDirStartCluster,                  pDirHdl->sector, pDirHdl->offset,                  pFd->pFileHdl, pFd->pFileHdl->startClust,                  pFd->pFileHdl->size,                  (void *)((int)pFd->pFileHdl->attrib) );    /*     * cause FAT to start from start cluster and     * get start contiguous block     */    bzero( (char *)&pFd->fatHdl, sizeof( pFd->fatHdl ) );    return;    } /* dosDirOldFillFd() *//***************************************************************************** dosDirOldRewindDir - rewind directory pointed by pFd.** This routine sets current sector in pFd to directory start sector* and current position  (offset in sector) to 0.** RETURNS: N/A.*/LOCAL void dosDirOldRewindDir    (    DOS_FILE_DESC_ID	pFd	/* dos file descriptor to fill */    )    {    DOS_DIR_PDESCR_ID	pDirDesc = (void *)pFd->pVolDesc->pDirDesc;        pFd->pos = 0;    pFd->nSec = 0;    pFd->curSec = 0;        /* for FAT32 curSec = rootNSec = 0 */        if( IS_ROOT( pFd ) && pDirDesc->dirDesc.rootNSec != 0 )    	{    	pFd->curSec = pDirDesc->dirDesc.rootStartSec;    	pFd->nSec = pDirDesc->dirDesc.rootNSec;    	return;    	}        /* regular file or FAT32 root */    /*     * cause FAT to start from start cluster and     * get start contiguous block     */    if( pFd->pVolDesc->pFatDesc->seek( pFd, FH_FILE_START, 0 ) == ERROR )    	{    	assert( FALSE );    	}    } /* dosDirOldRewindDir() */   /***************************************************************************** dosDirOldPathParse - parse a full pathname into an array of names.** This routine is similar to pathParse(), except it does not * allocate additional buffers nor changes the path string.** Parses a path in directory tree which has directory names* separated by '/' or '\\'s.  It fills the supplied array of* structures with pointers to directory and file names and * corresponding name length.** All occurrences of '//', '.' and '..'* are right removed from path. All tail dots and spaces are broken from* each name, that is name like "abc. . ." is treated as just "abc".** For instance, "/usr/vw/data/../dir/file" gets parsed into** .CS*                          namePtrArray*                         |---------|*   ---------------------------o    |*   |                     |    3    |*   |                     |---------|*   |   -----------------------o    |*   |   |                 |    2    |*   |   |                 |---------|*   |   |          ------------o    |*   |   |          |      |    3    |*   |   |          |      |---------|*   |   |          |   --------o    |*   |   |          |   |  |    4    |*   |   |          |   |  |---------|*   v   v          v   v  |   NULL  |*   |   |          |   |  |    0    |*   |   |          |   |  |---------|*   v   v          v   v *  |------------------------|*  |usr/vw/data/../dir/file |*  |-------\-----/----------|*          ignored** .CE** RETURNS: number of levels in path.** ERRNO:* S_dosFsLib_ILLEGAL_PATH* S_dosFsLib_ILLEGAL_NAME*/LOCAL int dosDirOldPathParse    (    DOS_VOLUME_DESC_ID	pVolDesc,    u_char *	path,    PATH_ARRAY_ID pnamePtrArray    )    {    FAST u_int	numPathLevels;    FAST u_char *	pName;    FAST u_char *	pRegChar; /* last not DOT and not SPACE char */        pnamePtrArray[0].pName = NULL;    /* go throw path string from left to right */        pName = path;    numPathLevels = 0;    while( *pName != EOS )	/* there is 'break' in loop also */    	{    	/* pass slashes */    	    	if( *pName == SLASH || *pName == BACK_SLASH )    	    {    	    pName++;    	    continue;    	    }    	    	/* process special names ( "." ".." ) */    	    	if( *pName == DOT )    	   {    	   /* "/./" - ignore "current directory" */    	   if( *(pName + 1) == EOS || *(pName + 1) == SLASH ||    	       *(pName + 1) == BACK_SLASH )    	   	{    	   	pName ++;    	   	continue;    	   	}    	       	   /* "/../" - goto one level back */    	       	   if( (*(pName + 1) == DOT) &&    	       ( *(pName + 2) == EOS || *(pName + 2) == SLASH ||    	         *(pName + 2) == BACK_SLASH ) )    	   	{    	   	if( numPathLevels > 0 )    	   	    numPathLevels --;    	   	pName +=2;    	   	continue;    	   	}    	   } /* if( *pName == DOT ) */    	       	/* regular name: insert it into array */    	    	if( numPathLevels >= DOS_MAX_DIR_LEVELS )    	    break;	/* max level overloaded */    	    	pnamePtrArray[numPathLevels].pName = pName;    	pnamePtrArray[numPathLevels + 1].pName = NULL;    	pRegChar = NULL;    	while( *pName != SLASH && *pName != BACK_SLASH && *pName != EOS )    	    {    	    if( *pName != DOT || *pName == SPACE )    	    	pRegChar = pName;    	    pName++;    	    }    	    	/* name can not contain only dots */    	    	if( pRegChar == NULL )    	    {    	    errnoSet( S_dosFsLib_ILLEGAL_NAME );    	    return ERROR;    	    }    	    	pnamePtrArray[numPathLevels].nameLen =    		pRegChar + 1 - pnamePtrArray[numPathLevels].pName;    	    	numPathLevels++;    	} /* while( *pName != EOS ) */        /* check result */        if( *pName != EOS )	/* path termination has not been reached */    	{    	errnoSet( S_dosFsLib_ILLEGAL_PATH );    	return ERROR;    	}#ifdef DEBUG    DBG_MSG( 600, "path: %s, result: \n", path ,0,0,0,0,0,0,0);    pName = (void *)pnamePtrArray;    for( ; pnamePtrArray->pName != NULL; pnamePtrArray++ )    	{    	int i = pnamePtrArray - (PATH_ARRAY_ID)pName + 1;    	DBG_PRN_STR( 600, "%s : %d", pnamePtrArray->pName,    			pnamePtrArray->nameLen, i );    	}    DBG_PRN_STR(600, "\b\b \n", "", 0, 0);#endif /* DEBUG */    return numPathLevels;    } /* dosDirOldPathParse() */    /***************************************************************************** dosDirOldTDDecode - decode time-date field from disk format.** This routine decodes required date-time field in the directory* entry into time_t format.* * Parameter which defines which time field to decode. It* can be one of:* DH_TIME_CREAT, DH_TIME_MODIFY, DH_TIME_ACCESS.** RETURNS: time in time_t format.**/LOCAL time_t dosDirOldTDDecode    (    DOS_DIR_PDESCR_ID	pDirDesc,    u_char *	pDirent,	/* directory entry buffer */    u_int	which	/* what field to decode: one of */    			/* DH_TIME_CREAT, DH_TIME_MODIFY or DH_TIME_ACCESS */    )    {    struct tm	tm = {0};	/* broken down time buffer */    UINT16	dtBuf;		/* 16-bit buffer */    u_char	tOff = 0, dOff = 0;	/* field offset */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区最好精华液| 久久麻豆一区二区| 99久久伊人精品| 国产精品一区二区免费不卡| 国内成人自拍视频| 国产一区在线视频| 国产aⅴ精品一区二区三区色成熟| 久久不见久久见中文字幕免费| 麻豆极品一区二区三区| 久久精品999| 日本成人在线视频网站| 精品一区二区三区av| 国产成人精品三级麻豆| av电影一区二区| 色综合久久久久久久久| 欧美在线观看你懂的| 9191久久久久久久久久久| 欧美一级淫片007| 久久久久久久久99精品| 国产精品短视频| 亚洲成人777| 狠狠色综合播放一区二区| 成人app下载| 欧美日本国产一区| 国产日韩欧美a| 亚洲国产精品视频| 国产综合久久久久久鬼色| 一本久久a久久精品亚洲 | 精品国产精品一区二区夜夜嗨| 精品福利av导航| 亚洲欧美激情小说另类| 日韩精品电影一区亚洲| 成人精品高清在线| 69p69国产精品| 国产精品的网站| 日韩国产在线观看一区| 99精品欧美一区二区三区小说| 7777精品伊人久久久大香线蕉完整版 | 在线观看三级视频欧美| 日韩免费视频线观看| 亚洲欧洲av在线| 久久精品99国产精品日本| 色婷婷一区二区| 久久精品欧美日韩| 午夜精品福利一区二区三区av| 国产传媒一区在线| 欧美一区二区视频免费观看| 综合中文字幕亚洲| 国产一区二区三区香蕉| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 91在线视频网址| 久久综合av免费| 日韩中文字幕不卡| 91激情在线视频| 国产精品久久久久久久久晋中 | 香蕉乱码成人久久天堂爱免费| 丁香一区二区三区| 日韩亚洲欧美一区| 亚洲午夜久久久久久久久电影院| 高清久久久久久| 精品电影一区二区| 日本sm残虐另类| 欧美日韩国产片| 亚洲成人在线网站| 欧美日韩色一区| 亚洲网友自拍偷拍| 在线观看免费视频综合| 亚洲激情男女视频| 91久久精品国产91性色tv| 亚洲品质自拍视频网站| 91在线精品秘密一区二区| 国产精品嫩草影院com| 丁香婷婷综合色啪| 欧美国产精品一区二区三区| 国产成人在线免费| 国产三级欧美三级日产三级99| 精品影院一区二区久久久| 日韩欧美一区二区免费| 久久9热精品视频| 久久久久久久综合色一本| 激情综合网最新| 国产午夜精品一区二区三区嫩草| 国产精品18久久久久| 久久免费视频一区| 成人教育av在线| 亚洲同性同志一二三专区| 在线免费观看视频一区| 午夜精品福利一区二区三区蜜桃| 欧美一级高清大全免费观看| 久久电影网站中文字幕| 国产片一区二区| 91亚洲精华国产精华精华液| 亚洲3atv精品一区二区三区| 日韩视频123| 床上的激情91.| 一区二区三区中文字幕精品精品 | 精品日韩99亚洲| 国产在线播放一区三区四| 国产精品第13页| 欧美一区二区在线看| 精品一区二区三区久久久| 国产精品五月天| 欧美在线一区二区| 黄色日韩网站视频| 专区另类欧美日韩| 777亚洲妇女| 成人av电影在线网| 日韩电影在线免费观看| 久久亚洲一级片| 日本韩国精品一区二区在线观看| 奇米影视一区二区三区小说| 欧美激情综合网| 宅男噜噜噜66一区二区66| 国产成人免费在线观看不卡| 亚洲v中文字幕| 国产精品国产自产拍在线| 91精品国产一区二区| 99热这里都是精品| 久久99热这里只有精品| 亚洲国产精品影院| 中文字幕欧美一| 久久先锋影音av鲁色资源网| 欧美日本免费一区二区三区| 成人99免费视频| 国产成人在线网站| 麻豆成人免费电影| 亚洲第一搞黄网站| 亚洲欧美自拍偷拍色图| 欧美电影精品一区二区| 777奇米成人网| 欧美亚洲综合另类| 99国产精品久| 懂色中文一区二区在线播放| 极品少妇xxxx精品少妇| 青青草国产精品97视觉盛宴| 一区二区三区高清在线| 国产精品久久久久久妇女6080 | 色综合视频一区二区三区高清| 国产一区二区三区久久久 | 成人动漫一区二区三区| 国产自产视频一区二区三区| 日产精品久久久久久久性色| 亚洲国产精品自拍| 亚洲第一福利一区| 午夜天堂影视香蕉久久| 亚洲自拍偷拍av| 亚洲制服丝袜一区| 亚洲国产日韩在线一区模特 | 欧美大片日本大片免费观看| 欧美日韩三级一区二区| 欧美日韩成人一区| 欧美久久久久久蜜桃| 欧美美女一区二区| 欧美精品亚洲一区二区在线播放| 欧美影视一区在线| 色婷婷综合在线| 91久久奴性调教| 这里只有精品视频在线观看| 欧美一区二区精品| 欧美精品一区二区三区蜜桃视频 | 久久久久国产精品麻豆| 国产三级精品视频| 综合自拍亚洲综合图不卡区| 亚洲精品成人天堂一二三| 一区二区三区精密机械公司| 亚洲成在线观看| 久久国产婷婷国产香蕉| 国产不卡视频在线播放| eeuss鲁片一区二区三区在线观看| 91日韩精品一区| 欧美电影影音先锋| 久久久久国色av免费看影院| 综合av第一页| 日韩和的一区二区| 国产福利91精品| 在线观看一区二区视频| 日韩免费一区二区| 中文字幕中文字幕在线一区 | 日韩精品一区二区三区四区视频| 久久只精品国产| 亚洲精品免费一二三区| 婷婷久久综合九色综合绿巨人| 久久se这里有精品| 色婷婷精品久久二区二区蜜臀av | 成人免费一区二区三区在线观看 | 欧美成人三级电影在线| 国产精品嫩草99a| 性做久久久久久久久| 国产成人综合视频| 欧美久久久久久蜜桃| 国产精品欧美一区喷水| 日韩精品视频网| 91丨国产丨九色丨pron| 精品日韩在线观看| 一区二区免费看| 国产成人8x视频一区二区| 欧美丰满高潮xxxx喷水动漫| 成人免费视频在线观看| 国产一区二区久久| 7777精品伊人久久久大香线蕉最新版|