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

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

?? untgz.cpp

?? 一個C語言實現的壓縮解壓的工具代碼
?? CPP
字號:
/*
 * untgz.c -- Display contents and/or extract file from
 * a gzip'd TAR file
 * written by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
 * adaptation to Unix by Jean-loup Gailly <jloup@gzip.org>
 */
#include "stdafx.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <errno.h>
#include <fcntl.h>
#ifdef unix
# include <unistd.h>
#else
# include <direct.h>
# include <io.h>
#endif

#include "zlib.h"

#ifdef WIN32
#  ifndef F_OK
#    define F_OK (0)
#  endif
#  ifdef _MSC_VER
#    define mkdir(dirname,mode) _mkdir(dirname)
#    define strdup(str)         _strdup(str)
#    define unlink(fn)          _unlink(fn)
#    define access(path,mode)   _access(path,mode)
#  else
#    define mkdir(dirname,mode) _mkdir(dirname)
#  endif
#else
#  include <utime.h>
#endif


/* Values used in typeflag field.  */

#define REGTYPE	 '0'		/* regular file */
#define AREGTYPE '\0'		/* regular file */
#define LNKTYPE  '1'		/* link */
#define SYMTYPE  '2'		/* reserved */
#define CHRTYPE  '3'		/* character special */
#define BLKTYPE  '4'		/* block special */
#define DIRTYPE  '5'		/* directory */
#define FIFOTYPE '6'		/* FIFO special */
#define CONTTYPE '7'		/* reserved */

#define BLOCKSIZE 512

struct tar_header
{				/* byte offset */
  char name[100];		/*   0 */
  char mode[8];			/* 100 */
  char uid[8];			/* 108 */
  char gid[8];			/* 116 */
  char size[12];		/* 124 */
  char mtime[12];		/* 136 */
  char chksum[8];		/* 148 */
  char typeflag;		/* 156 */
  char linkname[100];		/* 157 */
  char magic[6];		/* 257 */
  char version[2];		/* 263 */
  char uname[32];		/* 265 */
  char gname[32];		/* 297 */
  char devmajor[8];		/* 329 */
  char devminor[8];		/* 337 */
  char prefix[155];		/* 345 */
				/* 500 */
};

union tar_buffer {
  char               buffer[BLOCKSIZE];
  struct tar_header  header;
};

enum { TGZ_EXTRACT = 0, TGZ_LIST };

static char *TGZfname	OF((const char *));
void TGZnotfound	OF((const char *));

int getoct		OF((char *, int));
char *strtime		OF((time_t *));
int ExprMatch		OF((char *,char *));

int makedir		OF((char *));
int matchname		OF((int,int,char **,char *));

void error		OF((const char *));
int  tar		OF((gzFile, int, int, int, char **));

void help		OF((int));
int main		OF((int, char **));

char *prog;

/* This will give a benign warning */

static char *TGZprefix[] = { "\0", ".tgz", ".tar.gz", ".tar", NULL };

/* Return the real name of the TGZ archive */
/* or NULL if it does not exist. */

static char *TGZfname OF((const char *fname))
{
  static char buffer[1024];
  int origlen,i;
  
  strcpy(buffer,fname);
  origlen = strlen(buffer);

  for (i=0; TGZprefix[i]; i++)
    {
       strcpy(buffer+origlen,TGZprefix[i]);
       if (access(buffer,F_OK) == 0)
         return buffer;
    }
  return NULL;
}

/* error message for the filename */

void TGZnotfound OF((const char *fname))
{
  int i;

  fprintf(stderr,"%s : couldn't find ",prog);
  for (i=0;TGZprefix[i];i++)
    fprintf(stderr,(TGZprefix[i+1]) ? "%s%s, " : "or %s%s\n",
            fname,
            TGZprefix[i]);
  exit(1);
}


/* help functions */

int getoct(char *p,int width)
{
  int result = 0;
  char c;
  
  while (width --)
    {
      c = *p++;
      if (c == ' ')
	continue;
      if (c == 0)
	break;
      result = result * 8 + (c - '0');
    }
  return result;
}

