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

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

?? fileunix.c

?? C++的一個好庫。。。現在很流行
?? C
字號:
/*
 * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc.
 *
 * This file is part of Jam - see jam.c for Copyright information.
 */

/*  This file is ALSO:
 *  Copyright 2001-2004 David Abrahams.
 *  Distributed under the Boost Software License, Version 1.0.
 *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 */

# include "jam.h"
# include "filesys.h"
# include "strings.h"
# include "pathsys.h"
# include <stdio.h>

#if defined(sun) || defined(__sun) || defined(linux)
# include <unistd.h> /* needed for read and close prototype */
#endif

# ifdef USE_FILEUNIX

#if defined(sun) || defined(__sun)
# include <unistd.h> /* needed for read and close prototype */
#endif

# if defined( OS_SEQUENT ) || \
     defined( OS_DGUX ) || \
     defined( OS_SCO ) || \
     defined( OS_ISC ) 
# define PORTAR 1
# endif

# ifdef __EMX__
# include <sys/types.h>
# include <sys/stat.h>
# endif

# if defined( OS_RHAPSODY ) || \
     defined( OS_MACOSX ) || \
     defined( OS_NEXT )
/* need unistd for rhapsody's proper lseek */
# include <sys/dir.h>
# include <unistd.h>
# define STRUCT_DIRENT struct direct 
# else
# include <dirent.h>
# define STRUCT_DIRENT struct dirent 
# endif

# ifdef OS_COHERENT
# include <arcoff.h>
# define HAVE_AR
# endif

# if defined( OS_MVS ) || \
		 defined( OS_INTERIX )

#define	ARMAG	"!<arch>\n"
#define	SARMAG	8
#define	ARFMAG	"`\n"

struct ar_hdr		/* archive file member header - printable ascii */
{
	char	ar_name[16];	/* file member name - `/' terminated */
	char	ar_date[12];	/* file member date - decimal */
	char	ar_uid[6];	/* file member user id - decimal */
	char	ar_gid[6];	/* file member group id - decimal */
	char	ar_mode[8];	/* file member mode - octal */
	char	ar_size[10];	/* file member size - decimal */
	char	ar_fmag[2];	/* ARFMAG - string to end header */
};

# define HAVE_AR
# endif

# if defined( OS_QNX ) || \
     defined( OS_BEOS ) || \
     defined( OS_MPEIX )
# define NO_AR
# define HAVE_AR
# endif

# ifndef HAVE_AR

# ifdef OS_AIX
/* Define those for AIX to get the definitions for both the small and the
 * big variant of the archive file format. */
#	 define __AR_SMALL__
#	 define __AR_BIG__
# endif

# include <ar.h>
# endif	

/*
 * fileunix.c - manipulate file names and scan directories on UNIX/AmigaOS
 *
 * External routines:
 *
 *	file_dirscan() - scan a directory for files
 *	file_time() - get timestamp of file, if not done by file_dirscan()
 *	file_archscan() - scan an archive for files
 *
 * File_dirscan() and file_archscan() call back a caller provided function
 * for each file found.  A flag to this callback function lets file_dirscan()
 * and file_archscan() indicate that a timestamp is being provided with the
 * file.   If file_dirscan() or file_archscan() do not provide the file's
 * timestamp, interested parties may later call file_time().
 *
 * 04/08/94 (seiwald) - Coherent/386 support added.
 * 12/19/94 (mikem) - solaris string table insanity support
 * 02/14/95 (seiwald) - parse and build /xxx properly
 * 05/03/96 (seiwald) - split into pathunix.c
 * 11/21/96 (peterk) - BEOS does not have Unix-style archives
 */

/*
 * file_dirscan() - scan a directory for files
 */

