archive.h 2.18 KB
Newer Older
1
/*
2 3
  IMPORTANT NOTE: IF THIS FILE IS CHANGED, PCBUILD\BDIST_WININST.VCXPROJ MUST
  BE REBUILT AS WELL.
4

5 6
  IF CHANGES TO THIS FILE ARE CHECKED IN, THE RECOMPILED BINARIES MUST BE
  CHECKED IN AS WELL!
7 8
*/

9 10 11 12 13 14 15
#pragma pack(1)

/* zip-archive headers
 * See: http://www.pkware.com/appnote.html
 */

struct eof_cdir {
16 17 18 19 20 21 22 23
    long tag;           /* must be 0x06054b50 */
    short disknum;
    short firstdisk;
    short nTotalCDirThis;
    short nTotalCDir;
    long nBytesCDir;
    long ofsCDir;
    short commentlen;
24 25 26
};

struct cdir {
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
    long tag;           /* must be 0x02014b50 */
    short version_made;
    short version_extract;
    short gp_bitflag;
    short comp_method;
    short last_mod_file_time;
    short last_mod_file_date;
    long crc32;
    long comp_size;
    long uncomp_size;
    short fname_length;
    short extra_length;
    short comment_length;
    short disknum_start;
    short int_file_attr;
    long ext_file_attr;
    long ofs_local_header;
44 45 46
};

struct fhdr {
47 48 49 50 51 52 53 54 55 56 57
    long tag;           /* must be 0x04034b50 */
    short version_needed;
    short flags;
    short method;
    short last_mod_file_time;
    short last_mod_file_date;
    long crc32;
    long comp_size;
    long uncomp_size;
    short fname_length;
    short extra_length;
58 59 60 61
};


struct meta_data_hdr {
62 63 64
    int tag;
    int uncomp_size;
    int bitmap_size;
65 66 67 68 69 70 71
};

#pragma pack()

/* installation scheme */

typedef struct tagSCHEME {
72 73
    char *name;
    char *prefix;
74 75 76 77 78 79
} SCHEME;

typedef int (*NOTIFYPROC)(int code, LPSTR text, ...);

extern BOOL
extract_file(char *dst, char *src, int method, int comp_size,
80
             int uncomp_size, NOTIFYPROC notify);
81 82 83

extern BOOL
unzip_archive(SCHEME *scheme, char *dirname, char *data,
84
              DWORD size,  NOTIFYPROC notify);
85 86 87

extern char *
map_new_file(DWORD flags, char *filename, char
88 89 90
             *pathname_part, int size,
             WORD wFatDate, WORD wFatTime,
             NOTIFYPROC callback);
91 92 93

extern BOOL
ensure_directory (char *pathname, char *new_part,
94
                  NOTIFYPROC callback);
95 96 97 98 99 100 101 102 103 104

/* codes for NOITIFYPROC */
#define DIR_CREATED 1
#define CAN_OVERWRITE 2
#define FILE_CREATED 3
#define ZLIB_ERROR 4
#define SYSTEM_ERROR 5
#define NUM_FILES 6
#define FILE_OVERWRITTEN 7