srcanamdw/codescanner/pyinstaller/source/zlib/unzip.c
author noe\swadi
Thu, 18 Feb 2010 12:29:02 +0530
changeset 1 22878952f6e2
permissions -rw-r--r--
Committing the CodeScanner Core tool This component has been moved from the StaticAnaApps package. BUG : 5889 (http://developer.symbian.org/webbugs/show_bug.cgi?id=5889).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     1
/* unzip.c -- IO for uncompress .zip files using zlib
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     2
   Version 1.01e, February 12th, 2005
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     3
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     4
   Copyright (C) 1998-2005 Gilles Vollant
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     5
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     6
   Read unzip.h for more info
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     7
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     8
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
     9
/* Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    10
compatibility with older software. The following is from the original crypt.c. Code
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    11
woven in by Terry Thorsen 1/2003.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    12
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    13
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    14
  Copyright (c) 1990-2000 Info-ZIP.  All rights reserved.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    15
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    16
  See the accompanying file LICENSE, version 2000-Apr-09 or later
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    17
  (the contents of which are also included in zip.h) for terms of use.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    18
  If, for some reason, all these files are missing, the Info-ZIP license
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    19
  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    20
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    21
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    22
  crypt.c (full version) by Info-ZIP.      Last revised:  [see crypt.h]
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    23
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    24
  The encryption/decryption parts of this source code (as opposed to the
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    25
  non-echoing password parts) were originally written in Europe.  The
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    26
  whole source package can be freely distributed, including from the USA.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    27
  (Prior to January 2000, re-export from the US was a violation of US law.)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    28
 */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    29
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    30
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    31
  This encryption code is a direct transcription of the algorithm from
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    32
  Roger Schlafly, described by Phil Katz in the file appnote.txt.  This
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    33
  file (appnote.txt) is distributed with the PKZIP program (even in the
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    34
  version without encryption capabilities).
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    35
 */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    36
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    37
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    38
#include <stdio.h>
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    39
#include <stdlib.h>
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    40
#include <string.h>
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    41
#include "zlib.h"
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    42
#include "unzip.h"
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    43
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    44
#ifdef STDC
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    45
#  include <stddef.h>
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    46
#  include <string.h>
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    47
#  include <stdlib.h>
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    48
#endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    49
#ifdef NO_ERRNO_H
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    50
    extern int errno;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    51
#else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    52
#   include <errno.h>
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    53
#endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    54
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    55
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    56
#ifndef local
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    57
#  define local static
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    58
#endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    59
/* compile with -Dlocal if your debugger can't find static symbols */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    60
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    61
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    62
#ifndef CASESENSITIVITYDEFAULT_NO
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    63
#  if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    64
#    define CASESENSITIVITYDEFAULT_NO
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    65
#  endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    66
#endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    67
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    68
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    69
#ifndef UNZ_BUFSIZE
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    70
#define UNZ_BUFSIZE (16384)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    71
#endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    72
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    73
#ifndef UNZ_MAXFILENAMEINZIP
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    74
#define UNZ_MAXFILENAMEINZIP (256)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    75
#endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    76
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    77
#ifndef ALLOC
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    78
# define ALLOC(size) (malloc(size))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    79
#endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    80
#ifndef TRYFREE
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    81
# define TRYFREE(p) {if (p) free(p);}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    82
#endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    83
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    84
#define SIZECENTRALDIRITEM (0x2e)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    85
#define SIZEZIPLOCALHEADER (0x1e)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    86
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    87
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    88
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    89
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    90
const char unz_copyright[] =
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    91
   " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    92
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    93
/* unz_file_info_interntal contain internal info about a file in zipfile*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    94
typedef struct unz_file_info_internal_s
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    95
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    96
    uLong offset_curfile;/* relative offset of local header 4 bytes */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    97
} unz_file_info_internal;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    98
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
    99
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   100
/* file_in_zip_read_info_s contain internal information about a file in zipfile,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   101
    when reading and decompress it */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   102
typedef struct
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   103
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   104
    char  *read_buffer;         /* internal buffer for compressed data */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   105
    z_stream stream;            /* zLib stream structure for inflate */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   106
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   107
    uLong pos_in_zipfile;       /* position in byte on the zipfile, for fseek*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   108
    uLong stream_initialised;   /* flag set if stream structure is initialised*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   109
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   110
    uLong offset_local_extrafield;/* offset of the local extra field */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   111
    uInt  size_local_extrafield;/* size of the local extra field */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   112
    uLong pos_local_extrafield;   /* position in the local extra field in read*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   113
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   114
    uLong crc32;                /* crc32 of all data uncompressed */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   115
    uLong crc32_wait;           /* crc32 we must obtain after decompress all */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   116
    uLong rest_read_compressed; /* number of byte to be decompressed */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   117
    uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   118
    zlib_filefunc_def z_filefunc;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   119
    voidpf filestream;        /* io structore of the zipfile */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   120
    uLong compression_method;   /* compression method (0==store) */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   121
    uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   122
    int   raw;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   123
} file_in_zip_read_info_s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   124
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   125
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   126
/* unz_s contain internal information about the zipfile
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   127
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   128
typedef struct
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   129
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   130
    zlib_filefunc_def z_filefunc;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   131
    voidpf filestream;        /* io structore of the zipfile */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   132
    unz_global_info gi;       /* public global information */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   133
    uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   134
    uLong num_file;             /* number of the current file in the zipfile*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   135
    uLong pos_in_central_dir;   /* pos of the current file in the central dir*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   136
    uLong current_file_ok;      /* flag about the usability of the current file*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   137
    uLong central_pos;          /* position of the beginning of the central dir*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   138
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   139
    uLong size_central_dir;     /* size of the central directory  */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   140
    uLong offset_central_dir;   /* offset of start of central directory with
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   141
                                   respect to the starting disk number */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   142
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   143
    unz_file_info cur_file_info; /* public info about the current file in zip*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   144
    unz_file_info_internal cur_file_info_internal; /* private info about it*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   145
    file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   146
                                        file if we are decompressing it */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   147
    int encrypted;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   148
#    ifndef NOUNCRYPT
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   149
    unsigned long keys[3];     /* keys defining the pseudo-random sequence */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   150
    const unsigned long* pcrc_32_tab;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   151