void
file_dirscan( 
	char *dir,
	scanback func,
	void *closure )
{
	PATHNAME f;
	DIR *d;
	STRUCT_DIRENT *dirent;
        string filename[1];

	/* First enter directory itself */

	memset( (char *)&f, '\0', sizeof( f ) );

	f.f_dir.ptr = dir;
	f.f_dir.len = strlen(dir);

	dir = *dir ? dir : ".";

	/* Special case / : enter it */

	if( f.f_dir.len == 1 && f.f_dir.ptr[0] == '/' )
	    (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 );

	/* Now enter contents of directory */

	if( !( d = opendir( dir ) ) )
	    return;

	if( DEBUG_BINDSCAN )
	    printf( "scan directory %s\n", dir );

        string_new( filename );
	while( dirent = readdir( d ) )
	{
# ifdef old_sinix
	    /* Broken structure definition on sinix. */
	    f.f_base.ptr = dirent->d_name - 2;
# else
	    f.f_base.ptr = dirent->d_name;
# endif
	    f.f_base.len = strlen( f.f_base.ptr );

            string_truncate( filename, 0 );
	    path_build( &f, filename, 0 );

	    (*func)( closure, filename->value, 0 /* not stat()'ed */, (time_t)0 );
	}
        string_free( filename );

	closedir( d );
}

/*
 * file_time() - get timestamp of file, if not done by file_dirscan()
 */

int
file_time(
	char	*filename,
	time_t	*time )
{
	struct stat statbuf;

	if( stat( filename, &statbuf ) < 0 )
	    return -1;

    /* Technically, existing files can have 0 as statbuf.st_mtime 
       --- in particular, the /cygdrive directory under cygwin. However, 
       though all the code jam assumes that timestamp of 0 means
       "does not exist" and will try to create the "missing" target, causing
       problems. Work around this problem by chanding 0 to 1.
    */
	*time = statbuf.st_mtime ? statbuf.st_mtime : 1 ;
	return 0;
}

int file_is_file(char* filename)
{
	struct stat statbuf;

	if( stat( filename, &statbuf ) < 0 )
	    return -1;

    if (S_ISREG(statbuf.st_mode)) 
        return 1;
    else
        return 0;    
}


/*
 * file_archscan() - scan an archive for files
 */

# ifndef AIAMAG	/* God-fearing UNIX */

# define SARFMAG 2
# define SARHDR sizeof( struct ar_hdr )

void
file_archscan(
	char *archive,
	scanback func,
	void *closure )
{
# ifndef NO_AR
	struct ar_hdr ar_hdr;
	char buf[ MAXJPATH ];
	long offset;
	char    *string_table = 0;
	int fd;

	if( ( fd = open( archive, O_RDONLY, 0 ) ) < 0 )
	    return;

	if( read( fd, buf, SARMAG ) != SARMAG ||
	    strncmp( ARMAG, buf, SARMAG ) )
	{
	    close( fd );
	    return;
	}

	offset = SARMAG;

	if( DEBUG_BINDSCAN )
	    printf( "scan archive %s\n", archive );

	while( read( fd, &ar_hdr, SARHDR ) == SARHDR
	       && ! ( memcmp( ar_hdr.ar_fmag, ARFMAG, SARFMAG )
#ifdef ARFZMAG
		      /* OSF also has a compressed format */
		      && memcmp( ar_hdr.ar_fmag, ARFZMAG, SARFMAG )
#endif
	      ) )
	{
	    char    lar_name_[257];
            char*   lar_name = lar_name_ + 1;
	    long    lar_date;
	    long    lar_size;
	    long    lar_offset;
	    char *c;
	    char    *src, *dest;

	    strncpy( lar_name, ar_hdr.ar_name, sizeof(ar_hdr.ar_name) );

	    sscanf( ar_hdr.ar_date, "%ld", &lar_date );
	    sscanf( ar_hdr.ar_size, "%ld", &lar_size );

	    if (ar_hdr.ar_name[0] == '/')
	    {
		if (ar_hdr.ar_name[1] == '/')
		{
		    /* this is the "string table" entry of the symbol table,
		    ** which holds strings of filenames that are longer than
		    ** 15 characters (ie. don't fit into a ar_name
		    */

		    string_table = (char *)malloc(lar_size);
		    lseek(fd, offset + SARHDR, 0);
		    if (read(fd, string_table, lar_size) != lar_size)
			printf("error reading string table\n");
		}
		else if (string_table && ar_hdr.ar_name[1] != ' ')
		{
		    /* Long filenames are recognized by "/nnnn" where nnnn is
		    ** the offset of the string in the string table represented
		    ** in ASCII decimals.
		    */
		    dest = lar_name;
		    lar_offset = atoi(lar_name + 1);
		    src = &string_table[lar_offset];
		    while (*src != '/')
			*dest++ = *src++;
		    *dest = '/';
		}
	    }

	    c = lar_name - 1;
	    while( *++c != ' ' && *c != '/' )
		;
	    *c = '\0';

	    if ( DEBUG_BINDSCAN )
		printf( "archive name %s found\n", lar_name );

	    sprintf( buf, "%s(%s)", archive, lar_name );

	    (*func)( closure, buf, 1 /* time valid */, (time_t)lar_date );

	    offset += SARHDR + ( ( lar_size + 1 ) & ~1 );
	    lseek( fd, offset, 0 );
	}

	if (string_table)
	    free(string_table);

	close( fd );

# endif /* NO_AR */

}