char *strtime (time_t *t)
{
  struct tm   *local;
  static char result[32];

  local = localtime(t);
  sprintf(result,"%2d/%02d/%4d %02d:%02d:%02d",
	  local->tm_mday, local->tm_mon+1, local->tm_year+1900,
	  local->tm_hour, local->tm_min,   local->tm_sec);
  return result;
}


/* regular expression matching */

#define ISSPECIAL(c) (((c) == '*') || ((c) == '/'))

int ExprMatch(char *string,char *expr)
{
  while (1)
    {
      if (ISSPECIAL(*expr))
	{
	  if (*expr == '/')
	    {
	      if (*string != '\\' && *string != '/')
		return 0;
	      string ++; expr++;
	    }
	  else if (*expr == '*')
	    {
	      if (*expr ++ == 0)
		return 1;
	      while (*++string != *expr)
		if (*string == 0)
		  return 0;
	    }
	}
      else
	{
	  if (*string != *expr)
	    return 0;
	  if (*expr++ == 0)
	    return 1;
	  string++;
	}
    }
}

/* recursive make directory */
/* abort if you get an ENOENT errno somewhere in the middle */
/* e.g. ignore error "mkdir on existing directory" */
/* */
/* return 1 if OK */
/*        0 on error */

int makedir (char *newdir)
{
  char *buffer = strdup(newdir);
  char *p;
  int  len = strlen(buffer);
  
  if (len <= 0) {
    free(buffer);
    return 0;
  }
  if (buffer[len-1] == '/') {
    buffer[len-1] = '\0';
  }
  if (mkdir(buffer, 0775) == 0)
    {
      free(buffer);
      return 1;
    }

  p = buffer+1;
  while (1)
    {
      char hold;
      
      while(*p && *p != '\\' && *p != '/')
	p++;
      hold = *p;
      *p = 0;
      if ((mkdir(buffer, 0775) == -1) && (errno == ENOENT))
	{
	  fprintf(stderr,"%s: couldn't create directory %s\n",prog,buffer);
	  free(buffer);
	  return 0;
	}
      if (hold == 0)
	break;
      *p++ = hold;
    }
  free(buffer);
  return 1;
}

int matchname (int arg,int argc,char **argv,char *fname)
{
  if (arg == argc)		/* no arguments given (untgz tgzarchive) */
    return 1;

  while (arg < argc)
    if (ExprMatch(fname,argv[arg++]))
      return 1;

  return 0; /* ignore this for the moment being */
}


/* Tar file list or extract */

