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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fileunix.c

?? 非常好用的可移植的多平臺C/C++源代碼編輯器
?? C
字號:
/* *** This file was borrowed from jam 2.5. The copyright statement from
 * *** jam.c appears below.
 */
/*
 * /+\
 * +\	Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc.
 * \+/
 *
 * This file is part of jam.
 *
 * License is hereby granted to use this software and distribute it
 * freely, as long as this copyright notice is retained and modifications 
 * are clearly marked.
 *
 * ALL WARRANTIES ARE HEREBY DISCLAIMED.
 */

/*
 * Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc.
 *
 * This file is part of Jam - see jam.c for Copyright information.
 */

/*
 * 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
 * 01/08/01 (seiwald) - closure param for file_dirscan/file_archscan
 * 04/03/01 (seiwald) - AIX uses SARMAG
 * 07/16/02 (seiwald) - Support BSD style long filename in archives.
 * 11/04/02 (seiwald) - const-ing for string literals
 * 12/27/02 (seiwald) - support for AIX big archives
 * 12/30/02 (seiwald) - terminate ar_hdr for solaris sscanf()
 * 12/30/02 (seiwald) - skip solaris' empty archive member names (/, //xxx)
 */

# include "jam.h"
# include "filesys.h"
# include "pathsys.h"

# ifdef USE_FILEUNIX

#if defined(OS_CYGWIN) /* TNB */
#include <sys/unistd.h>
# include <sys/stat.h>
#endif

# if defined( OS_SEQUENT ) || \
     defined( OS_DGUX ) || \
     defined( OS_SCO ) || \
     defined( OS_ISC ) 
# define PORTAR 1
# 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

// needed under SuSE 9.2 at least
#include <sys/stat.h>

# 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 _AIX43
/* AIX 43 ar SUPPORTs only __AR_BIG__ */
# define __AR_BIG__
# endif
# include <ar.h>
# endif	

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

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

	/* 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 );

	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 );

	    path_build( &f, filename, 0 );

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

	closedir( d );
}

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

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

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

	*time = statbuf.st_mtime;
	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(
	const 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 ) )
	{
	    long    lar_date;
	    long    lar_size;
	    char    lar_name[256];
	    char    *dst = lar_name;

	    /* solaris sscanf() does strlen first, so terminate somewhere */

	    ar_hdr.ar_fmag[0] = 0;

	    /* Get date & size */

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

	    /* Handle solaris string table.
	    ** The entry under the name // is the table,
	    ** and entries with the name /nnnn refer to the table.
	    */

	    if( ar_hdr.ar_name[0] != '/' )
	    {
		/* traditional archive entry names:
		** ends at the first space, /, or null.
		*/

		char *src = ar_hdr.ar_name;
		const char *e = src + sizeof( ar_hdr.ar_name );

		while( src < e && *src && *src != ' ' && *src != '/' )
		    *dst++ = *src++;
	    }
	    else 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.
		*/

		char *src = string_table + atoi( ar_hdr.ar_name + 1 );

		while( *src != '/' )
		    *dst++ = *src++;
	    }

	    /* Terminate lar_name */

	    *dst = 0;

	    /* Modern (BSD4.4) long names: if the name is "#1/nnnn", 
	    ** then the actual name is the nnnn bytes after the header.  
	    */

	    if( !strcmp( lar_name, "#1" ) )
	    {
		int len = atoi( ar_hdr.ar_name + 3 );
		if( read( fd, lar_name, len ) != len )
		    printf("error reading archive entry\n");
		lar_name[len] = 0;
	    }

	    /* Build name and pass it on.  */

	    if( lar_name[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 );
	    }

	    /* Position at next member */

	    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 */

void
file_archscan(
	const char *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;
	int fd;

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

# ifdef __AR_BIG__

	if( read( fd, (char *)&fl_hdr, FL_HSZ ) != FL_HSZ ||
	    strncmp( AIAMAGBIG, fl_hdr.fl_magic, SAIAMAG ) )
	{
	    if( strncmp( AIAMAG, fl_hdr.fl_magic, SAIAMAG ) )
		printf( "Can't read new archive %s before AIX 4.3.\n" );

	    close( fd );
	    return;
	}

# else

	if( read( fd, (char *)&fl_hdr, FL_HSZ ) != FL_HSZ ||
	    strncmp( AIAMAG, fl_hdr.fl_magic, SAIAMAG ) )
	{
	    close( fd );
	    return;
	}

# endif

	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 );
	}

	close( fd );
}

# endif /* AIAMAG - RS6000 AIX */