#    endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   152
} unz_s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   153
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   154
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   155
#ifndef NOUNCRYPT
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   156
#include "crypt.h"
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   157
#endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   158
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   159
/* ===========================================================================
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   160
     Read a byte from a gz_stream; update next_in and avail_in. Return EOF
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   161
   for end of file.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   162
   IN assertion: the stream s has been sucessfully opened for reading.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   163
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   164
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   165
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   166
local int unzlocal_getByte OF((
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   167
    const zlib_filefunc_def* pzlib_filefunc_def,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   168
    voidpf filestream,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   169
    int *pi));
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   170
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   171
local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   172
    const zlib_filefunc_def* pzlib_filefunc_def;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   173
    voidpf filestream;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   174
    int *pi;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   175
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   176
    unsigned char c;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   177
    int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   178
    if (err==1)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   179
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   180
        *pi = (int)c;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   181
        return UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   182
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   183
    else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   184
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   185
        if (ZERROR(*pzlib_filefunc_def,filestream))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   186
            return UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   187
        else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   188
            return UNZ_EOF;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   189
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   190
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   191
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   192
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   193
/* ===========================================================================
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   194
   Reads a long in LSB order from the given gz_stream. Sets
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   195
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   196
local int unzlocal_getShort OF((
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   197
    const zlib_filefunc_def* pzlib_filefunc_def,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   198
    voidpf filestream,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   199
    uLong *pX));
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   200
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   201
local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   202
    const zlib_filefunc_def* pzlib_filefunc_def;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   203
    voidpf filestream;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   204
    uLong *pX;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   205
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   206
    uLong x ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   207
    int i;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   208
    int err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   209
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   210
    err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   211
    x = (uLong)i;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   212
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   213
    if (err==UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   214
        err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   215
    x += ((uLong)i)<<8;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   216
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   217
    if (err==UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   218
        *pX = x;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   219
    else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   220
        *pX = 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   221
    return err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   222
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   223
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   224
local int unzlocal_getLong OF((
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   225
    const zlib_filefunc_def* pzlib_filefunc_def,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   226
    voidpf filestream,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   227
    uLong *pX));
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   228
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   229
local int unzlocal_getLong (pzlib_filefunc_def,filestream,pX)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   230
    const zlib_filefunc_def* pzlib_filefunc_def;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   231
    voidpf filestream;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   232
    uLong *pX;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   233
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   234
    uLong x ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   235
    int i;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   236
    int err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   237
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   238
    err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   239
    x = (uLong)i;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   240
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   241
    if (err==UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   242
        err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   243
    x += ((uLong)i)<<8;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   244
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   245
    if (err==UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   246
        err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   247
    x += ((uLong)i)<<16;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   248
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   249
    if (err==UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   250
        err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   251
    x += ((uLong)i)<<24;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   252
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   253
    if (err==UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   254
        *pX = x;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   255
    else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   256
        *pX = 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   257
    return err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   258
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   259
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   260
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   261
/* My own strcmpi / strcasecmp */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   262
local int strcmpcasenosensitive_internal (fileName1,fileName2)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   263
    const char* fileName1;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   264
    const char* fileName2;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   265
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   266
    for (;;)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   267
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   268
        char c1=*(fileName1++);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   269
        char c2=*(fileName2++);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   270
        if ((c1>='a') && (c1<='z'))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   271
            c1 -= 0x20;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   272
        if ((c2>='a') && (c2<='z'))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   273
            c2 -= 0x20;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   274
        if (c1=='\0')
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   275
            return ((c2=='\0') ? 0 : -1);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   276
        if (c2=='\0')
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   277
            return 1;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   278
        if (c1<c2)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   279
            return -1;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   280
        if (c1>c2)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   281
            return 1;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   282
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   283
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   284
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   285
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   286
#ifdef  CASESENSITIVITYDEFAULT_NO
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   287
#define CASESENSITIVITYDEFAULTVALUE 2
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   288
#else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   289
#define CASESENSITIVITYDEFAULTVALUE 1
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   290
#endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   291
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   292
#ifndef STRCMPCASENOSENTIVEFUNCTION
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   293
#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   294
#endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   295
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   296
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   297
   Compare two filename (fileName1,fileName2).
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   298
   If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   299
   If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   300
                                                                or strcasecmp)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   301
   If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   302
        (like 1 on Unix, 2 on Windows)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   303
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   304
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   305
extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   306
    const char* fileName1;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   307
    const char* fileName2;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   308
    int iCaseSensitivity;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   309
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   310
    if (iCaseSensitivity==0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   311
        iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   312
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   313
    if (iCaseSensitivity==1)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   314
        return strcmp(fileName1,fileName2);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   315
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   316
    return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   317
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   318
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   319
#ifndef BUFREADCOMMENT
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   320
#define BUFREADCOMMENT (0x400)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   321
#endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   322
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   323
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   324
  Locate the Central directory of a zipfile (at the end, just before
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   325
    the global comment)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   326
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   327
local uLong unzlocal_SearchCentralDir OF((
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   328
    const zlib_filefunc_def* pzlib_filefunc_def,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   329
    voidpf filestream));
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   330
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   331
local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   332
    const zlib_filefunc_def* pzlib_filefunc_def;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   333
    voidpf filestream;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   334
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   335
    unsigned char* buf;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   336
    uLong uSizeFile;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   337
    uLong uBackRead;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   338
    uLong uMaxBack=0xffff; /* maximum size of global comment */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   339
    uLong uPosFound=0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   340
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   341
    if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   342
        return 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   343
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   344
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   345
    uSizeFile = ZTELL(*pzlib_filefunc_def,filestream);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   346
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   347
    if (uMaxBack>uSizeFile)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   348
        uMaxBack = uSizeFile;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   349
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   350
    buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   351
    if (buf==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   352
        return 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   353
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   354
    uBackRead = 4;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   355
    while (uBackRead<uMaxBack)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   356
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   357
        uLong uReadSize,uReadPos ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   358
        int i;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   359
        if (uBackRead+BUFREADCOMMENT>uMaxBack)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   360
            uBackRead = uMaxBack;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   361
        else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   362
            uBackRead+=BUFREADCOMMENT;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   363
        uReadPos = uSizeFile-uBackRead ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   364
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   365
        uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   366
                     (BUFREADCOMMENT+4) : (uSizeFile-uReadPos);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   367
        if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   368
            break;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   369
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   370
        if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   371
            break;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   372
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   373
        for (i=(int)uReadSize-3; (i--)>0;)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   374
            if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   375
                ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   376
            {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   377
                uPosFound = uReadPos+i;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   378
                break;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   379
            }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   380
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   381
        if (uPosFound!=0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   382
            break;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   383
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   384
    TRYFREE(buf);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   385
    return uPosFound;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   386
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   387
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   388
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   389
  Open a Zip file. path contain the full pathname (by example,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   390
     on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   391
     "zlib/zlib114.zip".
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   392
     If the zipfile cannot be opened (file doesn't exist or in not valid), the
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   393
       return value is NULL.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   394
     Else, the return value is a unzFile Handle, usable with other function
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   395
       of this unzip package.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   396
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   397
extern unzFile ZEXPORT unzOpen2 (path, pzlib_filefunc_def)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   398
    const char *path;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   399
    zlib_filefunc_def* pzlib_filefunc_def;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   400
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   401
    unz_s us;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   402
    unz_s *s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   403
    uLong central_pos,uL;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   404
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   405
    uLong number_disk;          /* number of the current dist, used for
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   406
                                   spaning ZIP, unsupported, always 0*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   407
    uLong number_disk_with_CD;  /* number the the disk with central dir, used
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   408
                                   for spaning ZIP, unsupported, always 0*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   409
    uLong number_entry_CD;      /* total number of entries in
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   410
                                   the central dir
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   411
                                   (same than number_entry on nospan) */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   412
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   413
    int err=UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   414
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   415
    if (unz_copyright[0]!=' ')
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   416
        return NULL;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   417
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   418
    if (pzlib_filefunc_def==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   419
        fill_fopen_filefunc(&us.z_filefunc);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   420
    else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   421
        us.z_filefunc = *pzlib_filefunc_def;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   422
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   423
    us.filestream= (*(us.z_filefunc.zopen_file))(us.z_filefunc.opaque,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   424
                                                 path,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   425
                                                 ZLIB_FILEFUNC_MODE_READ |
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   426
                                                 ZLIB_FILEFUNC_MODE_EXISTING);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   427
    if (us.filestream==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   428
        return NULL;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   429
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   430
    central_pos = unzlocal_SearchCentralDir(&us.z_filefunc,us.filestream);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   431
    if (central_pos==0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   432
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   433
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   434
    if (ZSEEK(us.z_filefunc, us.filestream,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   435
                                      central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   436
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   437
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   438
    /* the signature, already checked */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   439
    if (unzlocal_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   440
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   441
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   442
    /* number of this disk */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   443
    if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   444
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   445
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   446
    /* number of the disk with the start of the central directory */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   447
    if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   448
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   449
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   450
    /* total number of entries in the central dir on this disk */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   451
    if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   452
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   453
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   454
    /* total number of entries in the central dir */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   455
    if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   456
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   457
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   458
    if ((number_entry_CD!=us.gi.number_entry) ||
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   459
        (number_disk_with_CD!=0) ||
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   460
        (number_disk!=0))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   461
        err=UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   462
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   463
    /* size of the central directory */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   464
    if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   465
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   466
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   467
    /* offset of start of central directory with respect to the
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   468
          starting disk number */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   469
    if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   470
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   471
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   472
    /* zipfile comment length */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   473
    if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   474
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   475
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   476
    if ((central_pos<us.offset_central_dir+us.size_central_dir) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   477
        (err==UNZ_OK))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   478
        err=UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   479
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   480
    if (err!=UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   481
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   482
        ZCLOSE(us.z_filefunc, us.filestream);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   483
        return NULL;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   484
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   485
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   486
    us.byte_before_the_zipfile = central_pos -
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   487
                            (us.offset_central_dir+us.size_central_dir);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   488
    us.central_pos = central_pos;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   489
    us.pfile_in_zip_read = NULL;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   490
    us.encrypted = 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   491
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   492
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   493
    s=(unz_s*)ALLOC(sizeof(unz_s));
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   494
    *s=us;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   495
    unzGoToFirstFile((unzFile)s);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   496
    return (unzFile)s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   497
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   498
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   499
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   500
extern unzFile ZEXPORT unzOpen (path)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   501
    const char *path;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   502
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   503
    return unzOpen2(path, NULL);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   504
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   505
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   506
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   507
  Close a ZipFile opened with unzipOpen.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   508
  If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   509
    these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   510
  return UNZ_OK if there is no problem. */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   511
extern int ZEXPORT unzClose (file)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   512
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   513
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   514
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   515
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   516
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   517
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   518
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   519
    if (s->pfile_in_zip_read!=NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   520
        unzCloseCurrentFile(file);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   521
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   522
    ZCLOSE(s->z_filefunc, s->filestream);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   523
    TRYFREE(s);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   524
    return UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   525
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   526
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   527
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   528
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   529
  Write info about the ZipFile in the *pglobal_info structure.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   530
  No preparation of the structure is needed
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   531
  return UNZ_OK if there is no problem. */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   532
extern int ZEXPORT unzGetGlobalInfo (file,pglobal_info)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   533
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   534
    unz_global_info *pglobal_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   535
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   536
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   537
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   538
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   539
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   540
    *pglobal_info=s->gi;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   541
    return UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   542
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   543
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   544
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   545
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   546
   Translate date/time from Dos format to tm_unz (readable more easilty)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   547
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   548
local void unzlocal_DosDateToTmuDate (ulDosDate, ptm)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   549
    uLong ulDosDate;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   550
    tm_unz* ptm;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   551
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   552
    uLong uDate;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   553
    uDate = (uLong)(ulDosDate>>16);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   554
    ptm->tm_mday = (uInt)(uDate&0x1f) ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   555
    ptm->tm_mon =  (uInt)((((uDate)&0x1E0)/0x20)-1) ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   556
    ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   557
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   558
    ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   559
    ptm->tm_min =  (uInt) ((ulDosDate&0x7E0)/0x20) ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   560
    ptm->tm_sec =  (uInt) (2*(ulDosDate&0x1f)) ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   561
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   562
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   563
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   564
  Get Info about the current file in the zipfile, with internal only info
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   565
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   566
local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   567
                                                  unz_file_info *pfile_info,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   568
                                                  unz_file_info_internal
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   569
                                                  *pfile_info_internal,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   570
                                                  char *szFileName,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   571
                                                  uLong fileNameBufferSize,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   572
                                                  void *extraField,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   573
                                                  uLong extraFieldBufferSize,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   574
                                                  char *szComment,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   575
                                                  uLong commentBufferSize));
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   576
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   577
local int unzlocal_GetCurrentFileInfoInternal (file,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   578
                                              pfile_info,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   579
                                              pfile_info_internal,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   580
                                              szFileName, fileNameBufferSize,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   581
                                              extraField, extraFieldBufferSize,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   582
                                              szComment,  commentBufferSize)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   583
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   584
    unz_file_info *pfile_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   585
    unz_file_info_internal *pfile_info_internal;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   586
    char *szFileName;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   587
    uLong fileNameBufferSize;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   588
    void *extraField;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   589
    uLong extraFieldBufferSize;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   590
    char *szComment;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   591
    uLong commentBufferSize;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   592
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   593
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   594
    unz_file_info file_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   595
    unz_file_info_internal file_info_internal;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   596
    int err=UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   597
    uLong uMagic;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   598
    long lSeek=0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   599
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   600
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   601
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   602
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   603
    if (ZSEEK(s->z_filefunc, s->filestream,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   604
              s->pos_in_central_dir+s->byte_before_the_zipfile,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   605
              ZLIB_FILEFUNC_SEEK_SET)!=0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   606
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   607
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   608
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   609
    /* we check the magic */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   610
    if (err==UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   611
        if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   612
            err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   613
        else if (uMagic!=0x02014b50)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   614
            err=UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   615
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   616
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   617
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   618
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   619
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   620
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   621
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   622
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   623
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   624
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   625
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   626
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   627
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   628
    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   629
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   630
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   631
    unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   632
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   633
    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   634
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   635
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   636
    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   637
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   638
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   639
    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   640
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   641
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   642
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   643
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   644
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   645
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   646
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   647
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   648
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   649
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   650
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   651
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   652
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   653
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   654
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   655
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   656
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   657
    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   658
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   659
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   660
    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   661
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   662
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   663
    lSeek+=file_info.size_filename;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   664
    if ((err==UNZ_OK) && (szFileName!=NULL))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   665
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   666
        uLong uSizeRead ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   667
        if (file_info.size_filename<fileNameBufferSize)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   668
        {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   669
            *(szFileName+file_info.size_filename)='\0';
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   670
            uSizeRead = file_info.size_filename;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   671
        }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   672
        else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   673
            uSizeRead = fileNameBufferSize;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   674
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   675
        if ((file_info.size_filename>0) && (fileNameBufferSize>0))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   676
            if (ZREAD(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   677
                err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   678
        lSeek -= uSizeRead;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   679
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   680
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   681
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   682
    if ((err==UNZ_OK) && (extraField!=NULL))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   683
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   684
        uLong uSizeRead ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   685
        if (file_info.size_file_extra<extraFieldBufferSize)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   686
            uSizeRead = file_info.size_file_extra;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   687
        else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   688
            uSizeRead = extraFieldBufferSize;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   689
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   690
        if (lSeek!=0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   691
            if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   692
                lSeek=0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   693
            else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   694
                err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   695
        if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   696
            if (ZREAD(s->z_filefunc, s->filestream,extraField,uSizeRead)!=uSizeRead)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   697
                err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   698
        lSeek += file_info.size_file_extra - uSizeRead;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   699
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   700
    else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   701
        lSeek+=file_info.size_file_extra;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   702
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   703
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   704
    if ((err==UNZ_OK) && (szComment!=NULL))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   705
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   706
        uLong uSizeRead ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   707
        if (file_info.size_file_comment<commentBufferSize)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   708
        {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   709
            *(szComment+file_info.size_file_comment)='\0';
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   710
            uSizeRead = file_info.size_file_comment;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   711
        }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   712
        else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   713
            uSizeRead = commentBufferSize;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   714
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   715
        if (lSeek!=0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   716
            if (ZSEEK(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   717
                lSeek=0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   718
            else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   719
                err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   720
        if ((file_info.size_file_comment>0) && (commentBufferSize>0))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   721
            if (ZREAD(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   722
                err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   723
        lSeek+=file_info.size_file_comment - uSizeRead;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   724
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   725
    else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   726
        lSeek+=file_info.size_file_comment;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   727
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   728
    if ((err==UNZ_OK) && (pfile_info!=NULL))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   729
        *pfile_info=file_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   730
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   731
    if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   732
        *pfile_info_internal=file_info_internal;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   733
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   734
    return err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   735
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   736
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   737
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   738
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   739
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   740
  Write info about the ZipFile in the *pglobal_info structure.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   741
  No preparation of the structure is needed
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   742
  return UNZ_OK if there is no problem.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   743
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   744
extern int ZEXPORT unzGetCurrentFileInfo (file,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   745
                                          pfile_info,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   746
                                          szFileName, fileNameBufferSize,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   747
                                          extraField, extraFieldBufferSize,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   748
                                          szComment,  commentBufferSize)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   749
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   750
    unz_file_info *pfile_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   751
    char *szFileName;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   752
    uLong fileNameBufferSize;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   753
    void *extraField;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   754
    uLong extraFieldBufferSize;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   755
    char *szComment;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   756
    uLong commentBufferSize;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   757
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   758
    return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   759
                                                szFileName,fileNameBufferSize,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   760
                                                extraField,extraFieldBufferSize,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   761
                                                szComment,commentBufferSize);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   762
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   763
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   764
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   765
  Set the current file of the zipfile to the first file.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   766
  return UNZ_OK if there is no problem
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   767
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   768
extern int ZEXPORT unzGoToFirstFile (file)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   769
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   770
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   771
    int err=UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   772
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   773
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   774
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   775
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   776
    s->pos_in_central_dir=s->offset_central_dir;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   777
    s->num_file=0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   778
    err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   779
                                             &s->cur_file_info_internal,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   780
                                             NULL,0,NULL,0,NULL,0);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   781
    s->current_file_ok = (err == UNZ_OK);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   782
    return err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   783
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   784
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   785
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   786
  Set the current file of the zipfile to the next file.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   787
  return UNZ_OK if there is no problem
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   788
  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   789
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   790
extern int ZEXPORT unzGoToNextFile (file)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   791
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   792
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   793
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   794
    int err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   795
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   796
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   797
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   798
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   799
    if (!s->current_file_ok)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   800
        return UNZ_END_OF_LIST_OF_FILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   801
    if (s->gi.number_entry != 0xffff)    /* 2^16 files overflow hack */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   802
      if (s->num_file+1==s->gi.number_entry)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   803
        return UNZ_END_OF_LIST_OF_FILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   804
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   805
    s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   806
            s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   807
    s->num_file++;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   808
    err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   809
                                               &s->cur_file_info_internal,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   810
                                               NULL,0,NULL,0,NULL,0);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   811
    s->current_file_ok = (err == UNZ_OK);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   812
    return err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   813
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   814
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   815
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   816
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   817
  Try locate the file szFileName in the zipfile.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   818
  For the iCaseSensitivity signification, see unzipStringFileNameCompare
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   819
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   820
  return value :
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   821
  UNZ_OK if the file is found. It becomes the current file.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   822
  UNZ_END_OF_LIST_OF_FILE if the file is not found
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   823
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   824
extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   825
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   826
    const char *szFileName;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   827
    int iCaseSensitivity;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   828
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   829
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   830
    int err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   831
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   832
    /* We remember the 'current' position in the file so that we can jump
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   833
     * back there if we fail.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   834
     */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   835
    unz_file_info cur_file_infoSaved;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   836
    unz_file_info_internal cur_file_info_internalSaved;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   837
    uLong num_fileSaved;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   838
    uLong pos_in_central_dirSaved;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   839
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   840
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   841
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   842
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   843
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   844
    if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   845
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   846
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   847
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   848
    if (!s->current_file_ok)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   849
        return UNZ_END_OF_LIST_OF_FILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   850
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   851
    /* Save the current state */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   852
    num_fileSaved = s->num_file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   853
    pos_in_central_dirSaved = s->pos_in_central_dir;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   854
    cur_file_infoSaved = s->cur_file_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   855
    cur_file_info_internalSaved = s->cur_file_info_internal;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   856
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   857
    err = unzGoToFirstFile(file);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   858
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   859
    while (err == UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   860
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   861
        char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   862
        err = unzGetCurrentFileInfo(file,NULL,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   863
                                    szCurrentFileName,sizeof(szCurrentFileName)-1,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   864
                                    NULL,0,NULL,0);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   865
        if (err == UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   866
        {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   867
            if (unzStringFileNameCompare(szCurrentFileName,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   868
                                            szFileName,iCaseSensitivity)==0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   869
                return UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   870
            err = unzGoToNextFile(file);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   871
        }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   872
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   873
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   874
    /* We failed, so restore the state of the 'current file' to where we
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   875
     * were.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   876
     */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   877
    s->num_file = num_fileSaved ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   878
    s->pos_in_central_dir = pos_in_central_dirSaved ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   879
    s->cur_file_info = cur_file_infoSaved;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   880
    s->cur_file_info_internal = cur_file_info_internalSaved;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   881
    return err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   882
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   883
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   884
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   885
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   886
///////////////////////////////////////////
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   887
// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   888
// I need random access
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   889
//
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   890
// Further optimization could be realized by adding an ability
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   891
// to cache the directory in memory. The goal being a single
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   892
// comprehensive file read to put the file I need in a memory.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   893
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   894
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   895
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   896
typedef struct unz_file_pos_s
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   897
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   898
    uLong pos_in_zip_directory;   // offset in file
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   899
    uLong num_of_file;            // # of file
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   900
} unz_file_pos;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   901
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   902
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   903
extern int ZEXPORT unzGetFilePos(file, file_pos)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   904
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   905
    unz_file_pos* file_pos;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   906
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   907
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   908
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   909
    if (file==NULL || file_pos==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   910
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   911
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   912
    if (!s->current_file_ok)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   913
        return UNZ_END_OF_LIST_OF_FILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   914
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   915
    file_pos->pos_in_zip_directory  = s->pos_in_central_dir;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   916
    file_pos->num_of_file           = s->num_file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   917
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   918
    return UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   919
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   920
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   921
extern int ZEXPORT unzGoToFilePos(file, file_pos)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   922
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   923
    unz_file_pos* file_pos;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   924
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   925
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   926
    int err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   927
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   928
    if (file==NULL || file_pos==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   929
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   930
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   931
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   932
    /* jump to the right spot */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   933
    s->pos_in_central_dir = file_pos->pos_in_zip_directory;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   934
    s->num_file           = file_pos->num_of_file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   935
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   936
    /* set the current file */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   937
    err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   938
                                               &s->cur_file_info_internal,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   939
                                               NULL,0,NULL,0,NULL,0);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   940
    /* return results */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   941
    s->current_file_ok = (err == UNZ_OK);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   942
    return err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   943
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   944
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   945
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   946
// Unzip Helper Functions - should be here?
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   947
///////////////////////////////////////////
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   948
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   949
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   950
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   951
  Read the local header of the current zipfile
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   952
  Check the coherency of the local header and info in the end of central
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   953
        directory about this file
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   954
  store in *piSizeVar the size of extra info in local header
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   955
        (filename and size of extra field data)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   956
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   957
local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   958
                                                    poffset_local_extrafield,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   959
                                                    psize_local_extrafield)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   960
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   961
    uInt* piSizeVar;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   962
    uLong *poffset_local_extrafield;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   963
    uInt  *psize_local_extrafield;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   964
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   965
    uLong uMagic,uData,uFlags;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   966
    uLong size_filename;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   967
    uLong size_extra_field;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   968
    int err=UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   969
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   970
    *piSizeVar = 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   971
    *poffset_local_extrafield = 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   972
    *psize_local_extrafield = 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   973
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   974
    if (ZSEEK(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile +
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   975
                                s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   976
        return UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   977
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   978
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   979
    if (err==UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   980
        if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   981
            err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   982
        else if (uMagic!=0x04034b50)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   983
            err=UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   984
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   985
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   986
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   987
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   988
    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   989
        err=UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   990
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   991
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   992
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   993
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   994
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   995
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   996
    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   997
        err=UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   998
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
   999
    if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1000
                         (s->cur_file_info.compression_method!=Z_DEFLATED))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1001
        err=UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1002
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1003
    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1004
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1005
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1006
    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1007
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1008
    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1009
                              ((uFlags & 8)==0))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1010
        err=UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1011
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1012
    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1013
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1014
    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1015
                              ((uFlags & 8)==0))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1016
        err=UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1017
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1018
    if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1019
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1020
    else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1021
                              ((uFlags & 8)==0))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1022
        err=UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1023
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1024
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1025
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1026
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1027
    else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1028
        err=UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1029
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1030
    *piSizeVar += (uInt)size_filename;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1031
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1032
    if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1033
        err=UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1034
    *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1035
                                    SIZEZIPLOCALHEADER + size_filename;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1036
    *psize_local_extrafield = (uInt)size_extra_field;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1037
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1038
    *piSizeVar += (uInt)size_extra_field;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1039
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1040
    return err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1041
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1042
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1043
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1044
  Open for reading data the current file in the zipfile.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1045
  If there is no error and the file is opened, the return value is UNZ_OK.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1046
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1047
extern int ZEXPORT unzOpenCurrentFile3 (file, method, level, raw, password)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1048
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1049
    int* method;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1050
    int* level;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1051
    int raw;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1052
    const char* password;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1053
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1054
    int err=UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1055
    uInt iSizeVar;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1056
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1057
    file_in_zip_read_info_s* pfile_in_zip_read_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1058
    uLong offset_local_extrafield;  /* offset of the local extra field */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1059
    uInt  size_local_extrafield;    /* size of the local extra field */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1060
#    ifndef NOUNCRYPT
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1061
    char source[12];
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1062
#    else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1063
    if (password != NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1064
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1065
#    endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1066
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1067
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1068
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1069
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1070
    if (!s->current_file_ok)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1071
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1072
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1073
    if (s->pfile_in_zip_read != NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1074
        unzCloseCurrentFile(file);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1075
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1076
    if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1077
                &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1078
        return UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1079
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1080
    pfile_in_zip_read_info = (file_in_zip_read_info_s*)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1081
                                        ALLOC(sizeof(file_in_zip_read_info_s));
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1082
    if (pfile_in_zip_read_info==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1083
        return UNZ_INTERNALERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1084
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1085
    pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1086
    pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1087
    pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1088
    pfile_in_zip_read_info->pos_local_extrafield=0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1089
    pfile_in_zip_read_info->raw=raw;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1090
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1091
    if (pfile_in_zip_read_info->read_buffer==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1092
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1093
        TRYFREE(pfile_in_zip_read_info);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1094
        return UNZ_INTERNALERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1095
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1096
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1097
    pfile_in_zip_read_info->stream_initialised=0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1098
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1099
    if (method!=NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1100
        *method = (int)s->cur_file_info.compression_method;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1101
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1102
    if (level!=NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1103
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1104
        *level = 6;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1105
        switch (s->cur_file_info.flag & 0x06)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1106
        {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1107
          case 6 : *level = 1; break;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1108
          case 4 : *level = 2; break;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1109
          case 2 : *level = 9; break;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1110
        }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1111
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1112
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1113
    if ((s->cur_file_info.compression_method!=0) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1114
        (s->cur_file_info.compression_method!=Z_DEFLATED))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1115
        err=UNZ_BADZIPFILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1116
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1117
    pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1118
    pfile_in_zip_read_info->crc32=0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1119
    pfile_in_zip_read_info->compression_method =
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1120
            s->cur_file_info.compression_method;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1121
    pfile_in_zip_read_info->filestream=s->filestream;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1122
    pfile_in_zip_read_info->z_filefunc=s->z_filefunc;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1123
    pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1124
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1125
    pfile_in_zip_read_info->stream.total_out = 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1126
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1127
    if ((s->cur_file_info.compression_method==Z_DEFLATED) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1128
        (!raw))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1129
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1130
      pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1131
      pfile_in_zip_read_info->stream.zfree = (free_func)0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1132
      pfile_in_zip_read_info->stream.opaque = (voidpf)0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1133
      pfile_in_zip_read_info->stream.next_in = (voidpf)0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1134
      pfile_in_zip_read_info->stream.avail_in = 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1135
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1136
      err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1137
      if (err == Z_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1138
        pfile_in_zip_read_info->stream_initialised=1;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1139
      else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1140
      {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1141
        TRYFREE(pfile_in_zip_read_info);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1142
        return err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1143
      }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1144
        /* windowBits is passed < 0 to tell that there is no zlib header.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1145
         * Note that in this case inflate *requires* an extra "dummy" byte
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1146
         * after the compressed stream in order to complete decompression and
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1147
         * return Z_STREAM_END.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1148
         * In unzip, i don't wait absolutely Z_STREAM_END because I known the
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1149
         * size of both compressed and uncompressed data
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1150
         */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1151
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1152
    pfile_in_zip_read_info->rest_read_compressed =
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1153
            s->cur_file_info.compressed_size ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1154
    pfile_in_zip_read_info->rest_read_uncompressed =
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1155
            s->cur_file_info.uncompressed_size ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1156
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1157
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1158
    pfile_in_zip_read_info->pos_in_zipfile =
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1159
            s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1160
              iSizeVar;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1161
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1162
    pfile_in_zip_read_info->stream.avail_in = (uInt)0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1163
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1164
    s->pfile_in_zip_read = pfile_in_zip_read_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1165
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1166
#    ifndef NOUNCRYPT
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1167
    if (password != NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1168
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1169
        int i;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1170
        s->pcrc_32_tab = get_crc_table();
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1171
        init_keys(password,s->keys,s->pcrc_32_tab);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1172
        if (ZSEEK(s->z_filefunc, s->filestream,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1173
                  s->pfile_in_zip_read->pos_in_zipfile +
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1174
                     s->pfile_in_zip_read->byte_before_the_zipfile,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1175
                  SEEK_SET)!=0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1176
            return UNZ_INTERNALERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1177
        if(ZREAD(s->z_filefunc, s->filestream,source, 12)<12)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1178
            return UNZ_INTERNALERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1179
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1180
        for (i = 0; i<12; i++)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1181
            zdecode(s->keys,s->pcrc_32_tab,source[i]);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1182
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1183
        s->pfile_in_zip_read->pos_in_zipfile+=12;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1184
        s->encrypted=1;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1185
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1186
#    endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1187
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1188
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1189
    return UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1190
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1191
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1192
extern int ZEXPORT unzOpenCurrentFile (file)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1193
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1194
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1195
    return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1196
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1197
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1198
extern int ZEXPORT unzOpenCurrentFilePassword (file, password)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1199
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1200
    const char* password;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1201
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1202
    return unzOpenCurrentFile3(file, NULL, NULL, 0, password);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1203
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1204
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1205
extern int ZEXPORT unzOpenCurrentFile2 (file,method,level,raw)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1206
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1207
    int* method;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1208
    int* level;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1209
    int raw;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1210
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1211
    return unzOpenCurrentFile3(file, method, level, raw, NULL);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1212
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1213
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1214
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1215
  Read bytes from the current file.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1216
  buf contain buffer where data must be copied
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1217
  len the size of buf.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1218
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1219
  return the number of byte copied if somes bytes are copied
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1220
  return 0 if the end of file was reached
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1221
  return <0 with error code if there is an error
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1222
    (UNZ_ERRNO for IO error, or zLib error for uncompress error)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1223
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1224
extern int ZEXPORT unzReadCurrentFile  (file, buf, len)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1225
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1226
    voidp buf;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1227
    unsigned len;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1228
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1229
    int err=UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1230
    uInt iRead = 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1231
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1232
    file_in_zip_read_info_s* pfile_in_zip_read_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1233
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1234
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1235
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1236
    pfile_in_zip_read_info=s->pfile_in_zip_read;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1237
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1238
    if (pfile_in_zip_read_info==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1239
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1240
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1241
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1242
    if ((pfile_in_zip_read_info->read_buffer == NULL))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1243
        return UNZ_END_OF_LIST_OF_FILE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1244
    if (len==0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1245
        return 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1246
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1247
    pfile_in_zip_read_info->stream.next_out = (Bytef*)buf;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1248
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1249
    pfile_in_zip_read_info->stream.avail_out = (uInt)len;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1250
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1251
    if ((len>pfile_in_zip_read_info->rest_read_uncompressed) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1252
        (!(pfile_in_zip_read_info->raw)))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1253
        pfile_in_zip_read_info->stream.avail_out =
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1254
            (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1255
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1256
    if ((len>pfile_in_zip_read_info->rest_read_compressed+
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1257
           pfile_in_zip_read_info->stream.avail_in) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1258
         (pfile_in_zip_read_info->raw))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1259
        pfile_in_zip_read_info->stream.avail_out =
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1260
            (uInt)pfile_in_zip_read_info->rest_read_compressed+
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1261
            pfile_in_zip_read_info->stream.avail_in;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1262
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1263
    while (pfile_in_zip_read_info->stream.avail_out>0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1264
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1265
        if ((pfile_in_zip_read_info->stream.avail_in==0) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1266
            (pfile_in_zip_read_info->rest_read_compressed>0))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1267
        {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1268
            uInt uReadThis = UNZ_BUFSIZE;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1269
            if (pfile_in_zip_read_info->rest_read_compressed<uReadThis)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1270
                uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1271
            if (uReadThis == 0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1272
                return UNZ_EOF;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1273
            if (ZSEEK(pfile_in_zip_read_info->z_filefunc,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1274
                      pfile_in_zip_read_info->filestream,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1275
                      pfile_in_zip_read_info->pos_in_zipfile +
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1276
                         pfile_in_zip_read_info->byte_before_the_zipfile,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1277
                         ZLIB_FILEFUNC_SEEK_SET)!=0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1278
                return UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1279
            if (ZREAD(pfile_in_zip_read_info->z_filefunc,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1280
                      pfile_in_zip_read_info->filestream,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1281
                      pfile_in_zip_read_info->read_buffer,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1282
                      uReadThis)!=uReadThis)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1283
                return UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1284
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1285
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1286
#            ifndef NOUNCRYPT
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1287
            if(s->encrypted)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1288
            {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1289
                uInt i;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1290
                for(i=0;i<uReadThis;i++)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1291
                  pfile_in_zip_read_info->read_buffer[i] =
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1292
                      zdecode(s->keys,s->pcrc_32_tab,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1293
                              pfile_in_zip_read_info->read_buffer[i]);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1294
            }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1295
#            endif
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1296
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1297
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1298
            pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1299
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1300
            pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1301
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1302
            pfile_in_zip_read_info->stream.next_in =
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1303
                (Bytef*)pfile_in_zip_read_info->read_buffer;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1304
            pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1305
        }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1306
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1307
        if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1308
        {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1309
            uInt uDoCopy,i ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1310
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1311
            if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1312
                (pfile_in_zip_read_info->rest_read_compressed == 0))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1313
                return (iRead==0) ? UNZ_EOF : iRead;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1314
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1315
            if (pfile_in_zip_read_info->stream.avail_out <
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1316
                            pfile_in_zip_read_info->stream.avail_in)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1317
                uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1318
            else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1319
                uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1320
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1321
            for (i=0;i<uDoCopy;i++)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1322
                *(pfile_in_zip_read_info->stream.next_out+i) =
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1323
                        *(pfile_in_zip_read_info->stream.next_in+i);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1324
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1325
            pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1326
                                pfile_in_zip_read_info->stream.next_out,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1327
                                uDoCopy);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1328
            pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1329
            pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1330
            pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1331
            pfile_in_zip_read_info->stream.next_out += uDoCopy;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1332
            pfile_in_zip_read_info->stream.next_in += uDoCopy;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1333
            pfile_in_zip_read_info->stream.total_out += uDoCopy;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1334
            iRead += uDoCopy;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1335
        }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1336
        else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1337
        {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1338
            uLong uTotalOutBefore,uTotalOutAfter;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1339
            const Bytef *bufBefore;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1340
            uLong uOutThis;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1341
            int flush=Z_SYNC_FLUSH;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1342
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1343
            uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1344
            bufBefore = pfile_in_zip_read_info->stream.next_out;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1345
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1346
            /*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1347
            if ((pfile_in_zip_read_info->rest_read_uncompressed ==
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1348
                     pfile_in_zip_read_info->stream.avail_out) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1349
                (pfile_in_zip_read_info->rest_read_compressed == 0))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1350
                flush = Z_FINISH;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1351
            */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1352
            err=inflate(&pfile_in_zip_read_info->stream,flush);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1353
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1354
            if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1355
              err = Z_DATA_ERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1356
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1357
            uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1358
            uOutThis = uTotalOutAfter-uTotalOutBefore;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1359
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1360
            pfile_in_zip_read_info->crc32 =
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1361
                crc32(pfile_in_zip_read_info->crc32,bufBefore,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1362
                        (uInt)(uOutThis));
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1363
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1364
            pfile_in_zip_read_info->rest_read_uncompressed -=
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1365
                uOutThis;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1366
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1367
            iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1368
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1369
            if (err==Z_STREAM_END)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1370
                return (iRead==0) ? UNZ_EOF : iRead;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1371
            if (err!=Z_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1372
                break;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1373
        }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1374
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1375
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1376
    if (err==Z_OK)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1377
        return iRead;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1378
    return err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1379
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1380
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1381
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1382
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1383
  Give the current position in uncompressed data
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1384
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1385
extern z_off_t ZEXPORT unztell (file)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1386
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1387
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1388
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1389
    file_in_zip_read_info_s* pfile_in_zip_read_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1390
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1391
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1392
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1393
    pfile_in_zip_read_info=s->pfile_in_zip_read;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1394
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1395
    if (pfile_in_zip_read_info==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1396
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1397
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1398
    return (z_off_t)pfile_in_zip_read_info->stream.total_out;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1399
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1400
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1401
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1402
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1403
  return 1 if the end of file was reached, 0 elsewhere
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1404
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1405
extern int ZEXPORT unzeof (file)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1406
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1407
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1408
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1409
    file_in_zip_read_info_s* pfile_in_zip_read_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1410
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1411
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1412
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1413
    pfile_in_zip_read_info=s->pfile_in_zip_read;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1414
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1415
    if (pfile_in_zip_read_info==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1416
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1417
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1418
    if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1419
        return 1;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1420
    else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1421
        return 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1422
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1423
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1424
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1425
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1426
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1427
  Read extra field from the current file (opened by unzOpenCurrentFile)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1428
  This is the local-header version of the extra field (sometimes, there is
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1429
    more info in the local-header version than in the central-header)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1430
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1431
  if buf==NULL, it return the size of the local extra field that can be read
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1432
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1433
  if buf!=NULL, len is the size of the buffer, the extra header is copied in
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1434
    buf.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1435
  the return value is the number of bytes copied in buf, or (if <0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1436
    the error code
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1437
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1438
extern int ZEXPORT unzGetLocalExtrafield (file,buf,len)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1439
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1440
    voidp buf;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1441
    unsigned len;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1442
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1443
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1444
    file_in_zip_read_info_s* pfile_in_zip_read_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1445
    uInt read_now;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1446
    uLong size_to_read;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1447
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1448
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1449
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1450
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1451
    pfile_in_zip_read_info=s->pfile_in_zip_read;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1452
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1453
    if (pfile_in_zip_read_info==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1454
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1455
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1456
    size_to_read = (pfile_in_zip_read_info->size_local_extrafield -
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1457
                pfile_in_zip_read_info->pos_local_extrafield);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1458
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1459
    if (buf==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1460
        return (int)size_to_read;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1461
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1462
    if (len>size_to_read)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1463
        read_now = (uInt)size_to_read;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1464
    else
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1465
        read_now = (uInt)len ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1466
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1467
    if (read_now==0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1468
        return 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1469
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1470
    if (ZSEEK(pfile_in_zip_read_info->z_filefunc,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1471
              pfile_in_zip_read_info->filestream,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1472
              pfile_in_zip_read_info->offset_local_extrafield +
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1473
              pfile_in_zip_read_info->pos_local_extrafield,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1474
              ZLIB_FILEFUNC_SEEK_SET)!=0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1475
        return UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1476
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1477
    if (ZREAD(pfile_in_zip_read_info->z_filefunc,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1478
              pfile_in_zip_read_info->filestream,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1479
              buf,read_now)!=read_now)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1480
        return UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1481
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1482
    return (int)read_now;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1483
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1484
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1485
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1486
  Close the file in zip opened with unzipOpenCurrentFile
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1487
  Return UNZ_CRCERROR if all the file was read but the CRC is not good
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1488
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1489
extern int ZEXPORT unzCloseCurrentFile (file)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1490
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1491
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1492
    int err=UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1493
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1494
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1495
    file_in_zip_read_info_s* pfile_in_zip_read_info;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1496
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1497
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1498
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1499
    pfile_in_zip_read_info=s->pfile_in_zip_read;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1500
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1501
    if (pfile_in_zip_read_info==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1502
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1503
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1504
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1505
    if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) &&
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1506
        (!pfile_in_zip_read_info->raw))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1507
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1508
        if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1509
            err=UNZ_CRCERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1510
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1511
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1512
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1513
    TRYFREE(pfile_in_zip_read_info->read_buffer);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1514
    pfile_in_zip_read_info->read_buffer = NULL;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1515
    if (pfile_in_zip_read_info->stream_initialised)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1516
        inflateEnd(&pfile_in_zip_read_info->stream);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1517
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1518
    pfile_in_zip_read_info->stream_initialised = 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1519
    TRYFREE(pfile_in_zip_read_info);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1520
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1521
    s->pfile_in_zip_read=NULL;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1522
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1523
    return err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1524
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1525
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1526
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1527
/*
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1528
  Get the global comment string of the ZipFile, in the szComment buffer.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1529
  uSizeBuf is the size of the szComment buffer.
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1530
  return the number of byte copied or an error code <0
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1531
*/
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1532
extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1533
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1534
    char *szComment;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1535
    uLong uSizeBuf;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1536
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1537
    int err=UNZ_OK;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1538
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1539
    uLong uReadThis ;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1540
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1541
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1542
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1543
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1544
    uReadThis = uSizeBuf;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1545
    if (uReadThis>s->gi.size_comment)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1546
        uReadThis = s->gi.size_comment;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1547
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1548
    if (ZSEEK(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1549
        return UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1550
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1551
    if (uReadThis>0)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1552
    {
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1553
      *szComment='\0';
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1554
      if (ZREAD(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1555
        return UNZ_ERRNO;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1556
    }
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1557
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1558
    if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1559
        *(szComment+s->gi.size_comment)='\0';
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1560
    return (int)uReadThis;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1561
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1562
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1563
/* Additions by RX '2004 */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1564
extern uLong ZEXPORT unzGetOffset (file)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1565
    unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1566
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1567
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1568
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1569
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1570
          return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1571
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1572
    if (!s->current_file_ok)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1573
      return 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1574
    if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1575
      if (s->num_file==s->gi.number_entry)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1576
         return 0;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1577
    return s->pos_in_central_dir;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1578
}
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1579
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1580
extern int ZEXPORT unzSetOffset (file, pos)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1581
        unzFile file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1582
        uLong pos;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1583
{
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1584
    unz_s* s;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1585
    int err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1586
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1587
    if (file==NULL)
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1588
        return UNZ_PARAMERROR;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1589
    s=(unz_s*)file;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1590
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1591
    s->pos_in_central_dir = pos;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1592
    s->num_file = s->gi.number_entry;      /* hack */
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1593
    err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1594
                                              &s->cur_file_info_internal,
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1595
                                              NULL,0,NULL,0,NULL,0);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1596
    s->current_file_ok = (err == UNZ_OK);
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1597
    return err;
22878952f6e2 Committing the CodeScanner Core tool
noe\swadi
parents:
diff changeset
  1598
}