int tar (gzFile in,int action,int arg,int argc,char **argv)
{
  union  tar_buffer buffer;
  int    len;
  int    err;
  int    getheader = 1;
  int    remaining = 0;
  FILE   *outfile = NULL;
  char   fname[BLOCKSIZE];
  time_t tartime;
  
  if (action == TGZ_LIST)
    printf("     day      time     size                       file\n"
	   " ---------- -------- --------- -------------------------------------\n");
  while (1)
    {
      len = gzread(in, &buffer, BLOCKSIZE);
      if (len < 0)
	error (gzerror(in, &err));
      /*
       * Always expect complete blocks to process
       * the tar information.
       */
      if (len != BLOCKSIZE)
	error("gzread: incomplete block read");
      
      /*
       * If we have to get a tar header
       */
      if (getheader == 1)
	{
	  /*
	   * if we met the end of the tar
	   * or the end-of-tar block,
	   * we are done
	   */
	  if ((len == 0)  || (buffer.header.name[0]== 0)) break;

	  tartime = (time_t)getoct(buffer.header.mtime,12);
	  strcpy(fname,buffer.header.name);
	  
	  switch (buffer.header.typeflag)
	    {
	    case DIRTYPE:
	      if (action == TGZ_LIST)
		printf(" %s     <dir> %s\n",strtime(&tartime),fname);
	      if (action == TGZ_EXTRACT)
		makedir(fname);
	      break;
	    case REGTYPE:
	    case AREGTYPE:
	      remaining = getoct(buffer.header.size,12);
	      if (action == TGZ_LIST)
		printf(" %s %9d %s\n",strtime(&tartime),remaining,fname);
	      if (action == TGZ_EXTRACT)
		{
		  if ((remaining) && (matchname(arg,argc,argv,fname)))
		    {
		      outfile = fopen(fname,"wb");
		      if (outfile == NULL) {
			/* try creating directory */
			char *p = strrchr(fname, '/');
			if (p != NULL) {
			  *p = '\0';
			  makedir(fname);
			  *p = '/';
			  outfile = fopen(fname,"wb");
			}
		      }
		      fprintf(stderr,
			      "%s %s\n",
			      (outfile) ? "Extracting" : "Couldn't create",
			      fname);
		    }
		  else
		    outfile = NULL;
		}
	      /*
	       * could have no contents
	       */
	      getheader = (remaining) ? 0 : 1;
	      break;
	    default:
	      if (action == TGZ_LIST)
		printf(" %s     <---> %s\n",strtime(&tartime),fname);
	      break;
	    }
	}
      else
	{
	  unsigned int bytes = (remaining > BLOCKSIZE) ? BLOCKSIZE : remaining;

	  if ((action == TGZ_EXTRACT) && (outfile != NULL))
	    {
	      if (fwrite(&buffer,sizeof(char),bytes,outfile) != bytes)
		{
		  fprintf(stderr,"%s : error writing %s skipping...\n",prog,fname);
		  fclose(outfile);
		  unlink(fname);
		}
	    }
	  remaining -= bytes;
	  if (remaining == 0)
	    {
	      getheader = 1;
	      if ((action == TGZ_EXTRACT) && (outfile != NULL))
		{
#ifdef WIN32
		  HANDLE hFile;
		  FILETIME ftm,ftLocal;
		  SYSTEMTIME st;
		  struct tm localt;
 
		  fclose(outfile);

		  localt = *localtime(&tartime);

		  hFile = CreateFile(fname, GENERIC_READ | GENERIC_WRITE,
				     0, NULL, OPEN_EXISTING, 0, NULL);
		  
		  st.wYear = (WORD)localt.tm_year+1900;
		  st.wMonth = (WORD)localt.tm_mon;
		  st.wDayOfWeek = (WORD)localt.tm_wday;
		  st.wDay = (WORD)localt.tm_mday;
		  st.wHour = (WORD)localt.tm_hour;
		  st.wMinute = (WORD)localt.tm_min;
		  st.wSecond = (WORD)localt.tm_sec;
		  st.wMilliseconds = 0;
		  SystemTimeToFileTime(&st,&ftLocal);
		  LocalFileTimeToFileTime(&ftLocal,&ftm);
		  SetFileTime(hFile,&ftm,NULL,&ftm);
		  CloseHandle(hFile);

		  outfile = NULL;
#else
		  struct utimbuf settime;

		  settime.actime = settime.modtime = tartime;

		  fclose(outfile);
		  outfile = NULL;
		  utime(fname,&settime);
#endif
		}
	    }
	}
    }
  
  if (gzclose(in) != Z_OK)
    error("failed gzclose");

  return 0;
}


/* =========================================================== */

void help(int exitval)
{
  fprintf(stderr,
	  "untgz v 0.1\n"
	  " an sample application of zlib 1.0.4\n\n"
          "Usage : untgz TGZfile            to extract all files\n"
          "        untgz TGZfile fname ...  to extract selected files\n"
          "        untgz -l TGZfile         to list archive contents\n"
          "        untgz -h                 to display this help\n\n");
  exit(exitval);
}

void error(const char *msg)
{
    fprintf(stderr, "%s: %s\n", prog, msg);
    exit(1);
}


/* ====================================================================== */

int _CRT_glob = 0;	/* disable globbing of the arguments */