# else /* AIAMAG - RS6000 AIX */

static void file_archscan_small(
    int fd, char const *archive, scanback func, void *closure)
{
    struct fl_hdr fl_hdr;

    struct {
        struct ar_hdr hdr;
        char pad[ 256 ];
    } ar_hdr ;

    char buf[ MAXJPATH ];
    long offset;

    if( read( fd, (char *)&fl_hdr, FL_HSZ ) != FL_HSZ)
        return;

    sscanf( fl_hdr.fl_fstmoff, "%ld", &offset );
  
    if( DEBUG_BINDSCAN )
        printf( "scan archive %s\n", archive );
  
    while( offset > 0
           && lseek( fd, offset, 0 ) >= 0
           && read( fd, &ar_hdr, sizeof( ar_hdr ) ) >= sizeof( ar_hdr.hdr ) )
    {
        long    lar_date;
        int     lar_namlen;
    
        sscanf( ar_hdr.hdr.ar_namlen, "%d", &lar_namlen );
        sscanf( ar_hdr.hdr.ar_date, "%ld", &lar_date );
        sscanf( ar_hdr.hdr.ar_nxtmem, "%ld", &offset );
    
        if( !lar_namlen )
            continue;
      
        ar_hdr.hdr._ar_name.ar_name[ lar_namlen ] = '\0';

        sprintf( buf, "%s(%s)", archive, ar_hdr.hdr._ar_name.ar_name );

        (*func)( closure, buf, 1 /* time valid */, (time_t)lar_date );
    }
}

/* Check for OS version which supports the big variant. */
#ifdef AR_HSZ_BIG

static void file_archscan_big(
    int fd, char const *archive, scanback func, void *closure)
{
    struct fl_hdr_big fl_hdr;

    struct {
        struct ar_hdr_big hdr;
        char pad[ 256 ];
    } ar_hdr ;

    char buf[ MAXJPATH ];
    long long offset;

    if( read( fd, (char *)&fl_hdr, FL_HSZ_BIG) != FL_HSZ_BIG)
        return;

    sscanf( fl_hdr.fl_fstmoff, "%lld", &offset );

    if( DEBUG_BINDSCAN )
        printf( "scan archive %s\n", archive );

    while( offset > 0
           && lseek( fd, offset, 0 ) >= 0
           && read( fd, &ar_hdr, sizeof( ar_hdr ) ) >= sizeof( ar_hdr.hdr ) )
    {
        long    lar_date;
        int     lar_namlen;

        sscanf( ar_hdr.hdr.ar_namlen, "%d", &lar_namlen );
        sscanf( ar_hdr.hdr.ar_date, "%ld", &lar_date );
        sscanf( ar_hdr.hdr.ar_nxtmem, "%lld", &offset );

        if( !lar_namlen )
            continue;

        ar_hdr.hdr._ar_name.ar_name[ lar_namlen ] = '\0';

        sprintf( buf, "%s(%s)", archive, ar_hdr.hdr._ar_name.ar_name );

        (*func)( closure, buf, 1 /* time valid */, (time_t)lar_date );
    }

}

