36 if (enc.
buf==NULL)
return dec;
39 zstrm.zalloc = Z_NULL;
41 zstrm.opaque = Z_NULL;
42 zstrm.next_in = Z_NULL;
45 int ret = inflateInit2(&zstrm, 47);
46 if (ret!=Z_OK)
return dec;
52 zstrm.next_in = enc.
buf;
53 zstrm.avail_in = (size_t)enc.
vldsz;
56 zstrm.next_out = wrk.
buf;
57 zstrm.avail_out = (size_t)wrk.
bufsz;
59 ret = inflate(&zstrm, Z_NO_FLUSH);
60 if (ret!=Z_OK && ret!=Z_STREAM_END) {
74 if (ret==Z_STREAM_END && zstrm.avail_in!=0) {
75 ret = inflateReset(&zstrm);
78 }
while (ret!=Z_STREAM_END && zstrm.avail_in>0);
101 unsigned char gzip_header[] = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff};
102 unsigned char gzip_tailer[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
135 if (infp==NULL || otfp==NULL)
return 0;
138 unsigned char inbuf[
LBUF];
139 unsigned char otbuf[
BUFSZ];
143 zstrm.zalloc = Z_NULL;
144 zstrm.zfree = Z_NULL;
145 zstrm.opaque = Z_NULL;
146 zstrm.next_in = Z_NULL;
149 int ret = inflateInit2(&zstrm, 47);
153 zstrm.next_in = inbuf;
154 zstrm.avail_in = (int)fread(inbuf, 1,
LBUF, infp);
157 zstrm.next_out = otbuf;
158 zstrm.avail_out =
BUFSZ;
160 ret = inflate(&zstrm, Z_NO_FLUSH);
161 if (ret!=Z_OK && ret!=Z_STREAM_END) {
162 fwrite(otbuf,
BUFSZ-zstrm.avail_out, 1, otfp);
170 int otsz =
BUFSZ - zstrm.avail_out;
171 fwrite(otbuf, otsz, 1, otfp);
174 if (ret==Z_STREAM_END && zstrm.avail_in!=0) {
175 ret = inflateReset(&zstrm);
178 }
while (ret!=Z_STREAM_END && zstrm.avail_in>0);
180 }
while(!feof(infp));
207 gzwrite(*gf, (voidp)buf, (
unsigned int)cc);
234 sz = cc = gzread(*gf, (voidp)buf,
RECVBUFSZ);
236 fwrite(buf, cc, 1, fp);
262 fp = fopen(fmfn,
"rb");
265 gf = gzopen(tofn,
"wb");
274 gzwrite(gf, (voidp)buf, (
unsigned int)cc);
301 infp = fopen(fmfn,
"rb");
304 otfp = fopen(tofn,
"wb");
383 if (enc.
buf[0]==0x1f && enc.
buf[1]==0x8b)
return TRUE;
395 Tar_Header tar_header;
397 long unsigned int size = 0;
398 long unsigned int datalen = (
long unsigned int)(tardata.
vldsz - 1024);
406 int long_link =
FALSE;
409 while (size < datalen) {
410 memcpy(&tar_header, (
char*)&tardata.
buf[size],
sizeof(Tar_Header));
413 if (!long_link && (*tar_header.typeflag==
'L' || *tar_header.typeflag==
'K')) {
417 else if (long_link) {
427 if (*tar_header.typeflag==
'x') {
428 PRINT_MESG(
"xLib/extract_tTar: ERROR: type flag \"x\" (POSIX pax extend header) is not supported\n");
432 size +=
sizeof(Tar_Header);
441 if (ret<0)
PRINT_MESG(
"xLib/extract_tTar: WARNING: Failed to create directory.\n");
442 long unsigned int len = (
long unsigned int)strtol(tar_header.size, NULL, 8);
451 if (len%512>0) len = (len/512 + 1)*512;
Buffer make_Buffer(int sz)
Buffer型変数のバッファ部をつくり出す.
int cat_b2Buffer(void *src, Buffer *dst, int len)
任意のバイナリデータsrcを Buffer型変数dstへ lenバイト catする.
void free_Buffer(Buffer *buf)
Buffer型変数のバッファ部を解放する
Buffer init_Buffer()
初期化したBuffer型変数を返す.
Buffer dup_Buffer(Buffer buf)
Buffer型変数のコピーをつくる.
int cat_Buffer(Buffer *src, Buffer *dst)
Buffer変数 srcから dstへバッファを catする.
#define cat_s2Buffer(src, dst)
cat_b2Buffer()
#define make_Buffer_bystr(str)
set_Buffer()
#define JBXL_ARGS_ERROR
不正な引数(NULLなど)
#define JBXL_FILE_DESTOPEN_ERROR
ディスティネーションファイルのオープン失敗
#define JBXL_FILE_OPEN_ERROR
ファイルオープン エラー
int bufsz
確保してあるバッファの大きさ - 1.
int vldsz
データの長さ.バイナリデータの場合も使用可能.文字列の場合は 0x00 を含まない.
int state
変数の状態を表す.正常は JBXL_NORMAL
unsigned char * buf
バッファの先頭へのポインタ.str[bufsz]は必ず 0x00となる.