# endif /* USE_FILEUNIX */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区日韩精品| 337p日本欧洲亚洲大胆色噜噜| 国产日韩欧美精品一区| 国产成人在线免费观看| 日本一区二区三级电影在线观看 | 色999日韩国产欧美一区二区| 国产精品拍天天在线| 波多野结衣在线aⅴ中文字幕不卡| 欧美激情一区二区三区不卡| 99re成人在线| 亚洲香肠在线观看| 欧美一区二区在线免费观看| 免费av网站大全久久| 亚洲精品一线二线三线无人区| 国产99一区视频免费| 亚洲欧美日韩国产综合| 欧美性受xxxx黑人xyx性爽| 日韩精品一二三四| 国产亚洲精品中文字幕| 91丨porny丨在线| 亚洲午夜免费电影| 2欧美一区二区三区在线观看视频| 国产乱人伦精品一区二区在线观看| 国产精品久久久久久久久动漫| 成人精品一区二区三区四区| 亚洲一区在线播放| 日韩欧美国产高清| 99国产精品久久久| 另类人妖一区二区av| 亚洲欧洲性图库| 91麻豆精品国产91久久久 | 中文字幕高清不卡| 欧美日韩在线三级| 国产成人超碰人人澡人人澡| 亚洲美女精品一区| 久久噜噜亚洲综合| 欧美日韩国产免费| 成人av在线网| 久久精品国产亚洲高清剧情介绍 | 久久99国产精品尤物| 久久久国产精品麻豆| 日本韩国欧美在线| 国内精品在线播放| 亚洲成人av福利| 国产日韩综合av| 欧美一区二区高清| 91视频在线观看免费| 国产一区二区三区综合| 亚洲国产精品尤物yw在线观看| 欧美韩国一区二区| 日韩一区二区三区观看| 一本一本久久a久久精品综合麻豆| 九九国产精品视频| 日韩电影在线一区二区| 亚洲精品中文在线| 日本一区二区三区免费乱视频| 欧美一区二区精品久久911| 色老汉一区二区三区| 国产成人免费视频一区| 久久66热re国产| 日韩精品一区第一页| 亚洲精品国产精品乱码不99| 中文在线一区二区| 久久久久久一级片| 欧美tk—视频vk| 91精品国产色综合久久ai换脸| 欧美视频在线一区| 日本电影亚洲天堂一区| 成人app网站| 福利电影一区二区| 国产麻豆日韩欧美久久| 韩日av一区二区| 精品一区二区免费在线观看| 免费高清在线一区| 麻豆成人综合网| 国内精品伊人久久久久av影院| 日韩成人午夜精品| 蜜芽一区二区三区| 久久99精品国产91久久来源| 久久99精品久久久| 国产精品亚洲综合一区在线观看| 国产一区二区免费看| 国产剧情在线观看一区二区| 国产不卡免费视频| 99视频热这里只有精品免费| av电影天堂一区二区在线| 成人av资源网站| 91福利国产精品| 欧美理论片在线| 日韩欧美一区中文| 亚洲精品在线观看视频| 国产片一区二区| 亚洲日本护士毛茸茸| 亚洲一区二区三区四区中文字幕| 亚洲自拍偷拍麻豆| 日韩成人一级大片| 国产一区二区女| 91热门视频在线观看| 欧美亚洲综合色| 欧美r级电影在线观看| 国产亚洲va综合人人澡精品| 国产精品青草综合久久久久99| 亚洲免费在线视频| 日韩精品视频网站| 国产精品中文字幕一区二区三区| 大白屁股一区二区视频| 91成人在线观看喷潮| 91精品国产一区二区三区| 久久久国产精品午夜一区ai换脸| 1024国产精品| 午夜成人免费电影| 成人一区二区三区| 日本久久电影网| 欧美xxx久久| 亚洲精品日日夜夜| 美脚の诱脚舐め脚责91 | av成人动漫在线观看| 日本高清视频一区二区| 日韩视频在线一区二区| 亚洲欧洲av在线| 看电视剧不卡顿的网站| 色综合久久综合网欧美综合网| 88在线观看91蜜桃国自产| 国产女人18毛片水真多成人如厕| 夜夜嗨av一区二区三区| 看电视剧不卡顿的网站| 在线影视一区二区三区| 欧美精品一区二区三区蜜桃视频| 亚洲欧美日韩成人高清在线一区| 男男视频亚洲欧美| 欧美在线短视频| 国产精品国产自产拍高清av王其| 丝袜美腿成人在线| 色综合久久88色综合天天免费| 精品福利视频一区二区三区| 亚洲一卡二卡三卡四卡五卡| 国产成人午夜电影网| 欧美一激情一区二区三区| 一区二区三区四区在线播放 | 日韩欧美国产精品| 亚洲综合色成人| 成人动漫视频在线| 久久久综合九色合综国产精品| 五月天婷婷综合| 91麻豆自制传媒国产之光| 久久久久久日产精品| 日韩激情一区二区| 91精彩视频在线观看| 国产精品传媒入口麻豆| 国产乱子伦一区二区三区国色天香 | 日韩限制级电影在线观看| 亚洲一区中文在线| 99re这里只有精品视频首页| 久久影音资源网| 精品在线你懂的| 91精品一区二区三区久久久久久| 一区二区三区蜜桃网| 色婷婷国产精品久久包臀 | 亚洲欧洲一区二区在线播放| 韩国女主播成人在线| 精品日韩在线观看| 免费人成在线不卡| 7777精品伊人久久久大香线蕉 | 欧美三级韩国三级日本三斤| 成人欧美一区二区三区视频网页| 国产乱码字幕精品高清av | 在线不卡一区二区| 三级欧美韩日大片在线看| 欧美午夜精品一区| 亚洲在线一区二区三区| 欧美丝袜丝nylons| 午夜日韩在线观看| 91精品国产高清一区二区三区| 亚洲va国产天堂va久久en| 欧美日韩一区成人| 日韩高清在线电影| 精品福利一区二区三区免费视频| 免费国产亚洲视频| 久久精品一区二区三区av| 国产a精品视频| 亚洲免费av高清| 欧美视频在线一区二区三区| 日韩av一区二区三区四区| 日韩一级二级三级| 国产风韵犹存在线视精品| 国产日韩欧美综合在线| 99久精品国产| 亚洲3atv精品一区二区三区| 3d动漫精品啪啪1区2区免费 | 久久久精品天堂| 成人性生交大片免费看视频在线| 欧美国产日韩亚洲一区| 99精品在线免费| 午夜激情久久久| 国产午夜亚洲精品不卡| 成人黄页毛片网站| 亚洲国产精品久久一线不卡| 日韩欧美亚洲一区二区| 99久久婷婷国产综合精品| 香蕉加勒比综合久久|