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

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

?? tarlib.c

?? VxWorks BSP框架源代碼包含頭文件和驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* tarLib.c - UNIX tar compatible library *//* Copyright 1993-2002 Wind River Systems, Inc. *//* Copyright (c) 1993, 1994 RST Software Industries Ltd. *//*modification history--------------------01i,20sep01,jkf  SPR#69031, common code for both AE & 5.x.01h,26dec99,jkf  T3 KHEAP_ALLOC03g,11nov99,jkf  need to fill all eight bytes with 0x20 for the checksum                  calc correct for MKS toolkit 6.2 generated tar file.03f,31jul99,jkf  T2 merge, tidiness & spelling.03e,30jul98,lrn  partial doc cleanup03b,24jun98,lrn  fixed bug causing 0-size files to be extracted as dirs,		 improved tarHelp to list parameters03a,07jun98,lrn  derived from RST usrTapeLib.c, cleaned all tape related stuff02f,15jan95,rst  adding TarToc functionality02d,28mar94,rst  added Tar utilities.*//*DESCRIPTIONThis library implements functions for archiving, extracting and listingof UNIX-compatible "tar" file archives.It can be used to archive and extract entire file hierarchiesto/from archive files on local or remote disks, or directly to/frommagnetic tapes.SEE ALSO: dosFsLibCURRENT LIMITATIONSThis Tar utility does not handle MS-DOS file attributes,when used in conjunction with the MS-DOS file system.The maximum subdirectory depth supported by this library is 16,while the total maximum path name that can be handled by tar is limited at 100 characters.*/#include "vxWorks.h"#include "stdlib.h"#include "ioLib.h"#include "errnoLib.h"#include "string.h"#include "stdio.h"#include "private/dosFsVerP.h"#include "dosFsLib.h"#include "dirent.h"#include "stat.h"#include "tarLib.h"/* data types *//* * VxWorks Tar Utility, part of usrTapeLib (for now). * UNIX tar(1) tape format - header definition */#define TBLOCK		512	/* TAR Tape block size, part of TAR format */#define NAMSIZ		100	/* size of file name in TAR tape header */#define	MAXLEVEL	16	/* max. # of subdirectory levels, arbitrary */#define	NULLDEV		"/null"	/* data sink */typedef union hblock    {    char dummy[TBLOCK];    struct header	{	char name[NAMSIZ];	char mode[8];	char uid[8];	char gid[8];	char size[12];	char mtime[12];	char chksum[8];	char linkflag;	char linkname[NAMSIZ];    	}    dbuf;    } MT_HBLOCK ;/* Control structure used internally for reentrancy etc. */typedef struct    {    int 	fd ;			/* current tape file descriptor */    int		bFactor;		/* current blocking factor */    int		bValid;			/* number of valid blocks in buffer */    int		recurseCnt;		/* recusrion counter */    MT_HBLOCK *	pBuf;			/* working buffer */    MT_HBLOCK *	pBnext;			/* ptr to next block to return */    } MT_TAR_SOFT ;/* globals */char *TAPE = "/archive0.tar" ;	/* default archive name *//* locals */LOCAL char	bZero[ TBLOCK ] ; /* zeroed block *//********************************************************************************* tarHelp - print help information about TAR archive functions.** NOMANUAL*/void tarHelp    (    void    )    {    int i ;    const char * help_msg[] = {    "Help information on TAR archival functions:\n",    "\n",    " Archive any directory: \n",    "    tarArchive( archFile, bfactor, verbose, dirName )\n",    " Extract from TAR archive into current directory:\n",    "    tarExtract( archFile, bfactor, verbose )\n",    " List contents of TAR archive\n",    "    tarToc( archFile, bfactor)\n",    "      if <dirName> is NULL, archive current directory\n",    "\n", NULL     };    for(i = 0; help_msg[i] != NULL ; i++ )	printf(help_msg[i]);    printf(" if <archFile> is NULL,\n"	"current default archive file \"%s\" will be used,\n", TAPE);    printf(" change the TAPE variable to set a different name.\n\n");    }/********************************************************************************* mtChecksum - calculate checksums for tar header blocks** RETURNS: the checksum value*/LOCAL int mtChecksum    (    void *	pBuf,    unsigned	size    )    {    register int sum = 0 ;    register unsigned char *p = pBuf ;    while( size > 0 )	{	sum += *p++;	size -= sizeof(*p);	}    return(sum);    }/********************************************************************************* tarRdBlks - read <nBlocks> blocks from tape** RETURNS: number of blocks actually got, or ERROR.*/LOCAL int tarRdBlks    (    MT_TAR_SOFT *pCtrl,		/* control structure */    MT_HBLOCK **ppBlk,		/* where to return buffer address */    unsigned int nBlocks	/* how many blocks to get */    )    {    register int rc ;    if (pCtrl->bValid <= 0)	{	/* buffer empty, read more blocks from tape */	rc = read(pCtrl->fd, pCtrl->pBuf->dummy, pCtrl->bFactor * TBLOCK);	if ( rc == ERROR )	    return ERROR ;	else if( rc == 0 )	    return 0 ;	else if( (rc % TBLOCK) != 0 )	    {	    printErr("tarRdBlks: tape block not multiple of %d\n", TBLOCK);	    return ERROR;	    }		pCtrl->bValid = rc / TBLOCK ;	pCtrl->pBnext = pCtrl->pBuf ;	}    rc = min((ULONG)pCtrl->bValid, nBlocks) ;    *ppBlk = pCtrl->pBnext ;    pCtrl->bValid -= rc ;    pCtrl->pBnext += rc ;    return( rc ) ;    }/********************************************************************************* mtAccess - check existence of path for a new file or directory <name>** RETURNS: OK or ERROR*/LOCAL STATUS mtAccess    (    const char *name    )    {    char tmpName [ NAMSIZ ] ;    struct stat st ;    int i ;    static char slash = '/' ;    register char *pSlash ;    strncpy( tmpName, name, NAMSIZ ) ;    pSlash = tmpName ;    for(i=0; i<MAXLEVEL; i++)	{	if ( (pSlash = strchr(pSlash, slash)) == NULL )	    return OK;	*pSlash = '\0' ;	if ( stat( tmpName, &st ) == OK )	    {	    if( S_ISDIR(st.st_mode ) == 0)		{		printErr("Path %s is not a directory\n", tmpName);		return ERROR;		}	    }	else	    {	    mkdir( tmpName );	    }	*pSlash = slash ;	/* restore slash position */	pSlash++;	}    printErr("Path too long %s\n", name );    return ERROR;    }/********************************************************************************* tarExtractFile - extract one file or directory from tar tape** Called from tarExtract for every file/dir found on tape.** RETURNS: OK or ERROR*/LOCAL STATUS tarExtractFile    (    MT_TAR_SOFT	*pCtrl,		/* control structure */    MT_HBLOCK	*pBlk,		/* header block */    BOOL	verbose		/* verbose */    )    {    register int rc, fd ;    int		sum = -1 ;		/* checksum */    int		size = 0 ;		/* file size in bytes */    int		nblks = 0;		/* file size in TBLOCKs */    int		mode ;    char *	fn ;			/* file/dir name */    /* Check the checksum of this header */    rc = sscanf( pBlk->dbuf.chksum, "%o", &sum ) ;	/* extract checksum */    bfill( pBlk->dbuf.chksum, 8, ' ');		/* fill blanks */    if( mtChecksum( pBlk->dummy, TBLOCK ) != sum )	{	printErr("bad checksum %d != %d\n", mtChecksum(		pBlk->dummy, TBLOCK), sum );	return ERROR;	}    /* Parse all fields of header that we need, and store them safely */    sscanf( pBlk->dbuf.mode, "%o", &mode );    sscanf( pBlk->dbuf.size, "%12o", &size );    fn = pBlk->dbuf.name ;    /* Handle directory */    if( (size == 0) && ( fn[ strlen(fn) - 1 ] == '/' ) )	{	if( strcmp(fn, "./") == 0)	    return OK;	if ( fn[ strlen(fn) - 1 ] == '/' )	/* cut the slash */	    fn[ strlen(fn) - 1 ] = '\0' ;	/* Must make sure that parent exists for this new directory */	if ( mtAccess(fn) == ERROR )	    {	    return ERROR;	    }	fd = open (fn, O_RDWR | O_CREAT, FSTAT_DIR | (mode & 0777) );	if (( fd == ERROR ) && (errnoGet() == S_dosFsLib_FILE_EXISTS))	    {	    printErr("Warning: directory %s already exists\n", fn );	    return OK;	    }	else if (fd == ERROR)	    {	    printErr("failed to create directory %s, %s, continuing\n",		     fn, strerror(errnoGet()));	    return OK;	    }	if(verbose)	    printErr("created directory %s.\n", fn );	return (close (fd));	}    /* non-empty file has a trailing slash, we better treat it as file and */    if ( fn[ strlen(fn) - 1 ] == '/' )	/* cut a trailing slash */	fn[ strlen(fn) - 1 ] = '\0' ;    /* Filter out links etc */    if ((pBlk->dbuf.linkflag != '\0') &&    	(pBlk->dbuf.linkflag != '0') &&	(pBlk->dbuf.linkflag != ' '))	{	printErr("we do not support links, %s skipped\n", fn );	return OK;	}    /* Handle Regular File - calculate number of blocks */    if( size > 0 )	nblks = ( size / TBLOCK ) +  ((size % TBLOCK)? 1 : 0 ) ;    /* Must make sure that directory exists for this new file */    if ( mtAccess(fn) == ERROR )	{	return ERROR;	}    /* Create file */    fd = open( fn, O_RDWR | O_CREAT, mode & 0777 ) ;    if( fd == ERROR )	{	printErr("failed to create file %s, %s, skipping!\n",		fn, strerror(errnoGet()));	fd = open( NULLDEV, O_RDWR, 0) ;	}    if(verbose)	printErr("extracting file %s, size %d bytes, %d blocks\n",		fn, size, nblks );    /* Loop until entire file extracted */    while (size > 0)	{	MT_HBLOCK *pBuf;	register int wc ;	rc = tarRdBlks( pCtrl, &pBuf, nblks) ;	if ( rc < 0 )	    {	    printErr("error reading tape\n");	    close(fd);	    return ERROR;	    }	wc = write( fd, pBuf->dummy, min( rc*TBLOCK, size ) ) ;	if( wc == ERROR )	    {	    printErr("error writing file\n");	    break;	    }	size -= rc*TBLOCK ;	nblks -= rc ;	}    /* Close the newly created file */    return( close(fd) ) ;    }/********************************************************************************* tarExtract - extract all files from a tar formatted tape** This is a UNIX-tar compatible utility that extracts entire* file hierarchies from tar-formatted archive.* The files are extracted with their original names and modes.* In some cases a file cannot be created on disk, for example if* the name is too long for regular DOS file name conventions,* in such cases entire files are skipped, and this program will* continue with the next file. Directories are created in order* to be able to create all files on tape.** The <tape> argument may be any tape device name or file name* that contains a tar formatted archive. If <tape> is equal "-",* standard input is used. If <tape> is NULL (or unspecified from Shell)* the default archive file name stored in global variable <TAPE> is used.** The <bfactor> dictates the blocking factor the tape was written with.* If 0, or unspecified from the shell, a default of 20 is used.** The <verbose> argument is a boolean, if set to 1, will cause informative* messages to be printed to standard error whenever an action is taken,* otherwise, only errors are reported.** All informative and error message are printed to standard error.** There is no way to selectively extract tar archives with this* utility. It extracts entire archives.*/STATUS tarExtract    (    char *	pTape,		/* tape device name */    int		bfactor,	/* requested blocking factor */    BOOL	verbose		/* if TRUE print progress info */    )    {    register 	int rc ;		/* return codes */    MT_TAR_SOFT	ctrl ;		/* control structure */    STATUS	retval = OK;    /* Set defaults */    if( pTape == NULL )	pTape = TAPE ;    if( bfactor == 0 )	bfactor = 20 ;    if( verbose )	printErr("Extracting from %s\n", pTape );    bzero( (char *)&ctrl, sizeof(ctrl) );    bzero( bZero, sizeof(bZero) );	/* not harmful for reentrancy */    /* Open tape device and initialize control structure */    if( strcmp(pTape, "-") == 0)	ctrl.fd = STD_IN;    else	ctrl.fd = open( pTape, O_RDONLY, 0) ;    if ( ctrl.fd < 0 )	{	printErr("Failed to open tape: %s\n", strerror(errnoGet()) );	return ERROR;	}        ctrl.bFactor = bfactor ;    ctrl.pBuf = KHEAP_ALLOC( bfactor * TBLOCK ) ;    if ( ctrl.pBuf == NULL )	{	printErr("Not enough memory, exiting.\n" );	if ( ctrl.fd != STD_IN )	    close( ctrl.fd );	return ERROR ;	}    /* all exits from now via goto in order to free the buffer */    /* Read the first block and adjust blocking factor */    rc = read( ctrl.fd, ctrl.pBuf->dummy, ctrl.bFactor*TBLOCK ) ;    if ( rc == ERROR )	{	printErr("read error at the beginning of tape, exiting.\n" );	retval = ERROR ;	goto finish;	}    else if( rc == 0 )	{	printErr("empty tape file, exiting.\n" );	goto finish;	}    else if( (rc % TBLOCK) != 0 )	{	printErr("tape block not multiple of %d, exiting.\n", TBLOCK);	retval = ERROR ;	goto finish;	}    ctrl.bValid = rc / TBLOCK ;    ctrl.pBnext = ctrl.pBuf ;    if ( ctrl.bFactor != ctrl.bValid )	{	if( verbose )	    printErr("adjusting blocking factor to %d\n", ctrl.bValid );	ctrl.bFactor = ctrl.bValid ;	}    /* End of overture, start processing files until end of tape */    FOREVER	{	MT_HBLOCK *	pBlk ;	if ( tarRdBlks( &ctrl, &pBlk, 1) != 1 )	    {	    retval = ERROR ;	    goto finish;	    }	if ( bcmp( pBlk->dummy, bZero, TBLOCK) == 0 )	    {	    if(verbose)		printErr("end of tape encountered, read until eof...\n");	    while( tarRdBlks( &ctrl, &pBlk, 1) > 0) ;	    if(verbose)		printErr("done.\n");	    retval = OK ;	    goto finish;	    }	if ( tarExtractFile( &ctrl, pBlk, verbose) == ERROR )	    {	    retval = ERROR;	    goto finish;	    }	} /* end of FOREVER */    finish:	if ( ctrl.fd != STD_IN )	    close( ctrl.fd );	KHEAP_FREE((char *)ctrl.pBuf );	return( retval );    }/********************************************************************************* tarWrtBlks - write <nBlocks> blocks to tape** Receives any number of blocks, and handles the blocking factor* mechanism using the pCtrl->pBuf internal buffer and associated* counters.** RETURNS: OK or ERROR;*/LOCAL STATUS tarWrtBlks    (    MT_TAR_SOFT *pCtrl,		/* control structure */    char *pBuf,			/* data to write */    unsigned int nBlocks	/* how many blocks to get */    )    {    register int rc ;    while( nBlocks > 0 )	{	if ((pCtrl->bValid <= 0) && (nBlocks >= (unsigned int)pCtrl->bFactor))	    {	    /* internal buffer empty, write directly */	    rc = write( pCtrl->fd, pBuf, pCtrl->bFactor*TBLOCK ) ;	    if ( rc == ERROR )		return ERROR ;	    /* adjust count and pointer */	    pBuf += TBLOCK * pCtrl->bFactor ;	    nBlocks -= pCtrl->bFactor ;	    }	else 	    {	    register int cnt ;	    /* internal buffer partially full, fill it up */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜精品免费| 盗摄精品av一区二区三区| 欧美做爰猛烈大尺度电影无法无天| 久久久不卡网国产精品一区| 老司机精品视频一区二区三区| 欧美日韩国产中文| 亚洲伊人色欲综合网| 色噜噜狠狠成人网p站| 亚洲色图在线播放| av电影天堂一区二区在线观看| 国产网红主播福利一区二区| 国产精品自产自拍| 国产拍揄自揄精品视频麻豆| 国产成人午夜高潮毛片| 久久精品视频一区| 国产成人免费视| 亚洲国产精品高清| 99视频超级精品| 亚洲手机成人高清视频| 在线亚洲人成电影网站色www| 亚洲精品国产无天堂网2021 | 亚洲第一福利一区| 欧美日韩三级一区二区| 日韩电影在线观看一区| 日韩亚洲欧美在线| 亚洲成a天堂v人片| 欧美三级欧美一级| 日本一区中文字幕| 日韩欧美的一区二区| 国产乱子伦一区二区三区国色天香| 久久精品一区二区| 99re这里只有精品6| 一区二区高清在线| 91精品国产欧美日韩| 韩国精品主播一区二区在线观看| 久久综合久久综合久久综合| 成人国产电影网| 夜夜精品浪潮av一区二区三区| 欧美日韩成人一区| 精品一区二区三区的国产在线播放| 国产婷婷一区二区| 色999日韩国产欧美一区二区| 日韩国产精品久久| 国产性色一区二区| 色综合久久66| 日韩高清在线电影| 国产午夜精品久久久久久免费视| 色综合网站在线| 秋霞午夜鲁丝一区二区老狼| 日本一区二区三区在线不卡| 在线免费不卡视频| 久久99精品久久久久久动态图 | 国产精品免费看片| 99v久久综合狠狠综合久久| 亚洲第一主播视频| 精品国产乱码久久久久久蜜臀 | 欧美日本视频在线| 国产美女在线观看一区| 亚洲精品一二三区| 欧美大片在线观看一区二区| 9l国产精品久久久久麻豆| 视频在线观看一区| 国产日韩欧美一区二区三区乱码 | 精品视频在线看| 久88久久88久久久| 一区二区在线观看视频| 中文字幕一区二区三区在线不卡| 91精品午夜视频| 国产精品18久久久久久久久| 一区二区三区资源| 精品国产乱码久久久久久1区2区 | 欧美变态凌虐bdsm| 99精品国产热久久91蜜凸| 日本美女视频一区二区| 国产精品久线在线观看| 日韩三级电影网址| 一本大道久久精品懂色aⅴ| 国产原创一区二区| 99久久99久久精品免费观看| 天天色天天操综合| 国产精品久久影院| 精品国产乱码久久久久久久| 色狠狠av一区二区三区| 国产91丝袜在线观看| 视频一区在线播放| 亚洲视频免费在线观看| 最好看的中文字幕久久| 91.com在线观看| 9人人澡人人爽人人精品| 久久国产乱子精品免费女| 中文字幕一区二区不卡| 久久伊人中文字幕| 欧美福利视频导航| 一本大道综合伊人精品热热| 国产成人精品免费看| 日本vs亚洲vs韩国一区三区| 亚洲影视资源网| 国产精品免费视频一区| 亚洲精品一区二区三区香蕉| 在线不卡a资源高清| 日本高清视频一区二区| 成人a区在线观看| 黑人巨大精品欧美黑白配亚洲| 午夜视频一区二区三区| 亚洲乱码国产乱码精品精98午夜 | 国产精品久久久久9999吃药| 日韩精品一区二区三区老鸭窝| 欧美日韩高清在线| 色婷婷综合激情| 91在线国产福利| 国产69精品久久久久777| 精品系列免费在线观看| 免费欧美高清视频| 水野朝阳av一区二区三区| 一区二区三区国产精华| 亚洲欧洲制服丝袜| 亚洲欧美日韩人成在线播放| 国产日韩精品一区| 久久久亚洲精品一区二区三区| 日韩亚洲欧美在线观看| 日韩午夜激情免费电影| 91精品在线麻豆| 欧美乱熟臀69xxxxxx| 欧美三级乱人伦电影| 精品视频1区2区| 欧美吻胸吃奶大尺度电影 | 成人免费看的视频| 成人午夜电影久久影院| 成人午夜av电影| 成人av电影在线观看| 99re视频这里只有精品| 91色porny在线视频| 91蜜桃网址入口| 在线观看网站黄不卡| 欧美性大战xxxxx久久久| 欧美三级午夜理伦三级中视频| 欧洲精品在线观看| 欧美日韩免费观看一区二区三区 | 欧美日韩国产小视频在线观看| 欧美色成人综合| 在线电影一区二区三区| 欧美一区二区三区小说| 欧美一二三四区在线| 精品成人a区在线观看| 欧美成人综合网站| 久久男人中文字幕资源站| 国产人久久人人人人爽| 国产精品福利一区| 亚洲免费视频中文字幕| 亚洲午夜视频在线| 全国精品久久少妇| 国产米奇在线777精品观看| 成人一区二区三区视频| 色8久久精品久久久久久蜜| 欧美日韩免费高清一区色橹橹| 欧美一区二区精美| 久久久久久亚洲综合影院红桃 | 亚洲综合久久久| 石原莉奈一区二区三区在线观看 | 三级欧美韩日大片在线看| 亚洲高清免费观看| 蜜桃av一区二区| 国产综合色在线视频区| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 中文字幕一区av| 亚洲一区二区偷拍精品| 免费成人在线视频观看| 国产精品99久久久久久久女警| 色综合久久六月婷婷中文字幕| 欧美久久久久久久久中文字幕| 欧美zozo另类异族| 国产精品久久久久毛片软件| 一区二区免费在线| 另类中文字幕网| 99国产精品久久久久久久久久久| 欧美精品v日韩精品v韩国精品v| 久久综合九色综合97婷婷女人| 中文字幕视频一区| 青娱乐精品视频| 波多野结衣视频一区| 欧美日本一区二区三区四区| 久久男人中文字幕资源站| 一区二区三区中文在线| 久久成人免费网| 91色.com| 欧美成人官网二区| 亚洲麻豆国产自偷在线| 日本不卡1234视频| av在线综合网| 欧美成人精品二区三区99精品| 久久国产精品99久久人人澡| heyzo一本久久综合| 日韩视频不卡中文| 国产精品第五页| 久久99国产精品久久| 色综合中文综合网| 国产成人免费xxxxxxxx| 欧美色图片你懂的| 欧美经典一区二区| 日韩精品五月天|