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

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

?? dpartcbio.c

?? vxworks操作系統的文件系統部分原代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* dpartCbio.c - generic disk partition manager *//* Copyright 1999-2002 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01s,14jan02,jkf  SPR#72533,dpartDevCreate failed with BLK_DEV, & doc edits.01r,12dec01,jkf  fixing diab build warnings.01q,09dec01,jkf  SPR#71637, fix for SPR#68387 caused ready changed bugs.01p,09nov01,jkf  SPR#71633, dont set errno when DevCreate is called w/BLK_DEV01o,20sep01,jkf  SPR#69031, common code for both AE & 5.x.01n,01aug01,jyo  Fixed SPR#69411: Change in media's readyChanged bit is not                 being propogated appropriately to the layers above.01m,14jun01,jyo  SPR#67729: Updating blkSubDev, cbioSubDev and isDriver in                 dpartDevCreate().01l,19apr00,dat  doc fixup01k,29feb00,jkf  T3 changes, cleanup.01j,15sep99,jkf  changes for new CBIO API.01i,24aug99,jkf  changed docs01h,31jul99,jkf  increased max partitions to 24 (c-z) in header,                  changed docs, defaulted the debug global to 0. SPR#28277.01g,31jul99,jkf  T2 merge, tidiness & spelling.01f,07dec98,lrn  minor fixes for partition table creation01e,25oct98,lrn  fixed re-reading subDev geometry on RESET01d,15sep98,lrn  some doc cleanups01c,10sep98,lrn  added cbioDevVerify for cache-less configs01b,02jul98,lrn  tested, doc review01a,15jun98,lrn  written, preliminary*//*DESCRIPTIONThis module implements a generic partition manager using the CBIOAPI (see cbioLib)  It supports creating a separate file system device for each of its partitions.This partition manager depends upon an external library to decode aparticular disk partition table format, and report the resultingpartition layout information back to this module.  This module isresponsible for maintaining the partition logic during operation.When using this module with the dcacheCbio module, it is recommenedthis module be the master CBIO device.   This module should be above the cache CBIO module layer.   This is because the cache layer is optimized to fuction efficently atop a single physical disk drive.One should call dcacheDevCreate before dpartDevCreate.An implementation of the de-facto standard partition table formatwhich is created by the MSDOS FDISK program is provided with theusrFdiskPartLib module, which should be used to handle PC-stylepartitioned hard or removable drives.EXAMPLEThe following code will initialize a disk which is expected to have upto 4 partitions:.CS  usrPartDiskFsInit( BLK_DEV * blkDevId )    {    const char * devNames[] = { "/sd0a", "/sd0b", "/sd0c", "/sd0d" };    CBIO_DEV_ID cbioCache;    CBIO_DEV_ID cbioParts;    /@ create a disk cache atop the entire BLK_DEV @/    cbioCache = dcacheDevCreate ( blkDevId, NULL, 0, "/sd0" );    if (NULL == cbioCache)        {        return (ERROR);        }    /@ create a partition manager with a FDISK style decoder @/    cbioParts = dpartDevCreate( cbioCache, 4, usrFdiskPartRead );    if (NULL == cbioParts)        {        return (ERROR);        }    /@ create file systems atop each partition @/    dosFsDevCreate( devNames[0], dpartPartGet(cbioParts,0), 0x10, NONE);    dosFsDevCreate( devNames[1], dpartPartGet(cbioParts,1), 0x10, NONE);    dosFsDevCreate( devNames[2], dpartPartGet(cbioParts,2), 0x10, NONE);    dosFsDevCreate( devNames[3], dpartPartGet(cbioParts,3), 0x10, NONE);    }.CEBecause this module complies with the CBIO programming interface on both its upper and lower layers, it is both an optional and a stackable module.SEE ALSO:dcacheLib, dosFsLib, usrFdiskPartLibINTERNAL*//* includes */#include "vxWorks.h"#include "private/dosFsVerP.h"#include "stdlib.h"#include "semLib.h"#include "ioLib.h"#include "string.h"#include "stdio.h"#include "errno.h"#include "assert.h"/* START - CBIO private header */#define	CBIO_DEV_EXTRA	struct dpartCtrl#include "private/cbioLibP.h"/* END - CBIO private header */#include "dpartCbio.h"/* Implementation dependent data structures */typedef struct dpartCtrl    {    CBIO_DEV_ID	subDev;		/* lower level CBIO device handle */    int		nPart ;		/* Actual # of partitions on the disk */    FUNCPTR	pPartDecodeFunc;/* Extern. partition decoder */    PART_TABLE_ENTRY		/* partition table */		table [ PART_MAX_ENTRIES ];        CBIO_DEV			/* per-partition virtual devices */		vDev [ PART_MAX_ENTRIES ];    CBIO_DEV_ID	masterDev;	/* master handle CBIO */    } DPART_CTRL ;/* custom use of CBIO fields */#define	cbioPartIndx	cbioPriv0extern void logMsg( const char *fmt, ... );int dpartDebug = 0;int dpartSemOptions = (SEM_Q_PRIORITY | SEM_INVERSION_SAFE | SEM_DELETE_SAFE) ;#define	INFO_MSG	logMsg#define	DEBUG_MSG	if(dpartDebug) logMsg/* declarations */LOCAL STATUS dpartBlkRW    (    CBIO_DEV_ID		dev,    block_t		startBlock,    block_t		numBlocks,    addr_t		buffer,    CBIO_RW		rw,    cookie_t		*pCookie    );LOCAL STATUS dpartBytesRW    (    CBIO_DEV_ID 	dev,    block_t		startBlock,    off_t		offset,    addr_t		buffer,    size_t		nBytes,    CBIO_RW		rw,    cookie_t		*pCookie    );LOCAL STATUS dpartBlkCopy    (    CBIO_DEV_ID 	dev,    block_t		srcBlock,    block_t		dstBlock,    block_t		numBlocks    );LOCAL STATUS dpartIoctl    (    CBIO_DEV_ID	dev,    UINT32 command,    addr_t	arg    );/* CBIO_FUNCS, one per cbio driver */LOCAL CBIO_FUNCS cbioFuncs = {(FUNCPTR) dpartBlkRW,			      (FUNCPTR) dpartBytesRW,			      (FUNCPTR) dpartBlkCopy,			      (FUNCPTR) dpartIoctl};/********************************************************************************* dpartPartTableFill - Fill in partition geometry** Call external function to decode partitions, and fill the partition* geometry table accordingly.** RETURNS: OK or ERROR if the partition decode function failed for any reason*/LOCAL STATUS dpartPartTableFill( DPART_CTRL * pDc )    {    STATUS ret;    int pn ;    CBIO_DEV_ID  masterDev, subDev ;    masterDev = pDc->masterDev;    subDev = pDc->subDev;    if((OK != cbioDevVerify( masterDev )) ||       (OK != cbioDevVerify( subDev )))	{	return ERROR;	}    bzero( (char *) &pDc->table, sizeof( pDc->table ) );    /* First, call out the external decode function */    ret = pDc->pPartDecodeFunc( pDc->subDev, &pDc->table, pDc->nPart ) ;    if( ret == ERROR )	return ERROR ;    /*     * re-configure device geometry in case it has been replaced     */    masterDev->cbioParams.nBlocks	= subDev->cbioParams.nBlocks ;    masterDev->cbioParams.bytesPerBlk	= subDev->cbioParams.bytesPerBlk ;    masterDev->cbioParams.blocksPerTrack= subDev->cbioParams.blocksPerTrack ;    masterDev->cbioParams.nHeads	= subDev->cbioParams.nHeads ;    masterDev->cbioMode			= subDev->cbioMode ;    /*     * check sanity of the resulting partition table:     */    for( pn = 0; pn < pDc->nPart; pn ++ )	{	if( pDc->table[pn].spare != 0 || 	    (pDc->table[pn].offset + pDc->table[pn].nBlocks) >		pDc->subDev->cbioParams.nBlocks )		{		DEBUG_MSG("dpartCbio: error: "			"partition spills over disk size: %d blocks\n",			pDc->table[pn].offset + pDc->table[pn].nBlocks -			pDc->subDev->cbioParams.nBlocks );		return ERROR;		}	}    DEBUG_MSG("dpartCbio: partition table decoded:\n");    for( pn = 0; pn < pDc->nPart; pn ++ )	{	DEBUG_MSG("  part %d: offset %d nBlocks %d (next free block %d) \n",		pn, pDc->table[pn].offset, pDc->table[pn].nBlocks,		pDc->table[pn].offset + pDc->table[pn].nBlocks);	pDc->vDev[ pn ].cbioParams.nBlocks = pDc->table[pn].nBlocks ;	pDc->vDev[ pn ].cbioParams.blockOffset  = pDc->table[pn].offset ;    	pDc->vDev[ pn ].cbioParams.bytesPerBlk	= 				subDev->cbioParams.bytesPerBlk ;    	pDc->vDev[ pn ].cbioParams.blocksPerTrack = 				subDev->cbioParams.blocksPerTrack ;    	pDc->vDev[ pn ].cbioParams.nHeads	= 				subDev->cbioParams.nHeads ;    	pDc->vDev[ pn ].cbioMode		= subDev->cbioMode ;	CBIO_READYCHANGED (&(pDc->vDev[ pn ])) = TRUE;	}    DEBUG_MSG("dpartCbio: end of partitions, total device blocks %d\n",		pDc->subDev->cbioParams.nBlocks );    return OK ;    }/********************************************************************************* dpartBlkRW - Read/Write blocks** This routine transfers between a user buffer and the lower layer CBIO* It is optimized for block transfers.  ** RETURNS OK or ERROR and may otherwise set errno.*/LOCAL STATUS dpartBlkRW    (    CBIO_DEV_ID		dev,		/* CBIO handle */    block_t		startBlock,	/* starting block */    block_t		numBlocks,	/* nbr of blocks */    addr_t		buffer,		/* data buffer */    CBIO_RW		rw,		/* data direction */    cookie_t		*pCookie	/* passed thru */    )    {    CBIO_DEV *	pDev = (void *) dev ;    STATUS retStat ;    if(TRUE == cbioRdyChgdGet (dev))	{	errno = S_ioLib_DISK_NOT_PRESENT ;	return ERROR;	}    if( (startBlock) > pDev->cbioParams.nBlocks ||    	(startBlock+numBlocks) > pDev->cbioParams.nBlocks )	return ERROR;    startBlock += pDev->cbioParams.blockOffset;    if( semTake( pDev->cbioMutex, WAIT_FOREVER) == ERROR )	return ERROR;    retStat = pDev->pDc->subDev->pFuncs->cbioDevBlkRW(		pDev->pDc->subDev,		startBlock,		numBlocks,		buffer,		rw,		pCookie );    if( retStat == ERROR )	if( TRUE == cbioRdyChgdGet (dev->pDc->subDev))	    CBIO_READYCHANGED (dev) = TRUE;    semGive( pDev->cbioMutex );    return (retStat);    }/********************************************************************************* dpartBytesRW - Read/Write bytes** This routine transfers between a user buffer and the lower layer CBIO* It is optimized for byte transfers.  ** dev - the CBIO handle of the device being accessed (from creation routine)* * startBlock - the starting block of the transfer operation* * offset - offset in bytes from the beginning of the starting block* * buffer - address of the memory buffer used for the transfer* * nBytes - number of bytes to transfer* * rw - indicates the direction of transfer up or down (READ/WRITE)* * *pCookie - pointer to cookie used by upper layer such as dosFsLib(),* it should be preserved.* * RETURNS OK or ERROR and may otherwise set errno.*/LOCAL STATUS dpartBytesRW    (    CBIO_DEV_ID 	dev,    block_t		startBlock,    off_t		offset,    addr_t		buffer,    size_t		nBytes,    CBIO_RW		rw,    cookie_t		*pCookie    )    {    CBIO_DEV * 	pDev = dev ;    STATUS retStat ;    if(TRUE == cbioRdyChgdGet (dev))	{	errno = S_ioLib_DISK_NOT_PRESENT ;	return ERROR;	}    if( startBlock >= pDev->cbioParams.nBlocks )	return ERROR;    /* verify that all bytes are within one block range */    if (((offset + nBytes) > pDev->cbioParams.bytesPerBlk ) ||	(offset <0) || (nBytes <=0))	return ERROR;    /* apply offset */    startBlock += pDev->cbioParams.blockOffset;    if( semTake( pDev->cbioMutex, WAIT_FOREVER) == ERROR )	return ERROR;    retStat = pDev->pDc->subDev->pFuncs->cbioDevBytesRW(		pDev->pDc->subDev,		startBlock,		offset,		buffer,		nBytes,		rw,		pCookie );    if( retStat == ERROR )	if( TRUE == cbioRdyChgdGet (dev->pDc->subDev))	    CBIO_READYCHANGED (dev) = TRUE;    semGive( pDev->cbioMutex );    return ( retStat );    }/********************************************************************************* dpartBlkCopy - Copy sectors ** This routine makes copies of one or more blocks on the lower layer CBIO.* It is optimized for block copies on the subordinate layer.  * * dev - the CBIO handle of the device being accessed (from creation routine)* * srcBlock - source start block of the copy* * dstBlock - destination start block of the copy* * num_block - number of blocks to copy** RETURNS OK or ERROR and may otherwise set errno.*/LOCAL STATUS dpartBlkCopy    (    CBIO_DEV_ID 	dev,    block_t		srcBlock,    block_t		dstBlock,    block_t		numBlocks    )    {    CBIO_DEV	*pDev = (void *) dev ;    STATUS retStat ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久久久久久久| 成熟亚洲日本毛茸茸凸凹| 日韩码欧中文字| 欧美高清在线一区二区| 中文字幕 久热精品 视频在线| 久久精品亚洲精品国产欧美| 久久精品亚洲一区二区三区浴池| 精品999久久久| 国产精品你懂的在线| 中文字幕欧美激情| 亚洲精品国产一区二区三区四区在线 | 亚洲va欧美va人人爽| 午夜激情久久久| 免费成人在线播放| 国产麻豆91精品| 99在线视频精品| 欧美日韩成人在线一区| 欧美成人a在线| 日本一区二区三区久久久久久久久不 | www.欧美亚洲| 在线观看日韩电影| 欧美精选一区二区| 久久综合色综合88| 1区2区3区欧美| 图片区小说区区亚洲影院| 麻豆久久久久久| av在线这里只有精品| 91精品国产综合久久精品| 久久久99精品免费观看不卡| 日韩毛片在线免费观看| 日精品一区二区三区| 国产成人综合在线观看| 91麻豆国产香蕉久久精品| 欧美浪妇xxxx高跟鞋交| 久久综合网色—综合色88| 樱花草国产18久久久久| 国产在线观看一区二区| 欧美在线视频全部完| 久久婷婷成人综合色| 亚洲精品视频免费看| 韩国精品主播一区二区在线观看 | 欧美卡1卡2卡| 中文字幕在线观看一区二区| 麻豆国产91在线播放| 色婷婷一区二区| 久久五月婷婷丁香社区| 日一区二区三区| 99久久99久久精品免费看蜜桃| 欧美第一区第二区| 亚洲尤物视频在线| 成人av免费观看| 久久久久99精品一区| 午夜精品在线看| 91国产视频在线观看| 欧美国产亚洲另类动漫| 老司机精品视频线观看86| 欧美日韩一区成人| 日韩理论片中文av| 不卡视频免费播放| 久久久精品免费免费| 久久精品国产一区二区三| 欧美日韩精品欧美日韩精品| 亚洲精品视频在线看| 成人一区在线观看| 欧美激情一区二区三区蜜桃视频| 久久精品国产999大香线蕉| 3d成人h动漫网站入口| 日日夜夜免费精品| 91精品国产综合久久蜜臀| 亚洲第一狼人社区| 欧美日韩精品一区视频| 夜夜嗨av一区二区三区四季av| 99久久er热在这里只有精品15 | 国产精品日韩精品欧美在线| 狠狠色狠狠色综合系列| 日韩一级高清毛片| 日韩不卡一区二区三区 | 成人午夜私人影院| 欧美国产成人精品| 91麻豆文化传媒在线观看| 亚洲欧美一区二区三区极速播放 | 色综合中文字幕| 一区二区在线观看不卡| 91福利精品第一导航| 亚洲成av人片观看| 日韩欧美三级在线| 国产成人免费视频精品含羞草妖精| 久久久一区二区三区| 高潮精品一区videoshd| 国产精品久久久久久久浪潮网站 | www.激情成人| 亚洲国产日韩综合久久精品| 欧美一区二区三区男人的天堂| 日韩高清在线不卡| 精品成a人在线观看| 不卡视频免费播放| 洋洋成人永久网站入口| 精品捆绑美女sm三区| 国产成人无遮挡在线视频| 日韩理论电影院| 7777精品久久久大香线蕉| 国产又黄又大久久| 综合久久国产九一剧情麻豆| 制服丝袜av成人在线看| 国产成人在线网站| 亚洲午夜免费福利视频| 久久久久久久久久久久久夜| 色婷婷综合久久久久中文一区二区| 亚洲电影在线免费观看| 精品国产免费人成在线观看| 波多野结衣91| 久久激情综合网| 亚洲青青青在线视频| 久久综合色之久久综合| 91官网在线观看| 韩国一区二区三区| 亚洲一区二区av电影| 国产欧美视频一区二区| 91精品久久久久久蜜臀| www.欧美日韩国产在线| 韩国在线一区二区| 日韩国产高清在线| 亚洲一区二区三区精品在线| 亚洲国产精品高清| 欧美va亚洲va| 6080亚洲精品一区二区| 99re热视频这里只精品| 国产在线一区二区| 亚洲一区二区黄色| 亚洲欧美国产三级| 国产精品污网站| 精品国产不卡一区二区三区| 欧美日韩电影在线| 成人18视频在线播放| 国产成人一区在线| 国产在线精品不卡| 久久99精品久久久| 美国av一区二区| 奇米在线7777在线精品 | 国产尤物一区二区| 蜜芽一区二区三区| 日韩高清欧美激情| 亚洲综合免费观看高清完整版 | 欧美成人精品二区三区99精品| 欧美伊人久久久久久午夜久久久久| 波多野洁衣一区| av不卡一区二区三区| www.亚洲人| 色系网站成人免费| 色妞www精品视频| 色婷婷av一区| 欧美视频一区二| 欧美丰满美乳xxx高潮www| 欧美日产国产精品| 日韩欧美国产成人一区二区| 欧美一级午夜免费电影| 日韩三级电影网址| 日韩精品一区二区三区视频| 26uuu久久天堂性欧美| 久久精品男人天堂av| 中文字幕av不卡| 亚洲精选视频在线| 亚洲成人在线观看视频| 蜜桃av一区二区在线观看| 久久av中文字幕片| 国产精品影视在线观看| 波波电影院一区二区三区| 日本丶国产丶欧美色综合| 欧美精品乱码久久久久久| 日韩精品中午字幕| 欧美激情在线观看视频免费| 亚洲视频免费看| 日本不卡的三区四区五区| 久久精工是国产品牌吗| 成人午夜激情视频| 99riav久久精品riav| 欧美精品粉嫩高潮一区二区| 精品人在线二区三区| 自拍偷拍亚洲综合| 青青草97国产精品免费观看无弹窗版 | 亚洲伊人色欲综合网| 久久精工是国产品牌吗| 99久久99久久精品国产片果冻 | 国产精品香蕉一区二区三区| 成人黄色av电影| 欧美日韩精品欧美日韩精品一 | 精品久久久久久久久久久久久久久久久 | 国产精品一品二品| 91免费精品国自产拍在线不卡| 8x福利精品第一导航| 中文字幕欧美国产| 蜜乳av一区二区| 91视频免费观看| 国产亚洲精久久久久久| 亚洲国产日韩精品| a级精品国产片在线观看| 欧美一区二区三区在线观看视频 | 精品一区二区三区在线播放视频| 99久久免费国产| 日韩欧美中文字幕精品|