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

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

?? jartool.c

?? jar文件處理原程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*  jartool.c - main functions for fastjar utility  Copyright (C) 1999  Bryan Burns    This program is free software; you can redistribute it and/or  modify it under the terms of the GNU General Public License  as published by the Free Software Foundation; either version 2  of the License, or (at your option) any later version.    This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.    You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.*//* $Id: jartool.c,v 1.2 1999/12/06 07:38:28 toast Exp $   $Log: jartool.c,v $   Revision 1.2  1999/12/06 07:38:28  toast   fixed recursive archiving bug   Revision 1.1.1.1  1999/12/06 03:09:34  toast   initial checkin..   Revision 1.22  1999/10/12 19:45:13  burnsbr   adding patch to fix compat problem   Revision 1.21  1999/05/10 09:15:49  burnsbr   fixed manifest file version info   Revision 1.20  1999/05/10 08:53:16  burnsbr   *** empty log message ***   Revision 1.19  1999/05/10 08:30:39  burnsbr   added extract / listing code   Revision 1.18  1999/04/28 04:24:29  burnsbr   updated version   Revision 1.17  1999/04/28 04:21:23  burnsbr   added support for -C dir-changing flag.. Updated total compression display   Revision 1.16  1999/04/27 10:28:22  burnsbr   updated version string   Revision 1.15  1999/04/27 10:04:06  burnsbr   configure support   Revision 1.14  1999/04/27 08:56:14  burnsbr   added -V flag, better error messages   Revision 1.13  1999/04/26 02:35:21  burnsbr   changed all sorts of stuff.. compression now works 100%   Revision 1.12  1999/04/23 12:00:45  burnsbr   90% done with compression code   Revision 1.11  1999/04/22 04:12:57  burnsbr   finished first round of Manifest file support..   might need to do more, digest etc..   Revision 1.10  1999/04/22 02:35:23  burnsbr   added more manifest support, about 75% done now.  Replaced all the   redundant shifts and bit-logic with a macro or two, making the code   easier to read.   Revision 1.9  1999/04/21 09:55:16  burnsbr   pulled out printfs   Revision 1.8  1999/04/21 02:58:01  burnsbr   started manifest code   Revision 1.7  1999/04/20 23:15:28  burnsbr   added patch sent by John Bley <jbb6@acpub.duke.edu>   Revision 1.6  1999/04/20 08:56:02  burnsbr   added GPL comment   Revision 1.5  1999/04/20 08:16:09  burnsbr   fixed verbose flag, did some optimization   Revision 1.4  1999/04/20 05:09:59  burnsbr   added rcsid variable   Revision 1.3  1999/04/20 05:08:54  burnsbr   fixed Log statement*/#include "config.h"#include <zlib.h>#ifdef STDC_HEADERS#include <stdlib.h>#endif#ifdef HAVE_UNISTD_H#include <unistd.h>#endif#include <stdio.h>#include <sys/stat.h>#include <sys/types.h>#ifdef HAVE_DIRENT_H#include <dirent.h>#endif#ifdef HAVE_FCNTL_H#include <fcntl.h>#endif#include <string.h>#include <errno.h>#ifdef TM_IN_SYS_TIME#include <sys/time.h>#else#include <time.h>#endif#include "jartool.h"#include "zipfile.h"#include "dostime.h"#include "pushback.h"#include "compress.h"static char version_string[] = VERSION;static char rcsid[] = "$Id: jartool.c,v 1.2 1999/12/06 07:38:28 toast Exp $";extern int errno;void usage(char*);void add_entry(struct zipentry *);void init_headers();int consume(pb_file *, int);int list_jar(int, char**, int);int extract_jar(int, char**, int);int add_file_to_jar(int, int, char*, struct stat*);int add_to_jar(int, char*, char*);int create_central_header(int);int make_manifest(int, char*);/* global variables */ub1 file_header[30];ub1 data_descriptor[16];int do_compress;int seekable;int verbose;char jarfile[256];zipentry *ziplist; /* linked list of entries */zipentry *ziptail; /* tail of the linked list */int number_of_entries; /* number of entries in the linked list */int main(int argc, char **argv){  char mfile[256];    int action = ACTION_NONE;  int manifest = TRUE;  int manifest_file = FALSE;  int file = FALSE;  int file_first = FALSE;    int i, j;  int jarfd = -1;    do_compress = TRUE;  verbose = FALSE;    ziplist = NULL;    number_of_entries = 0;    if(argc < 2)    usage(argv[0]);    j = strlen(argv[1]);    for(i = 0; i < j; i++){    switch(argv[1][i]){    case 'c':      action = ACTION_CREATE;      break;    case 't':      action = ACTION_LIST;      break;    case 'x':      action = ACTION_EXTRACT;      break;    case 'u':      action = ACTION_UPDATE;      break;    case 'v':      verbose = TRUE;      break;    case 'V':      printf("%s\n", version_string);      exit(0);    case 'f':      file = TRUE;      if(!manifest_file)        file_first = TRUE;      else        file_first = FALSE;      break;    case 'm':      manifest_file = TRUE;      break;    case '0':      do_compress = FALSE;      break;    case 'M':      manifest = FALSE;      break;    case '-':      break;    default:      fprintf(stderr, "Illegal option: %c\n", argv[1][i]);      usage(argv[0]);    }  }  if(action == ACTION_NONE){    fprintf(stderr, "One of options -{ctxu} must be specified.\n");    usage(argv[0]);  }  i = 2;  /* get the jarfile and manifest file (if any) */  if(file && file_first){    if(i >= argc)      usage(argv[0]);    strncpy(jarfile, argv[i++], 256);  }  if(manifest_file){    if(i >= argc)      usage(argv[0]);    strncpy(mfile, argv[i++], 256);  }  if(file && !file_first){    if(i >= argc)      usage(argv[0]);    strncpy(jarfile, argv[i++], 256);  }  /* create the jarfile */  if(action == ACTION_CREATE){    if(file){      jarfd = creat(jarfile, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);            if(jarfd < 0){        fprintf(stderr, "Error opening %s for writing!\n", jarfile);        perror(jarfile);        exit(1);      }            /* We assume that the file is seekable */      seekable = TRUE;          } else {            jarfd = STDOUT_FILENO;  /* jarfd is stdout otherwise */            /* standard out is not seekable */      seekable = FALSE;            /* don't want our output to be part of the jar file.. figured this one         out the hard way.. =P */      verbose = FALSE;    }  } else if(action == ACTION_LIST || action == ACTION_EXTRACT){    if(file){      jarfd = open(jarfile, O_RDONLY);      if(jarfd < 0){        fprintf(stderr, "Error opening %s for reading!\n", jarfile);        perror(jarfile);        exit(1);      }      seekable = TRUE;    } else {      jarfd = STDIN_FILENO; /* jarfd is standard in */      /* we assume that the stream isn't seekable for safety */      seekable = FALSE;    }  }  if(action == ACTION_CREATE || action == ACTION_UPDATE){    init_headers();        if(do_compress)      init_compression();      /* Add the META-INF/ directory and the manifest */    if(manifest && manifest_file)      make_manifest(jarfd, mfile);    else if(manifest)      make_manifest(jarfd, NULL);        /* now we add the files to the archive */    for(; i < argc; i++){  /* i already is in the right location*/            if(!strcmp(argv[i], "-C")){        if(add_to_jar(jarfd, argv[i+1], argv[i+2])){          printf("Error adding %s to jar archive!\n", argv[i]);          exit(1);        }        i += 2;      } else {        if(add_to_jar(jarfd, NULL, argv[i])){          printf("Error adding %s to jar archive!\n", argv[i]);          exit(1);        }      }    }    /* de-initialize the compression DS */    if(do_compress)      end_compression();        create_central_header(jarfd);        if (close(jarfd) != 0) {      fprintf(stderr, "Error closing jar archive!\n");    }  } else if(action == ACTION_LIST){    list_jar(jarfd, &argv[i], (argc - i));  } else if(action == ACTION_EXTRACT){    extract_jar(jarfd, &argv[i], (argc - i));  }    exit(0);}void init_headers(){  /* packing file header */  /* magic number */  file_header[0] = 0x50;  file_header[1] = 0x4b;  file_header[2] = 0x03;  file_header[3] = 0x04;  /* version number (Unix 1.0)*/  file_header[4] = 10;  file_header[5] = 0;  /* bit flag (normal deflation)*/  file_header[6] = 0x00;  file_header[7] = 0x00;  /* do_compression method (deflation) */  file_header[8] = 0;  file_header[9] = 0;  /* last mod file time (MS-DOS format) */  file_header[10] = 0;  file_header[11] = 0;  /* last mod file date (MS-DOS format) */  file_header[12] = 0;  file_header[13] = 0;  /* CRC 32 */  file_header[14] = 0;  file_header[15] = 0;  file_header[16] = 0;  file_header[17] = 0;  /* compressed size */  file_header[18] = 0;  file_header[19] = 0;  file_header[20] = 0;  file_header[21] = 0;  /* uncompressed size */  file_header[22] = 0;  file_header[23] = 0;  file_header[24] = 0;  file_header[25] = 0;  /* filename length */  file_header[26] = 0;  file_header[27] = 0;  /* extra field length */  file_header[28] = 0;  file_header[29] = 0;  /* Initialize the compression DS */  PACK_UB4(data_descriptor, 0, 0x08074b50);  }void add_entry(struct zipentry *ze){  if(ziplist == NULL){    ziplist = ze;    ziptail = ziplist;  } else {    ziplist->next_entry = ze;    ziplist = ze;  }    number_of_entries++;}int make_manifest(int jfd, char *mf_name){  time_t current_time;  int nlen;   /* length of file name */  int mod_time; /* file modification time */  struct zipentry *ze;    nlen = 9;  /* trust me on this one */  memset((file_header + 12), '\0', 16); /*clear mod time, crc, size fields*/    current_time = time(NULL);  if(current_time == (time_t)-1){    perror("time");    exit(1);  }  mod_time = unix2dostime(&current_time);    PACK_UB2(file_header, LOC_EXTRA, 0);  PACK_UB2(file_header, LOC_COMP, 0);  PACK_UB2(file_header, LOC_FNLEN, nlen);  PACK_UB4(file_header, LOC_MODTIME, mod_time);    if(verbose)    printf("adding: META-INF/ (in=0) (out=0) (stored 0%%)\n");    ze = (zipentry*)malloc(sizeof(zipentry));  if(ze == NULL){    perror("malloc");    exit(1);  }    memset(ze, 0, sizeof(zipentry)); /* clear all the fields*/  ze->filename = (char*)malloc((nlen + 1) * sizeof(char) + 1);  strcpy(ze->filename, "META-INF/");  ze->filename[nlen] = '\0';      ze->offset = lseek(jfd, 0, SEEK_CUR);  ze->mod_time = (ub2)(mod_time & 0x0000ffff);  ze->mod_date = (ub2)((mod_time & 0xffff0000) >> 16);  ze->compressed = FALSE;  add_entry(ze);    write(jfd, file_header, 30);  write(jfd, "META-INF/", nlen);  /* if the user didn't specify an external manifest file... */  if(mf_name == NULL){    int mf_len = 37 + strlen(VERSION);    uLong crc;    char mf[mf_len + 1];    sprintf(mf, "Manifest-Version: 1.0\nCreated-By: %s\n\n", VERSION);    crc = crc32(0L, Z_NULL, 0);        crc = crc32(crc, mf, mf_len);    nlen = 20;  /* once again, trust me */    PACK_UB2(file_header, LOC_EXTRA, 0);    PACK_UB2(file_header, LOC_COMP, 0);    PACK_UB2(file_header, LOC_FNLEN, nlen);    PACK_UB4(file_header, LOC_USIZE, mf_len);        memcpy((file_header + LOC_CSIZE), (file_header + LOC_USIZE), 4);        PACK_UB4(file_header, LOC_CRC, crc);    if(verbose)      printf("adding: META-INF/MANIFEST.MF (in=56) (out=56) (stored 0%%)\n");        ze = (zipentry*)malloc(sizeof(zipentry));    if(ze == NULL){      perror("malloc");      exit(1);    }        memset(ze, 0, sizeof(zipentry)); /* clear all the fields*/    ze->filename = (char*)malloc((nlen + 1) * sizeof(char) + 1);    strcpy(ze->filename, "META-INF/MANIFEST.MF");    ze->filename[nlen] = '\0';        ze->offset = lseek(jfd, 0, SEEK_CUR);    ze->mod_time = (ub2)(mod_time & 0x0000ffff);    ze->mod_date = (ub2)((mod_time & 0xffff0000) >> 16);    ze->crc = crc;    ze->csize = mf_len;    ze->usize = ze->csize;    ze->compressed = FALSE;        add_entry(ze);        write(jfd, file_header, 30);    write(jfd, "META-INF/MANIFEST.MF", nlen);    write(jfd, mf, mf_len);      } else {    int mfd;    struct stat statbuf;    stat(mf_name, &statbuf);    if(!S_ISREG(statbuf.st_mode)){      fprintf(stderr, "Invalid manifest file specified.\n");      exit(1);    }      mfd = open(mf_name, O_RDONLY);    if(mfd < 0){      fprintf(stderr, "Error opening %s.\n", mf_name);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美猛男gaygay网站| 亚洲欧美日韩系列| 国产精品传媒在线| 日本系列欧美系列| 色综合久久久久综合体桃花网| 欧美一区二区三区在线电影| 国产精品乱人伦| 精品一区二区三区久久| 91久久精品网| 国产精品国产精品国产专区不片| 美日韩一区二区| 欧美日韩成人激情| 亚洲一级在线观看| 97超碰欧美中文字幕| 久久亚洲精品小早川怜子| 男女男精品视频网| 欧美三级日本三级少妇99| 亚洲视频综合在线| 波多野结衣亚洲一区| 久久精品一区二区| 国产高清不卡一区二区| 久久理论电影网| 激情久久五月天| 日韩精品在线网站| 免费在线观看一区| 宅男在线国产精品| 视频在线在亚洲| 7777精品伊人久久久大香线蕉| 一区二区三区日韩在线观看| 91色|porny| 亚洲精品国产第一综合99久久 | 国产精品网友自拍| 粉嫩在线一区二区三区视频| 久久蜜桃香蕉精品一区二区三区| 精品在线观看免费| 久久在线观看免费| 国产99久久久国产精品免费看| 国产日韩v精品一区二区| 丰满少妇久久久久久久| 国产精品免费视频观看| 色综合久久66| 亚洲成人福利片| 日韩精品一区国产麻豆| 国产成人综合自拍| 专区另类欧美日韩| 欧美色爱综合网| 寂寞少妇一区二区三区| 日本一区二区三区免费乱视频| 成人午夜激情视频| 夜夜操天天操亚洲| 欧美一卡二卡在线| 国产精品一区二区视频| 中文字幕亚洲精品在线观看| 在线观看亚洲一区| 经典一区二区三区| 中文字幕不卡一区| 欧美日韩精品电影| 国产经典欧美精品| 亚洲人妖av一区二区| 欧美巨大另类极品videosbest | 亚洲中国最大av网站| 日韩三级视频中文字幕| 国产成人精品aa毛片| 一区av在线播放| 日韩精品一区二区三区中文不卡| 成人污污视频在线观看| 亚洲自拍与偷拍| 国产亚洲美州欧州综合国| 在线观看亚洲专区| 国产在线观看一区二区| 一区二区三区91| 2022国产精品视频| 欧美亚洲动漫精品| 国产福利精品一区二区| 午夜天堂影视香蕉久久| 国产午夜精品在线观看| 欧美日韩国产综合视频在线观看| 丁香激情综合国产| 麻豆国产一区二区| 亚洲午夜三级在线| 中文字幕日本不卡| 精品国精品国产| 欧美日韩专区在线| 99久久精品国产一区二区三区| 麻豆精品一区二区av白丝在线| 一区二区三区中文字幕| 国产婷婷色一区二区三区四区| 欧美日韩国产电影| 91高清视频在线| 成人禁用看黄a在线| 精品一二三四区| 视频在线在亚洲| 亚洲高清免费观看高清完整版在线观看| 精品欧美一区二区在线观看| 欧美久久久久久久久中文字幕| 91麻豆成人久久精品二区三区| 国产成人av一区二区三区在线观看| 欧美aaaaaa午夜精品| 日韩影院精彩在线| 亚洲一二三区不卡| 一区二区高清视频在线观看| 国产精品电影一区二区三区| 亚洲国产成人午夜在线一区| 久久免费电影网| 国产欧美一区二区在线| 久久久精品日韩欧美| 精品国产乱码久久| 精品国产91乱码一区二区三区| 欧美一区二区视频在线观看2022 | 中文字幕精品一区| 欧美激情一区在线观看| 日本一区二区三区电影| 久久精品视频在线免费观看| 精品国产乱码久久久久久牛牛 | 国产精品一二三在| 国产精品1024| 成人av资源下载| www.欧美色图| 色婷婷亚洲精品| 欧美日免费三级在线| 欧美精品乱码久久久久久按摩 | 日本韩国欧美国产| 欧美综合久久久| 在线不卡a资源高清| 91精品国模一区二区三区| 日韩视频中午一区| 26uuu久久天堂性欧美| 中文一区二区在线观看| 亚洲欧美aⅴ...| 香蕉久久夜色精品国产使用方法| 天堂影院一区二区| 国产在线精品国自产拍免费| 国产成人免费视频| 在线精品视频免费观看| 在线观看91精品国产麻豆| 欧美不卡在线视频| 国产精品美女www爽爽爽| 亚洲精品ww久久久久久p站| 同产精品九九九| 国产精品99久久久久久久vr| 色综合视频在线观看| 欧美精品久久久久久久多人混战 | 日韩高清一区在线| 国产精品一区专区| 91精品福利在线| 欧美成人艳星乳罩| 国产欧美日韩在线视频| 一区二区三区精品在线观看| 奇米在线7777在线精品| av午夜一区麻豆| 91精品国产综合久久久蜜臀图片| 国产女同互慰高潮91漫画| 亚洲国产日韩一区二区| 国产一区福利在线| 欧美美女喷水视频| 国产精品久久免费看| 美女视频网站黄色亚洲| 91女厕偷拍女厕偷拍高清| 欧美不卡视频一区| 亚洲福利视频导航| 成年人国产精品| 2023国产精品| 日韩成人免费电影| 色久综合一二码| 亚洲国产精品t66y| 蜜臀av国产精品久久久久| 91福利视频在线| 国产精品天天看| 国模少妇一区二区三区| 欧美精品一二三区| 一区二区三区在线视频观看58| 国产一区不卡在线| 欧美精品vⅰdeose4hd| 亚洲美女精品一区| 成人午夜电影网站| 久久久久久电影| 男男成人高潮片免费网站| 欧美日韩三级一区二区| 亚洲乱码国产乱码精品精98午夜| 成人性生交大合| 久久久99精品久久| 精品一二三四区| 日韩免费性生活视频播放| 亚洲va天堂va国产va久| 日本乱码高清不卡字幕| 亚洲欧美日韩国产另类专区| 成人丝袜视频网| 国产午夜一区二区三区| 国模一区二区三区白浆| 日韩欧美国产一区在线观看| 丝袜美腿亚洲一区| 91精品国产综合久久精品麻豆| 亚洲综合免费观看高清完整版在线| av电影一区二区| 亚洲欧洲另类国产综合| 99久久久久免费精品国产 | 中文在线资源观看网站视频免费不卡| 精品无码三级在线观看视频| 亚洲精品一线二线三线 | 丝袜美腿亚洲一区二区图片|