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

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

?? tarlib.c

?? vxworks的完整的源代碼
?? 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一区二区三区免费野_久草精品视频
亚洲老司机在线| 看国产成人h片视频| 欧美a级一区二区| av资源网一区| 欧美mv日韩mv亚洲| 亚洲超碰精品一区二区| av在线综合网| 久久欧美中文字幕| 全部av―极品视觉盛宴亚洲| 91影视在线播放| 国产欧美日韩综合精品一区二区| 欧美视频日韩视频| 亚洲一区二区三区四区在线免费观看 | 色哟哟一区二区在线观看| 精品国产乱码久久久久久1区2区| 亚洲综合图片区| 色天使色偷偷av一区二区| 国产区在线观看成人精品| 国产一区二区主播在线| 日韩女优视频免费观看| 午夜精品一区二区三区免费视频| 成年人国产精品| 国产精品美女久久久久久久久久久| 91国在线观看| 一区二区三区高清| 91在线云播放| 一区二区久久久久久| 在线视频综合导航| 亚洲一区二区在线免费观看视频| 一本大道av一区二区在线播放| 亚洲天堂成人网| 国产精品久久久久久久久免费相片 | 欧美综合色免费| 综合久久给合久久狠狠狠97色| 国产91丝袜在线观看| 久久精品视频一区二区| 国产成人精品1024| 亚洲欧美一区二区三区国产精品 | 久久成人羞羞网站| 精品欧美久久久| 国产麻豆视频一区二区| 国产欧美一二三区| 日本道免费精品一区二区三区| 亚洲一区二区四区蜜桃| 欧美日产在线观看| 国产一区二区三区视频在线播放| 久久久久国产一区二区三区四区| 大陆成人av片| 一卡二卡欧美日韩| 欧美一区二区三区视频在线 | 国产欧美一区二区三区鸳鸯浴| 国产精品亚洲午夜一区二区三区 | 国产在线精品国自产拍免费| 久久免费国产精品| 91麻豆精东视频| 日本欧美一区二区三区乱码| 久久精品欧美一区二区三区不卡| 成人爱爱电影网址| 视频在线观看一区二区三区| 欧美电影免费观看高清完整版在线| 国产凹凸在线观看一区二区| 国产一区二区三区| 亚洲色大成网站www久久九九| 欧美视频中文一区二区三区在线观看| 蜜臀va亚洲va欧美va天堂| 中文字幕av不卡| 欧美美女一区二区| 成人午夜在线免费| 奇米四色…亚洲| 亚洲视频在线一区二区| 日韩精品一区二区三区四区| av在线不卡网| 国产一区二区精品久久99| 一区二区三区在线播| 久久久久久久久久久黄色| 日本韩国一区二区三区| 国内外成人在线视频| 亚洲国产日韩a在线播放| 国产婷婷一区二区| 日韩一区二区高清| 色香蕉成人二区免费| 国产一二三精品| 亚洲v中文字幕| 亚洲啪啪综合av一区二区三区| 精品久久一区二区| 69久久夜色精品国产69蝌蚪网| 成人一区在线看| 精品午夜久久福利影院| 五月天激情小说综合| 中文字幕亚洲成人| 国产日韩精品一区二区三区在线| 欧美日韩国产综合视频在线观看| av一区二区三区| 高清不卡在线观看| 国产九色精品成人porny | 亚洲午夜在线视频| 亚洲欧洲精品天堂一级| 国产午夜亚洲精品羞羞网站| 欧美成人欧美edvon| 在线不卡免费av| 欧美老肥妇做.爰bbww| 色婷婷综合久久| 99精品国产视频| av亚洲精华国产精华精华| 国产91综合网| 懂色av一区二区三区免费看| 经典三级视频一区| 蜜桃视频第一区免费观看| 亚洲观看高清完整版在线观看 | 中文字幕在线观看一区二区| 国产调教视频一区| 欧美激情资源网| 国产亲近乱来精品视频 | 99久久99久久免费精品蜜臀| 国产91丝袜在线播放0| 国产高清成人在线| 成人免费视频播放| 91在线视频播放地址| 色综合久久久久综合99| 99久久精品免费看国产| 免费观看91视频大全| 久久久激情视频| 日韩欧美国产一二三区| 欧美三级日韩在线| 国产成人精品免费视频网站| 日日骚欧美日韩| 亚洲电影激情视频网站| 一区二区三区免费观看| 日产国产欧美视频一区精品| 久久一区二区视频| 欧美老肥妇做.爰bbww视频| 欧美亚洲动漫制服丝袜| 国产一区二区三区蝌蚪| 日韩福利电影在线| 国产美女在线观看一区| 成人性生交大合| 欧美亚洲动漫精品| 久久在线免费观看| 亚洲精品网站在线观看| 日本网站在线观看一区二区三区| 韩国女主播成人在线| 99久久精品国产毛片| 欧美疯狂性受xxxxx喷水图片| 日韩免费看的电影| 亚洲视频免费观看| 欧美a一区二区| 97久久超碰国产精品| 欧美一区二区三区视频免费播放| 国产欧美视频在线观看| 午夜视频在线观看一区二区| 激情图片小说一区| 欧洲中文字幕精品| 久久久99久久| 免费人成网站在线观看欧美高清| 成人性生交大片免费看中文| 欧美日韩视频在线一区二区| 国产清纯白嫩初高生在线观看91| 亚洲妇熟xx妇色黄| 国产成人8x视频一区二区| 在线电影院国产精品| 综合av第一页| 国产精品一区一区三区| 欧美剧在线免费观看网站| 国产精品美女久久久久久2018| 日韩精品乱码av一区二区| 波多野结衣一区二区三区 | 一区二区三区四区不卡在线| 日韩av电影免费观看高清完整版 | 青青草视频一区| 91美女在线观看| 国产校园另类小说区| 日韩综合在线视频| 色视频欧美一区二区三区| 欧美国产日本视频| 国产一区视频在线看| 欧美久久久久久久久久| 亚洲精品欧美在线| 成人高清免费在线播放| 久久免费午夜影院| 国产资源精品在线观看| 欧美一区二区三区性视频| 亚洲一二三级电影| 在线亚洲欧美专区二区| 亚洲乱码国产乱码精品精98午夜 | 国产欧美日韩在线看| 免费在线成人网| 51午夜精品国产| 亚洲va韩国va欧美va精品| 欧美午夜一区二区三区| 一区二区三区欧美日| 色综合色狠狠天天综合色| 日韩毛片一二三区| 色综合欧美在线| 亚洲一区二区三区四区在线| 91免费版在线| 亚洲二区在线观看| 这里只有精品99re| 五月激情六月综合| 欧美一区二区在线视频| 麻豆视频观看网址久久|