int main(int argc,char **argv)
{
    int 	action = TGZ_EXTRACT;
    int 	arg = 1;
    char	*TGZfile;
    gzFile	*f;
    

    prog = strrchr(argv[0],'\\');
    if (prog == NULL)
      {
	prog = strrchr(argv[0],'/');
	if (prog == NULL)
	  {
	    prog = strrchr(argv[0],':');
	    if (prog == NULL)
	      prog = argv[0];
	    else
	      prog++;
	  }
	else
	  prog++;
      }
    else
      prog++;
    
    if (argc == 1)
      help(0);

    if (strcmp(argv[arg],"-l") == 0)
      {
	action = TGZ_LIST;
	if (argc == ++arg)
	  help(0);
      }
    else if (strcmp(argv[arg],"-h") == 0)
      {
	help(0);
      }

    if ((TGZfile = TGZfname(argv[arg])) == NULL)
      TGZnotfound(argv[arg]);            

    ++arg;
    if ((action == TGZ_LIST) && (arg != argc))
      help(1);

/*
 *  Process the TGZ file
 */
    switch(action)
      {
      case TGZ_LIST:
      case TGZ_EXTRACT:
	f = gzopen(TGZfile,"rb");
	if (f == NULL)
	  {
	    fprintf(stderr,"%s: Couldn't gzopen %s\n",
		    prog,
		    TGZfile);
	    return 1;
	  }
	exit(tar(f, action, arg, argc, argv));
      break;
	
      default:
	error("Unknown option!");
	exit(1);
      }

    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩电影| 欧美揉bbbbb揉bbbbb| 在线观看欧美黄色| 久久久噜噜噜久久人人看| 亚洲精品中文在线影院| 激情文学综合插| 欧美视频三区在线播放| 亚洲视频在线一区| 国产成人自拍网| 欧美一级国产精品| 视频一区在线播放| 97精品国产露脸对白| 中文字幕第一区第二区| 麻豆精品一二三| 欧美一区二区三区在| 亚洲成a人片在线不卡一二三区| www.日韩av| 亚洲国产高清不卡| 成人丝袜视频网| 国产亚洲美州欧州综合国| 免费不卡在线观看| 欧美一级二级在线观看| 五月激情综合婷婷| 欧美在线影院一区二区| 一区二区三区四区不卡在线| 成人免费三级在线| 中文字幕免费一区| av亚洲产国偷v产偷v自拍| 国产日韩精品久久久| 国产成人在线电影| 国产精品视频一区二区三区不卡| 国产精品一二二区| 国产蜜臀97一区二区三区| 国产成人精品www牛牛影视| 久久精品无码一区二区三区| 国产成人亚洲精品青草天美| 亚洲国产岛国毛片在线| 91香蕉视频污| 亚洲成a人片在线观看中文| 欧美精品亚洲一区二区在线播放| 亚洲电影中文字幕在线观看| 欧美疯狂做受xxxx富婆| 美美哒免费高清在线观看视频一区二区 | 不卡的电视剧免费网站有什么| 国产亚洲制服色| 99在线精品观看| 夜夜嗨av一区二区三区四季av| 欧美日韩和欧美的一区二区| 美女网站色91| 欧美激情资源网| 欧美色综合影院| 免费黄网站欧美| 久久久久久久久久美女| 91网站最新地址| 视频在线在亚洲| 久久综合色之久久综合| 99久久综合国产精品| 亚洲成人动漫精品| 久久伊99综合婷婷久久伊| 99re视频这里只有精品| 婷婷国产在线综合| 久久精品一区二区| 在线观看日韩一区| 国产精品影音先锋| 亚洲电影一级黄| 久久久久国产精品人| 91成人免费电影| 狠狠色狠狠色综合日日91app| 自拍偷拍亚洲综合| 日韩三级精品电影久久久| a4yy欧美一区二区三区| 久久精品国产第一区二区三区| 亚洲欧洲国产日韩| 日韩一级黄色片| 色综合久久久久| 国产麻豆视频一区| 午夜不卡av在线| 日韩毛片视频在线看| 精品国产不卡一区二区三区| 日本久久一区二区| 国产成人精品午夜视频免费| 日韩精品国产精品| 亚洲乱码国产乱码精品精小说| 日韩午夜三级在线| 欧美日韩精品三区| 91日韩在线专区| 国产精华液一区二区三区| 日本人妖一区二区| 夜夜嗨av一区二区三区四季av| 精品国产乱码久久久久久蜜臀| 欧美性做爰猛烈叫床潮| 99麻豆久久久国产精品免费 | 国产欧美一区二区三区网站| 欧美精品丝袜久久久中文字幕| av在线一区二区三区| 国产馆精品极品| 久久国产精品一区二区| 日韩精品电影一区亚洲| 亚洲图片欧美综合| 亚洲美女偷拍久久| 中文字幕亚洲电影| 日本一区二区电影| 亚洲国产精华液网站w | a美女胸又www黄视频久久| 国产综合久久久久影院| 日韩电影在线观看一区| 婷婷一区二区三区| 天天综合网天天综合色| 亚洲超碰97人人做人人爱| 亚洲另类在线视频| 亚洲日本电影在线| 亚洲免费在线视频一区 二区| 亚洲欧洲www| 1024成人网| 亚洲三级小视频| 亚洲欧美偷拍另类a∨色屁股| 亚洲欧美国产77777| 亚洲欧美日韩国产综合| 一区二区三区四区在线播放| 亚洲精选视频免费看| 亚洲国产视频网站| 日韩影视精彩在线| 六月婷婷色综合| 国产精品一区二区无线| 成人免费观看av| 91在线国产福利| 欧美性生交片4| 91精品国产aⅴ一区二区| 精品国产网站在线观看| 久久久不卡网国产精品一区| 中文字幕在线不卡国产视频| 亚洲精品ww久久久久久p站| 亚洲国产视频a| 韩国欧美一区二区| a4yy欧美一区二区三区| 欧美日韩二区三区| www激情久久| 国产精品福利在线播放| 一区二区日韩电影| 蜜桃视频免费观看一区| 国产成人在线电影| 色久综合一二码| 欧美优质美女网站| 精品剧情在线观看| 亚洲欧洲国产日韩| 奇米777欧美一区二区| 成人av在线资源| 欧美日韩精品一区二区| 久久久.com| 婷婷中文字幕一区三区| 国产精品羞羞答答xxdd | 成人免费视频国产在线观看| av亚洲精华国产精华精| 欧美久久久久久蜜桃| 国产亚洲成年网址在线观看| 亚洲一区二区三区精品在线| 另类小说欧美激情| 在线看国产一区| 久久久久久免费| 亚洲成a人v欧美综合天堂下载| 国产精品资源网| 在线不卡中文字幕播放| 国产精品午夜春色av| 蜜桃一区二区三区四区| 一本久久a久久精品亚洲| 日韩欧美国产一区二区三区 | 欧美日精品一区视频| 精品国产一区久久| 一区二区三区精密机械公司| 国产精品综合av一区二区国产馆| 欧美区一区二区三区| 日韩一区有码在线| 国产成人综合自拍| 亚洲精品在线免费观看视频| 亚洲国产精品视频| 91一区一区三区| 精品1区2区在线观看| 亚洲第一在线综合网站| 91亚洲精品久久久蜜桃网站| 久久精品日产第一区二区三区高清版 | 欧美精品第1页| 一二三四区精品视频| jlzzjlzz欧美大全| 久久久久久久久久久黄色| 天天综合日日夜夜精品| 欧美日韩在线播放三区| 亚洲激情自拍视频| 91久久奴性调教| 亚洲婷婷国产精品电影人久久| 国产大陆亚洲精品国产| 2020国产精品自拍| 麻豆视频一区二区| 欧美mv和日韩mv国产网站| 另类中文字幕网| 精品国产一区二区在线观看| 麻豆精品一区二区综合av| 日韩片之四级片| 韩国一区二区视频| 精品国产精品网麻豆系列| 麻豆国产精品官网|