#endif /* AR_HSZ_BIG */

void file_archscan(char *archive, scanback func, void *closure)
{
    int fd;
    char fl_magic[SAIAMAG];

    if(( fd = open(archive, O_RDONLY, 0)) < 0)
        return;
  
    if(read( fd, fl_magic, SAIAMAG) != SAIAMAG
       || lseek(fd, 0, SEEK_SET) == -1)
    {
        close(fd);
        return;
    }

    if (strncmp(AIAMAG, fl_magic, SAIAMAG) == 0)
    {
        /* read small variant */
        file_archscan_small(fd, archive, func, closure);
    }
#ifdef AR_HSZ_BIG
    else if (strncmp(AIAMAGBIG, fl_magic, SAIAMAG) == 0)
    {
        /* read big variant */
        file_archscan_big(fd, archive, func, closure);
    }
#endif
  
    close( fd );
}

# endif /* AIAMAG - RS6000 AIX */

# endif /* USE_FILEUNIX */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜精品理论片a级按摩| 精品欧美一区二区三区精品久久| 久久久久久久精| 韩国v欧美v亚洲v日本v| 337p粉嫩大胆色噜噜噜噜亚洲 | 国产乱淫av一区二区三区| 欧美日韩不卡视频| 日韩国产欧美三级| 日韩视频免费观看高清完整版| 亚洲高清在线视频| 欧美精品一二三| 日韩专区在线视频| 精品久久人人做人人爱| 午夜欧美在线一二页| 成人h动漫精品| 国产精品免费观看视频| 色综合天天狠狠| 亚洲一区在线看| 欧美日韩电影一区| 日韩福利视频导航| 26uuu色噜噜精品一区二区| 国产99精品国产| 亚洲精品欧美激情| 色婷婷综合久色| 一卡二卡欧美日韩| 日韩女优av电影| 东方aⅴ免费观看久久av| 亚洲图片激情小说| 在线播放日韩导航| 国产一区二区三区黄视频 | 91精品国产高清一区二区三区| 美女视频一区在线观看| 国产午夜精品一区二区三区视频 | 亚洲激情图片qvod| 91精品国产综合久久久蜜臀粉嫩 | 性做久久久久久久久| 欧美一级在线观看| 国产91精品免费| 玉足女爽爽91| 久久久久亚洲综合| 欧美亚洲丝袜传媒另类| 精品一区二区三区在线播放| 久久久99精品久久| 欧美亚洲一区三区| 国产精品亚洲综合一区在线观看| 亚洲精品久久嫩草网站秘色| 日韩一区二区影院| 91小视频免费观看| 精品一区免费av| 亚洲精品国产成人久久av盗摄 | 日韩欧美你懂的| 大陆成人av片| 日韩国产在线观看一区| 日本一区二区成人| 日韩一区二区视频| 91理论电影在线观看| 亚洲午夜久久久久久久久久久 | 国内成人精品2018免费看| 国产精品国模大尺度视频| 制服丝袜亚洲播放| 国产99久久久国产精品潘金| 亚洲福利视频三区| 国产精品剧情在线亚洲| 精品国产污污免费网站入口 | 一区二区三区视频在线看| 欧美mv日韩mv国产网站app| 欧美午夜宅男影院| 成人免费看视频| 韩国av一区二区| 五月婷婷久久综合| 一区二区三区免费在线观看| 欧美大胆一级视频| 91精品国产综合久久国产大片| av爱爱亚洲一区| 国产精品18久久久久久vr| 日韩二区三区四区| 亚洲va欧美va人人爽午夜| 中文字幕一区三区| 国产精品丝袜一区| 国产婷婷色一区二区三区四区| 欧美本精品男人aⅴ天堂| 欧美日韩国产中文| 欧美男人的天堂一二区| 色婷婷av一区二区| 成人性生交大片| 粉嫩av一区二区三区粉嫩| 国产激情精品久久久第一区二区 | 丁香激情综合五月| 高清免费成人av| 国产成人精品免费一区二区| 国内精品久久久久影院一蜜桃| 久久国产尿小便嘘嘘尿| 午夜天堂影视香蕉久久| 亚洲一二三四在线观看| 一区二区激情小说| 亚洲午夜电影在线观看| 一区二区三区高清在线| 最新不卡av在线| 亚洲另类春色校园小说| 亚洲综合网站在线观看| 一卡二卡三卡日韩欧美| 天堂蜜桃91精品| 捆绑调教美女网站视频一区| 九色综合国产一区二区三区| 国产乱人伦偷精品视频免下载| 国产成人免费网站| 成人黄色软件下载| 国产白丝精品91爽爽久久| 国产 日韩 欧美大片| 不卡的看片网站| 91国内精品野花午夜精品| 欧美日韩成人在线| 精品成人一区二区| 国产精品美女久久久久久久网站| 国产精品成人一区二区艾草| 日韩一区在线播放| 国产欧美日韩亚州综合| 欧美日韩三级一区二区| 久久网站热最新地址| 亚洲免费三区一区二区| 免费视频一区二区| 99v久久综合狠狠综合久久| 日韩精品一区二区三区在线播放 | 精品久久久久香蕉网| 自拍偷在线精品自拍偷无码专区 | 激情伊人五月天久久综合| 91蜜桃免费观看视频| 日韩一区二区在线观看视频播放| 亚洲欧洲国产专区| 国内精品在线播放| 欧美日韩免费一区二区三区| 日本一区二区三区国色天香 | 亚洲一区在线看| 高清不卡一二三区| 在线成人高清不卡| 亚洲综合av网| av一区二区三区黑人| 日韩一区二区三区三四区视频在线观看| 91热门视频在线观看| 久久久亚洲国产美女国产盗摄| 亚洲.国产.中文慕字在线| 99精品偷自拍| 粉嫩av一区二区三区在线播放 | 欧美高清视频在线高清观看mv色露露十八| 日韩精品在线一区| 亚洲一本大道在线| 91欧美激情一区二区三区成人| 91麻豆精品国产91久久久久久| 在线不卡免费欧美| 久久精品无码一区二区三区| 欧美成人性战久久| 日本精品免费观看高清观看| 欧美精品免费视频| 欧美精品一二三| 国产亚洲欧美在线| 亚洲欧美精品午睡沙发| 久久电影国产免费久久电影| 另类综合日韩欧美亚洲| 国产999精品久久| 日韩欧美一二三四区| 夜夜嗨av一区二区三区四季av | 亚洲国产一区二区三区| 欧美日本免费一区二区三区| 麻豆精品在线播放| 中文字幕av一区二区三区免费看| 丁香婷婷深情五月亚洲| 中文字幕亚洲在| 日本一区免费视频| 欧美日韩日日骚| 91丨九色丨黑人外教| 一区二区免费在线播放| 欧美日韩国产a| 久久国产精品99久久人人澡| 亚洲欧美日韩中文字幕一区二区三区| 欧美亚洲国产一卡| 7777女厕盗摄久久久| 亚洲色图19p| 26uuu国产一区二区三区| 欧美mv日韩mv| 色哟哟在线观看一区二区三区| 懂色av中文字幕一区二区三区| 亚洲欧美国产77777| 国产成人精品aa毛片| 国产精品综合在线视频| 日本亚洲欧美天堂免费| 免费在线一区观看| 国产亚洲福利社区一区| 在线精品视频小说1| 波多野结衣视频一区| 激情久久五月天| 精品一区二区三区免费视频| 丝袜亚洲另类欧美| 亚洲国产成人自拍| 久久一夜天堂av一区二区三区| 日韩视频免费观看高清在线视频| 欧美视频在线观看一区| 欧美成人bangbros| 日韩欧美国产系列| 色婷婷综合久久久久中文 | 美腿丝袜一区二区三区|