Browse Source

- update to 0.9 (torrentzip support, files open only when necessary), windows fixes

experimental/first_unicode_implementation
Pierre Joye 18 years ago
parent
commit
8af38667e6
  1. 4
      ext/zip/config.w32
  2. 117
      ext/zip/lib/zip.h
  3. 12
      ext/zip/lib/zip_add.c
  4. 9
      ext/zip/lib/zip_add_dir.c
  5. 279
      ext/zip/lib/zip_close.c
  6. 9
      ext/zip/lib/zip_delete.c
  7. 102
      ext/zip/lib/zip_dirent.c
  8. 9
      ext/zip/lib/zip_entry_free.c
  9. 9
      ext/zip/lib/zip_entry_new.c
  10. 4
      ext/zip/lib/zip_err_str.c
  11. 19
      ext/zip/lib/zip_error.c
  12. 9
      ext/zip/lib/zip_error_clear.c
  13. 9
      ext/zip/lib/zip_error_get.c
  14. 9
      ext/zip/lib/zip_error_get_sys_type.c
  15. 19
      ext/zip/lib/zip_error_strerror.c
  16. 9
      ext/zip/lib/zip_error_to_str.c
  17. 24
      ext/zip/lib/zip_fclose.c
  18. 9
      ext/zip/lib/zip_file_error_clear.c
  19. 9
      ext/zip/lib/zip_file_error_get.c
  20. 14
      ext/zip/lib/zip_file_get_offset.c
  21. 9
      ext/zip/lib/zip_file_strerror.c
  22. 71
      ext/zip/lib/zip_filerange_crc.c
  23. 9
      ext/zip/lib/zip_fopen.c
  24. 13
      ext/zip/lib/zip_fopen_index.c
  25. 11
      ext/zip/lib/zip_fread.c
  26. 13
      ext/zip/lib/zip_free.c
  27. 24
      ext/zip/lib/zip_get_archive_comment.c
  28. 48
      ext/zip/lib/zip_get_archive_flag.c
  29. 9
      ext/zip/lib/zip_get_file_comment.c
  30. 11
      ext/zip/lib/zip_get_name.c
  31. 9
      ext/zip/lib/zip_get_num_files.c
  32. 9
      ext/zip/lib/zip_memdup.c
  33. 25
      ext/zip/lib/zip_name_locate.c
  34. 11
      ext/zip/lib/zip_new.c
  35. 372
      ext/zip/lib/zip_open.c
  36. 27
      ext/zip/lib/zip_rename.c
  37. 28
      ext/zip/lib/zip_replace.c
  38. 11
      ext/zip/lib/zip_set_archive_comment.c
  39. 49
      ext/zip/lib/zip_set_archive_flag.c
  40. 9
      ext/zip/lib/zip_set_file_comment.c
  41. 10
      ext/zip/lib/zip_set_name.c
  42. 13
      ext/zip/lib/zip_source_buffer.c
  43. 28
      ext/zip/lib/zip_source_file.c
  44. 58
      ext/zip/lib/zip_source_filep.c
  45. 9
      ext/zip/lib/zip_source_free.c
  46. 9
      ext/zip/lib/zip_source_function.c
  47. 13
      ext/zip/lib/zip_source_zip.c
  48. 9
      ext/zip/lib/zip_stat.c
  49. 11
      ext/zip/lib/zip_stat_index.c
  50. 8
      ext/zip/lib/zip_stat_init.c
  51. 10
      ext/zip/lib/zip_strerror.c
  52. 12
      ext/zip/lib/zip_unchange.c
  53. 12
      ext/zip/lib/zip_unchange_all.c
  54. 12
      ext/zip/lib/zip_unchange_archive.c
  55. 6
      ext/zip/lib/zip_unchange_data.c
  56. 9
      ext/zip/lib/zip_win32.h
  57. 125
      ext/zip/lib/zipint.h

4
ext/zip/config.w32

@ -17,7 +17,8 @@ if (PHP_ZIP != "no") {
zip_error_get_sys_type.c zip_file_get_offset.c \
zip_get_name.c zip_replace.c zip_source_function.c \
zip_unchange.c zip_dirent.c zip_error_strerror.c \
zip_file_strerror.c zip_get_num_files.c \
zip_filerange_crc.c zip_file_strerror.c zip_get_num_files.c \
zip_get_archive_flag.c zip_set_archive_flag.c \
zip_set_name.c zip_source_zip.c zip_unchange_data.c \
zip_entry_free.c zip_error_to_str.c zip_fopen.c \
zip_name_locate.c zip_source_buffer.c zip_stat.c \
@ -27,7 +28,6 @@ if (PHP_ZIP != "no") {
zip_set_archive_comment.c zip_set_file_comment.c \
zip_unchange_archive.c zip_memdup.c zip_stat_init.c \
zip_add_dir.c zip_file_error_clear.c zip_error_clear.c", "zip");
AC_DEFINE('HAVE_ZIP', 1);
} else {
WARNING("zip not enabled; libraries and headers not found");

117
ext/zip/lib/zip.h

@ -2,13 +2,11 @@
#define _HAD_ZIP_H
/*
$NiH: zip.h,v 1.57 2007/04/24 14:04:19 dillo Exp $
zip.h -- exported declarations.
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -22,7 +20,7 @@
3. The names of the authors may not be used to endorse or promote
products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -38,26 +36,26 @@
#include "main/php.h"
/* #defines that rename all zip_ functions and structs */
#include "zip_alias.h"
#ifdef PHP_WIN32
# include "zip_win32.h"
# ifdef PHP_ZIP_EXPORTS
# define PHPZIPAPI __declspec(dllexport)
# define ZIP_EXTERN(rt) __declspec(dllexport)rt _stdcall
# else
# define PHPZIPAPI
# define ZIP_EXTERN(rt) rt
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHPZIPAPI __attribute__ ((visibility("default")))
# define ZIP_EXTERN(rt) __attribute__ ((visibility("default"))) rt
#else
# define PHPZIPAPI
# define ZIP_EXTERN(rt) rt
#endif
BEGIN_EXTERN_C()
#include <sys/types.h>
#include <stdio.h>
#include <time.h>
/* flags for zip_open */
#define ZIP_CREATE 1
@ -72,6 +70,11 @@ BEGIN_EXTERN_C()
#define ZIP_FL_NODIR 2 /* ignore directory component */
#define ZIP_FL_COMPRESSED 4 /* read compressed data */
#define ZIP_FL_UNCHANGED 8 /* use original data, ignoring changes */
#define ZIP_FL_RECOMPRESS 16 /* force recompression of data */
/* archive global flags flags */
#define ZIP_AFL_TORRENT 1 /* torrent zipped */
/* libzip error codes */
@ -123,6 +126,13 @@ BEGIN_EXTERN_C()
#define ZIP_CM_PKWARE_IMPLODE 10 /* PKWARE imploding */
/* 11 - Reserved by PKWARE */
#define ZIP_CM_BZIP2 12 /* compressed using BZIP2 algorithm */
/* 13 - Reserved by PKWARE */
#define ZIP_CM_LZMA 14 /* LZMA (EFS) */
/* 15-17 - Reserved by PKWARE */
#define ZIP_CM_TERSE 18 /* compressed using IBM TERSE (new) */
#define ZIP_CM_LZ77 19 /* IBM LZ77 z Architecture (PFS) */
#define ZIP_CM_WAVPACK 97 /* WavPack compressed data */
#define ZIP_CM_PPMD 98 /* PPMd version I, Rev 1 */
/* encryption methods */
@ -172,46 +182,51 @@ struct zip_source;
PHPZIPAPI int zip_add(struct zip *, const char *, struct zip_source *);
PHPZIPAPI int zip_add_dir(struct zip *, const char *);
PHPZIPAPI int zip_close(struct zip *);
PHPZIPAPI int zip_delete(struct zip *, int);
PHPZIPAPI void zip_error_clear(struct zip *);
PHPZIPAPI void zip_error_get(struct zip *, int *, int *);
PHPZIPAPI int zip_error_get_sys_type(int);
PHPZIPAPI int zip_error_to_str(char *, size_t, int, int);
PHPZIPAPI int zip_fclose(struct zip_file *);
PHPZIPAPI void zip_file_error_clear(struct zip_file *);
PHPZIPAPI void zip_file_error_get(struct zip_file *, int *, int *);
PHPZIPAPI const char *zip_file_strerror(struct zip_file *);
PHPZIPAPI struct zip_file *zip_fopen(struct zip *, const char *, int);
PHPZIPAPI struct zip_file *zip_fopen_index(struct zip *, int, int);
PHPZIPAPI ssize_t zip_fread(struct zip_file *, void *, size_t);
PHPZIPAPI const char *zip_get_archive_comment(struct zip *, int *, int);
PHPZIPAPI const char *zip_get_file_comment(struct zip *, int, int *, int);
PHPZIPAPI const char *zip_get_name(struct zip *, int, int);
PHPZIPAPI int zip_get_num_files(struct zip *);
PHPZIPAPI int zip_name_locate(struct zip *, const char *, int);
PHPZIPAPI struct zip *zip_open(const char *, int, int *);
PHPZIPAPI int zip_rename(struct zip *, int, const char *);
PHPZIPAPI int zip_replace(struct zip *, int, struct zip_source *);
PHPZIPAPI int zip_set_archive_comment(struct zip *, const char *, int);
PHPZIPAPI int zip_set_file_comment(struct zip *, int, const char *, int);
PHPZIPAPI struct zip_source *zip_source_buffer(struct zip *, const void *, off_t, int);
PHPZIPAPI struct zip_source *zip_source_file(struct zip *, const char *, off_t, off_t);
PHPZIPAPI struct zip_source *zip_source_filep(struct zip *, FILE *, off_t, off_t);
PHPZIPAPI void zip_source_free(struct zip_source *);
PHPZIPAPI struct zip_source *zip_source_function(struct zip *,
zip_source_callback, void *);
PHPZIPAPI struct zip_source *zip_source_zip(struct zip *, struct zip *, int, int,
off_t, off_t);
PHPZIPAPI int zip_stat(struct zip *, const char *, int, struct zip_stat *);
PHPZIPAPI int zip_stat_index(struct zip *, int, int, struct zip_stat *);
PHPZIPAPI void zip_stat_init(struct zip_stat *);
PHPZIPAPI const char *zip_strerror(struct zip *);
PHPZIPAPI int zip_unchange(struct zip *, int);
PHPZIPAPI int zip_unchange_all(struct zip *);
PHPZIPAPI int zip_unchange_archive(struct zip *);
ZIP_EXTERN(int) zip_add(struct zip *, const char *, struct zip_source *);
ZIP_EXTERN(int) zip_add_dir(struct zip *, const char *);
ZIP_EXTERN(int) zip_close(struct zip *);
ZIP_EXTERN(int) zip_delete(struct zip *, int);
ZIP_EXTERN(void) zip_error_clear(struct zip *);
ZIP_EXTERN(void) zip_error_get(struct zip *, int *, int *);
ZIP_EXTERN(int) zip_error_get_sys_type(int);
ZIP_EXTERN(int) zip_error_to_str(char *, size_t, int, int);
ZIP_EXTERN(int) zip_fclose(struct zip_file *);
ZIP_EXTERN(void) zip_file_error_clear(struct zip_file *);
ZIP_EXTERN(void) zip_file_error_get(struct zip_file *, int *, int *);
ZIP_EXTERN(const char *)zip_file_strerror(struct zip_file *);
ZIP_EXTERN(struct zip_file *)zip_fopen(struct zip *, const char *, int);
ZIP_EXTERN(struct zip_file *)zip_fopen_index(struct zip *, int, int);
ZIP_EXTERN(ssize_t) zip_fread(struct zip_file *, void *, size_t);
ZIP_EXTERN(const char *)zip_get_archive_comment(struct zip *, int *, int);
ZIP_EXTERN(int) zip_get_archive_flag(struct zip *, int, int);
ZIP_EXTERN(const char *)zip_get_file_comment(struct zip *, int, int *, int);
ZIP_EXTERN(const char *)zip_get_name(struct zip *, int, int);
ZIP_EXTERN(int) zip_get_num_files(struct zip *);
ZIP_EXTERN(int) zip_name_locate(struct zip *, const char *, int);
ZIP_EXTERN(struct zip *)zip_open(const char *, int, int *);
ZIP_EXTERN(int) zip_rename(struct zip *, int, const char *);
ZIP_EXTERN(int) zip_replace(struct zip *, int, struct zip_source *);
ZIP_EXTERN(int) zip_set_archive_comment(struct zip *, const char *, int);
ZIP_EXTERN(int) zip_set_archive_flag(struct zip *, int, int);
ZIP_EXTERN(int) zip_set_file_comment(struct zip *, int, const char *, int);
ZIP_EXTERN(struct zip_source *)zip_source_buffer(struct zip *, const void *,
off_t, int);
ZIP_EXTERN(struct zip_source *)zip_source_file(struct zip *, const char *,
off_t, off_t);
ZIP_EXTERN(struct zip_source *)zip_source_filep(struct zip *, FILE *,
off_t, off_t);
ZIP_EXTERN(void) zip_source_free(struct zip_source *);
ZIP_EXTERN(struct zip_source *)zip_source_function(struct zip *,
zip_source_callback, void *);
ZIP_EXTERN(struct zip_source *)zip_source_zip(struct zip *, struct zip *,
int, int, off_t, off_t);
ZIP_EXTERN(int) zip_stat(struct zip *, const char *, int, struct zip_stat *);
ZIP_EXTERN(int) zip_stat_index(struct zip *, int, int, struct zip_stat *);
ZIP_EXTERN(void) zip_stat_init(struct zip_stat *);
ZIP_EXTERN(const char *)zip_strerror(struct zip *);
ZIP_EXTERN(int) zip_unchange(struct zip *, int);
ZIP_EXTERN(int) zip_unchange_all(struct zip *);
ZIP_EXTERN(int) zip_unchange_archive(struct zip *);
END_EXTERN_C();
#endif /* _HAD_ZIP_H */

12
ext/zip/lib/zip_add.c

@ -1,11 +1,9 @@
/*
$NiH: zip_add.c,v 1.14 2004/11/18 15:04:04 wiz Exp $
zip_add.c -- add file via callback function
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -19,7 +17,7 @@
3. The names of the authors may not be used to endorse or promote
products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -35,17 +33,17 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_add(struct zip *za, const char *name, struct zip_source *source)
{
if (name == NULL || source == NULL) {
_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
return -1;
}
return _zip_replace(za, -1, name, source);
}

9
ext/zip/lib/zip_add_dir.c

@ -1,11 +1,9 @@
/*
$NiH: zip_add_dir.c,v 1.1 2007/10/03 12:23:13 dillo Exp $
zip_add_dir.c -- add directory
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -38,12 +36,11 @@
#include <stdlib.h>
#include <string.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_add_dir(struct zip *za, const char *name)
{
int len, ret;

279
ext/zip/lib/zip_close.c

@ -1,11 +1,9 @@
/*
$NiH: zip_close.c,v 1.60 2007/05/09 17:21:47 wiz Exp $
zip_close.c -- close zip archive and update changes
Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -32,31 +30,42 @@
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#ifndef _MSC_VER
#include <unistd.h>
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include "zip.h"
#include "zipint.h"
static int add_data(struct zip *, int, struct zip_dirent *, FILE *);
static int add_data(struct zip *, struct zip_source *, struct zip_dirent *,
FILE *);
static int add_data_comp(zip_source_callback, void *, struct zip_stat *,
FILE *, struct zip_error *);
static int add_data_uncomp(zip_source_callback, void *, struct zip_stat *,
FILE *, struct zip_error *);
static int add_data_uncomp(struct zip *, zip_source_callback, void *,
struct zip_stat *, FILE *);
static void ch_set_error(struct zip_error *, zip_source_callback, void *);
static int copy_data(FILE *, off_t, FILE *, struct zip_error *);
static int write_cdir(struct zip *, struct zip_cdir *, FILE *);
static int _zip_cdir_set_comment(struct zip_cdir *, struct zip *);
static int _zip_changed(struct zip *, int *);
static char *_zip_create_temp_output(struct zip *, FILE **);
static int _zip_torrentzip_cmp(const void *, const void *);
PHPZIPAPI int
struct filelist {
int idx;
const char *name;
};
ZIP_EXTERN(int)
zip_close(struct zip *za)
{
int survivors;
@ -66,7 +75,14 @@ zip_close(struct zip *za)
mode_t mask;
struct zip_cdir *cd;
struct zip_dirent de;
int rename_error = 0;
struct filelist *filelist;
int reopen_on_error;
int new_torrentzip;
reopen_on_error = 0;
if (za == NULL)
return -1;
if (!_zip_changed(za, &survivors)) {
_zip_free(za);
@ -75,7 +91,7 @@ zip_close(struct zip *za)
/* don't create zip files with no entries */
if (survivors == 0) {
if (za->zn) {
if (za->zn && za->zp) {
if (remove(za->zn) != 0) {
_zip_error_set(&za->error, ZIP_ER_REMOVE, errno);
return -1;
@ -85,52 +101,92 @@ zip_close(struct zip *za)
return 0;
}
if ((cd=_zip_cdir_new(survivors, &za->error)) == NULL)
if ((filelist=(struct filelist *)malloc(sizeof(filelist[0])*survivors))
== NULL)
return -1;
if ((cd=_zip_cdir_new(survivors, &za->error)) == NULL) {
free(filelist);
return -1;
}
for (i=0; i<survivors; i++)
_zip_dirent_init(&cd->entry[i]);
/* archive comment is special for torrentzip */
if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0)) {
cd->comment = _zip_memdup(TORRENT_SIG "XXXXXXXX",
TORRENT_SIG_LEN + TORRENT_CRC_LEN,
&za->error);
if (cd->comment == NULL) {
_zip_cdir_free(cd);
free(filelist);
return -1;
}
cd->comment_len = TORRENT_SIG_LEN + TORRENT_CRC_LEN;
}
else if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, ZIP_FL_UNCHANGED) == 0) {
if (_zip_cdir_set_comment(cd, za) == -1) {
_zip_cdir_free(cd);
free(filelist);
return -1;
}
}
if ((temp=_zip_create_temp_output(za, &out)) == NULL) {
_zip_cdir_free(cd);
return -1;
}
error = 0;
/* create list of files with index into original archive */
for (i=j=0; i<za->nentry; i++) {
if (za->entry[i].state == ZIP_ST_DELETED)
continue;
filelist[j].idx = i;
filelist[j].name = zip_get_name(za, i, 0);
j++;
}
if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
qsort(filelist, survivors, sizeof(filelist[0]),
_zip_torrentzip_cmp);
new_torrentzip = (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0) == 1
&& zip_get_archive_flag(za, ZIP_AFL_TORRENT,
ZIP_FL_UNCHANGED) == 0);
error = 0;
for (j=0; j<survivors; j++) {
i = filelist[j].idx;
/* create new local directory entry */
if (ZIP_ENTRY_DATA_CHANGED(za->entry+i)) {
if (ZIP_ENTRY_DATA_CHANGED(za->entry+i) || new_torrentzip) {
_zip_dirent_init(&de);
if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
_zip_dirent_torrent_normalize(&de);
/* use it as central directory entry */
memcpy(cd->entry+j, &de, sizeof(cd->entry[j]));
/* set/update file name */
if (za->entry[i].ch_filename == NULL) {
if (za->entry[i].state == ZIP_ST_REPLACED) {
de.filename = strdup(za->cdir->entry[i].filename);
de.filename_len = strlen(de.filename);
cd->entry[j].filename = za->cdir->entry[i].filename;
cd->entry[j].filename_len = de.filename_len;
}
else {
if (za->entry[i].state == ZIP_ST_ADDED) {
de.filename = strdup("-");
de.filename_len = 1;
cd->entry[j].filename = "-";
}
else {
de.filename = strdup(za->cdir->entry[i].filename);
de.filename_len = strlen(de.filename);
cd->entry[j].filename = za->cdir->entry[i].filename;
cd->entry[j].filename_len = de.filename_len;
}
}
}
else {
/* copy existing directory entries */
if (fseek(za->zp, za->cdir->entry[i].offset, SEEK_SET) != 0) {
if (fseeko(za->zp, za->cdir->entry[i].offset, SEEK_SET) != 0) {
_zip_error_set(&za->error, ZIP_ER_SEEK, errno);
error = 1;
break;
@ -139,12 +195,12 @@ zip_close(struct zip *za)
error = 1;
break;
}
if (de.bitflags & ZIP_GPBF_USE_DATA_DESCRIPTOR) {
de.crc = (za->cdir->entry+i)->crc;
de.comp_size = (za->cdir->entry+i)->comp_size;
de.uncomp_size = (za->cdir->entry+i)->uncomp_size;
}
if (de.bitflags & ZIP_GPBF_DATA_DESCRIPTOR) {
de.crc = za->cdir->entry[i].crc;
de.comp_size = za->cdir->entry[i].comp_size;
de.uncomp_size = za->cdir->entry[i].uncomp_size;
de.bitflags &= ~ZIP_GPBF_DATA_DESCRIPTOR;
}
memcpy(cd->entry+j, za->cdir->entry+i, sizeof(cd->entry[j]));
}
@ -159,20 +215,31 @@ zip_close(struct zip *za)
cd->entry[j].filename_len = de.filename_len;
}
if (za->entry[i].ch_comment_len != -1) {
if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0) == 0
&& za->entry[i].ch_comment_len != -1) {
/* as the rest of cd entries, its malloc/free is done by za */
cd->entry[j].comment = za->entry[i].ch_comment;
cd->entry[j].comment_len = za->entry[i].ch_comment_len;
}
cd->entry[j].offset = ftell(out);
cd->entry[j].offset = ftello(out);
if (ZIP_ENTRY_DATA_CHANGED(za->entry+i) || new_torrentzip) {
struct zip_source *zs;
if (ZIP_ENTRY_DATA_CHANGED(za->entry+i)) {
if (add_data(za, i, &de, out) < 0) {
zs = NULL;
if (!ZIP_ENTRY_DATA_CHANGED(za->entry+i)) {
if ((zs=zip_source_zip(za, za, i, ZIP_FL_RECOMPRESS, 0, -1))
== NULL) {
error = 1;
break;
}
}
if (add_data(za, zs ? zs : za->entry[i].source, &de, out) < 0) {
error = 1;
break;
}
cd->entry[j].last_mod = de.last_mod;
cd->entry[j].comp_method = de.comp_method;
cd->entry[j].comp_size = de.comp_size;
@ -185,19 +252,18 @@ zip_close(struct zip *za)
break;
}
/* we just read the local dirent, file is at correct position */
if (copy_data(za->zp, de.comp_size, out, &za->error) < 0) {
if (copy_data(za->zp, cd->entry[j].comp_size, out,
&za->error) < 0) {
error = 1;
break;
}
}
j++;
_zip_dirent_finalize(&de);
}
if (!error) {
if (_zip_cdir_write(cd, out, &za->error) < 0)
if (write_cdir(za, cd, out) < 0)
error = 1;
}
@ -220,49 +286,43 @@ zip_close(struct zip *za)
return -1;
}
if (za->zp) {
if (za->zp) {
fclose(za->zp);
za->zp = NULL;
reopen_on_error = 1;
}
#ifdef PHP_WIN32
if (!MoveFileEx(temp, za->zn, MOVEFILE_REPLACE_EXISTING)) {
rename_error = -1;
}
#else
if (rename(temp, za->zn) != 0) {
rename_error = -1;
}
#endif
if (rename_error < 0) {
_zip_error_set(&za->error, ZIP_ER_RENAME, errno);
remove(temp);
free(temp);
return -1;
if (_zip_rename(temp, za->zn) != 0) {
_zip_error_set(&za->error, ZIP_ER_RENAME, errno);
remove(temp);
free(temp);
if (reopen_on_error) {
/* ignore errors, since we're already in an error case */
za->zp = fopen(za->zn, "rb");
}
return -1;
}
mask = umask(0);
umask(mask);
chmod(za->zn, 0666&~mask);
_zip_free(za);
free(temp);
free(temp);
return 0;
}
static int
add_data(struct zip *za, int idx, struct zip_dirent *de, FILE *ft)
add_data(struct zip *za, struct zip_source *zs, struct zip_dirent *de, FILE *ft)
{
off_t offstart, offend;
zip_source_callback cb;
void *ud;
struct zip_stat st;
cb = za->entry[idx].source->f;
ud = za->entry[idx].source->ud;
cb = zs->f;
ud = zs->ud;
if (cb(ud, &st, sizeof(st), ZIP_SOURCE_STAT) < (ssize_t)sizeof(st)) {
ch_set_error(&za->error, cb, ud);
@ -274,7 +334,7 @@ add_data(struct zip *za, int idx, struct zip_dirent *de, FILE *ft)
return -1;
}
offstart = ftell(ft);
offstart = ftello(ft);
if (_zip_dirent_write(de, ft, 1, &za->error) < 0)
return -1;
@ -284,7 +344,7 @@ add_data(struct zip *za, int idx, struct zip_dirent *de, FILE *ft)
return -1;
}
else {
if (add_data_uncomp(cb, ud, &st, ft, &za->error) < 0)
if (add_data_uncomp(za, cb, ud, &st, ft) < 0)
return -1;
}
@ -293,23 +353,27 @@ add_data(struct zip *za, int idx, struct zip_dirent *de, FILE *ft)
return -1;
}
offend = ftell(ft);
offend = ftello(ft);
if (fseek(ft, offstart, SEEK_SET) < 0) {
if (fseeko(ft, offstart, SEEK_SET) < 0) {
_zip_error_set(&za->error, ZIP_ER_SEEK, errno);
return -1;
}
de->comp_method = st.comp_method;
de->last_mod = st.mtime;
de->comp_method = st.comp_method;
de->crc = st.crc;
de->uncomp_size = st.size;
de->comp_size = st.comp_size;
if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
_zip_dirent_torrent_normalize(de);
if (_zip_dirent_write(de, ft, 1, &za->error) < 0)
return -1;
if (fseek(ft, offend, SEEK_SET) < 0) {
if (fseeko(ft, offend, SEEK_SET) < 0) {
_zip_error_set(&za->error, ZIP_ER_SEEK, errno);
return -1;
}
@ -346,14 +410,15 @@ add_data_comp(zip_source_callback cb, void *ud, struct zip_stat *st,FILE *ft,
static int
add_data_uncomp(zip_source_callback cb, void *ud, struct zip_stat *st,
FILE *ft, struct zip_error *error)
add_data_uncomp(struct zip *za, zip_source_callback cb, void *ud,
struct zip_stat *st, FILE *ft)
{
char b1[BUFSIZE], b2[BUFSIZE];
int end, flush, ret;
ssize_t n;
size_t n2;
z_stream zstr;
int mem_level;
st->comp_method = ZIP_CM_DEFLATE;
st->comp_size = st->size = 0;
@ -365,8 +430,13 @@ add_data_uncomp(zip_source_callback cb, void *ud, struct zip_stat *st,
zstr.avail_in = 0;
zstr.avail_out = 0;
/* -15: undocumented feature of zlib to _not_ write a zlib header */
deflateInit2(&zstr, Z_BEST_COMPRESSION, Z_DEFLATED, -15, 9,
if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0))
mem_level = TORRENT_MEM_LEVEL;
else
mem_level = MAX_MEM_LEVEL;
/* -MAX_WBITS: undocumented feature of zlib to _not_ write a zlib header */
deflateInit2(&zstr, Z_BEST_COMPRESSION, Z_DEFLATED, -MAX_WBITS, mem_level,
Z_DEFAULT_STRATEGY);
zstr.next_out = (Bytef *)b2;
@ -378,7 +448,7 @@ add_data_uncomp(zip_source_callback cb, void *ud, struct zip_stat *st,
while (!end) {
if (zstr.avail_in == 0 && !flush) {
if ((n=cb(ud, b1, sizeof(b1), ZIP_SOURCE_READ)) < 0) {
ch_set_error(error, cb, ud);
ch_set_error(&za->error, cb, ud);
deflateEnd(&zstr);
return -1;
}
@ -394,7 +464,7 @@ add_data_uncomp(zip_source_callback cb, void *ud, struct zip_stat *st,
ret = deflate(&zstr, flush);
if (ret != Z_OK && ret != Z_STREAM_END) {
_zip_error_set(error, ZIP_ER_ZLIB, ret);
_zip_error_set(&za->error, ZIP_ER_ZLIB, ret);
return -1;
}
@ -402,7 +472,7 @@ add_data_uncomp(zip_source_callback cb, void *ud, struct zip_stat *st,
n2 = sizeof(b2) - zstr.avail_out;
if (fwrite(b2, 1, n2, ft) != n2) {
_zip_error_set(error, ZIP_ER_WRITE, errno);
_zip_error_set(&za->error, ZIP_ER_WRITE, errno);
return -1;
}
@ -472,6 +542,44 @@ copy_data(FILE *fs, off_t len, FILE *ft, struct zip_error *error)
static int
write_cdir(struct zip *za, struct zip_cdir *cd, FILE *out)
{
off_t offset;
uLong crc;
char buf[TORRENT_CRC_LEN+1];
if (_zip_cdir_write(cd, out, &za->error) < 0)
return -1;
if (zip_get_archive_flag(za, ZIP_AFL_TORRENT, 0) == 0)
return 0;
/* fix up torrentzip comment */
offset = ftello(out);
if (_zip_filerange_crc(out, cd->offset, cd->size, &crc, &za->error) < 0)
return -1;
snprintf(buf, sizeof(buf), "%08lX", (long)crc);
if (fseeko(out, offset-TORRENT_CRC_LEN, SEEK_SET) < 0) {
_zip_error_set(&za->error, ZIP_ER_SEEK, errno);
return -1;
}
if (fwrite(buf, TORRENT_CRC_LEN, 1, out) != 1) {
_zip_error_set(&za->error, ZIP_ER_WRITE, errno);
return -1;
}
return 0;
}
static int
_zip_cdir_set_comment(struct zip_cdir *dest, struct zip *src)
{
@ -503,7 +611,8 @@ _zip_changed(struct zip *za, int *survivorsp)
changed = survivors = 0;
if (za->ch_comment_len != -1)
if (za->ch_comment_len != -1
|| za->ch_flags != za->flags)
changed = 1;
for (i=0; i<za->nentry; i++) {
@ -528,14 +637,12 @@ _zip_create_temp_output(struct zip *za, FILE **outp)
int tfd;
FILE *tfp;
int len = strlen(za->zn) + 8;
if ((temp=(char *)malloc(len)) == NULL) {
if ((temp=(char *)malloc(strlen(za->zn)+8)) == NULL) {
_zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
return NULL;
}
snprintf(temp, len, "%s.XXXXXX", za->zn);
sprintf(temp, "%s.XXXXXX", za->zn);
if ((tfd=mkstemp(temp)) == -1) {
_zip_error_set(&za->error, ZIP_ER_TMPOPEN, errno);
@ -550,10 +657,16 @@ _zip_create_temp_output(struct zip *za, FILE **outp)
free(temp);
return NULL;
}
#ifdef PHP_WIN32
_setmode(_fileno(tfp), _O_BINARY );
#endif
*outp = tfp;
return temp;
}
static int
_zip_torrentzip_cmp(const void *a, const void *b)
{
return strcasecmp(((const struct filelist *)a)->name,
((const struct filelist *)b)->name);
}

9
ext/zip/lib/zip_delete.c

@ -1,11 +1,9 @@
/*
$NiH: zip_delete.c,v 1.17 2005/06/09 19:57:09 dillo Exp $
zip_delete.c -- delete file from zip archive
Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_delete(struct zip *za, int idx)
{
if (idx < 0 || idx >= za->nentry) {

102
ext/zip/lib/zip_dirent.c

@ -1,11 +1,9 @@
/*
$NiH: zip_dirent.c,v 1.9 2007/04/23 14:51:45 wiz Exp $
zip_dirent.c -- read directory entry (local or central), clean dirent
Copyright (C) 1999, 2003, 2004, 2005 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -33,19 +31,16 @@
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#ifndef _MSC_VER
#include <unistd.h>
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include "zip.h"
#include "zipint.h"
#include "main/php_reentrancy.h"
static time_t _zip_d2u_time(int, int);
static char *_zip_readfpstr(FILE *, unsigned int, int, struct zip_error *);
@ -56,7 +51,7 @@ static void _zip_write4(unsigned int, FILE *);
PHPZIPAPI void
void
_zip_cdir_free(struct zip_cdir *cd)
{
int i;
@ -73,7 +68,7 @@ _zip_cdir_free(struct zip_cdir *cd)
PHPZIPAPI struct zip_cdir *
struct zip_cdir *
_zip_cdir_new(int nentry, struct zip_error *error)
{
struct zip_cdir *cd;
@ -102,19 +97,19 @@ _zip_cdir_new(int nentry, struct zip_error *error)
PHPZIPAPI int
int
_zip_cdir_write(struct zip_cdir *cd, FILE *fp, struct zip_error *error)
{
int i;
cd->offset = ftell(fp);
cd->offset = ftello(fp);
for (i=0; i<cd->nentry; i++) {
if (_zip_dirent_write(cd->entry+i, fp, 0, error) != 0)
return -1;
}
cd->size = ftell(fp) - cd->offset;
cd->size = ftello(fp) - cd->offset;
/* clearerr(fp); */
fwrite(EOCD_MAGIC, 1, 4, fp);
@ -136,7 +131,7 @@ _zip_cdir_write(struct zip_cdir *cd, FILE *fp, struct zip_error *error)
PHPZIPAPI void
void
_zip_dirent_finalize(struct zip_dirent *zde)
{
free(zde->filename);
@ -149,7 +144,7 @@ _zip_dirent_finalize(struct zip_dirent *zde)
PHPZIPAPI void
void
_zip_dirent_init(struct zip_dirent *de)
{
de->version_madeby = 0;
@ -188,7 +183,7 @@ _zip_dirent_init(struct zip_dirent *de)
returned.
*/
PHPZIPAPI int
int
_zip_dirent_read(struct zip_dirent *zde, FILE *fp,
unsigned char **bufp, unsigned int left, int localp,
struct zip_error *error)
@ -323,6 +318,63 @@ _zip_dirent_read(struct zip_dirent *zde, FILE *fp,
/* _zip_dirent_torrent_normalize(de);
Set values suitable for torrentzip.
*/
void
_zip_dirent_torrent_normalize(struct zip_dirent *de)
{
static struct tm torrenttime;
static time_t last_mod = 0;
if (last_mod == 0) {
#ifdef HAVE_STRUCT_TM_TM_ZONE
time_t now;
struct tm *l;
#endif
torrenttime.tm_sec = 0;
torrenttime.tm_min = 32;
torrenttime.tm_hour = 23;
torrenttime.tm_mday = 24;
torrenttime.tm_mon = 11;
torrenttime.tm_year = 96;
torrenttime.tm_wday = 0;
torrenttime.tm_yday = 0;
torrenttime.tm_isdst = 0;
#ifdef HAVE_STRUCT_TM_TM_ZONE
time(&now);
l = localtime(&now);
torrenttime.tm_gmtoff = l->tm_gmtoff;
torrenttime.tm_zone = l->tm_zone;
#endif
last_mod = mktime(&torrenttime);
}
de->version_madeby = 0;
de->version_needed = 20; /* 2.0 */
de->bitflags = 2; /* maximum compression */
de->comp_method = ZIP_CM_DEFLATE;
de->last_mod = last_mod;
de->disk_number = 0;
de->int_attrib = 0;
de->ext_attrib = 0;
de->offset = 0;
free(de->extrafield);
de->extrafield = NULL;
de->extrafield_len = 0;
free(de->comment);
de->comment = NULL;
de->comment_len = 0;
}
/* _zip_dirent_write(zde, fp, localp, error):
Writes zip directory entry zde to file fp.
@ -333,7 +385,7 @@ _zip_dirent_read(struct zip_dirent *zde, FILE *fp,
returned.
*/
PHPZIPAPI int
int
_zip_dirent_write(struct zip_dirent *zde, FILE *fp, int localp,
struct zip_error *error)
{
@ -390,11 +442,13 @@ _zip_dirent_write(struct zip_dirent *zde, FILE *fp, int localp,
static time_t
_zip_d2u_time(int dtime, int ddate)
{
struct tm *tm, tmbuf;
struct tm *tm;
time_t now;
now = time(NULL);
tm = php_localtime_r(&now, &tmbuf);
tm = localtime(&now);
/* let mktime decide if DST is in effect */
tm->tm_isdst = -1;
tm->tm_year = ((ddate>>9)&127) + 1980 - 1900;
tm->tm_mon = ((ddate>>5)&15) - 1;
@ -409,7 +463,7 @@ _zip_d2u_time(int dtime, int ddate)
PHPZIPAPI unsigned short
unsigned short
_zip_read2(unsigned char **a)
{
unsigned short ret;
@ -422,7 +476,7 @@ _zip_read2(unsigned char **a)
PHPZIPAPI unsigned int
unsigned int
_zip_read4(unsigned char **a)
{
unsigned int ret;
@ -519,9 +573,9 @@ _zip_write4(unsigned int i, FILE *fp)
static void
_zip_u2d_time(time_t time, unsigned short *dtime, unsigned short *ddate)
{
struct tm *tm, tmbuf;
struct tm *tm;
tm = php_localtime_r(&time, &tmbuf);
tm = localtime(&time);
*ddate = ((tm->tm_year+1900-1980)<<9) + ((tm->tm_mon+1)<<5)
+ tm->tm_mday;
*dtime = ((tm->tm_hour)<<11) + ((tm->tm_min)<<5)

9
ext/zip/lib/zip_entry_free.c

@ -1,11 +1,9 @@
/*
$NiH: zip_entry_free.c,v 1.2 2007/04/09 19:05:47 wiz Exp $
zip_entry_free.c -- free struct zip_entry
Copyright (C) 1999, 2003, 2004, 2007 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -37,12 +35,11 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI void
void
_zip_entry_free(struct zip_entry *ze)
{
free(ze->ch_filename);

9
ext/zip/lib/zip_entry_new.c

@ -1,11 +1,9 @@
/*
$NiH: zip_entry_new.c,v 1.2 2007/04/09 19:05:47 wiz Exp $
zip_entry_new.c -- create and init struct zip_entry
Copyright (C) 1999, 2003, 2004, 2007 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -37,12 +35,11 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI struct zip_entry *
struct zip_entry *
_zip_entry_new(struct zip *za)
{
struct zip_entry *ze;

4
ext/zip/lib/zip_err_str.c

@ -1,12 +1,8 @@
/*
This file was generated automatically by ./make_zip_err_str.sh
from ./zip.h; make changes there.
NiH: make_zip_err_str.sh,v 1.8 2004/11/17 21:55:09 wiz Exp
NiH: zip.h,v 1.57 2007/04/24 14:04:19 dillo Exp
*/
#include "zip.h"
#include "zipint.h"

19
ext/zip/lib/zip_error.c

@ -1,11 +1,9 @@
/*
$NiH: zip_error.c,v 1.7 2005/06/09 19:57:09 dillo Exp $
zip_error.c -- struct zip_error helper functions
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -37,12 +35,11 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI void
void
_zip_error_clear(struct zip_error *err)
{
err->zip_err = ZIP_ER_OK;
@ -51,7 +48,7 @@ _zip_error_clear(struct zip_error *err)
PHPZIPAPI void
void
_zip_error_copy(struct zip_error *dst, struct zip_error *src)
{
dst->zip_err = src->zip_err;
@ -60,7 +57,7 @@ _zip_error_copy(struct zip_error *dst, struct zip_error *src)
PHPZIPAPI void
void
_zip_error_fini(struct zip_error *err)
{
free(err->str);
@ -69,7 +66,7 @@ _zip_error_fini(struct zip_error *err)
PHPZIPAPI void
void
_zip_error_get(struct zip_error *err, int *zep, int *sep)
{
if (zep)
@ -84,7 +81,7 @@ _zip_error_get(struct zip_error *err, int *zep, int *sep)
PHPZIPAPI void
void
_zip_error_init(struct zip_error *err)
{
err->zip_err = ZIP_ER_OK;
@ -94,7 +91,7 @@ _zip_error_init(struct zip_error *err)
PHPZIPAPI void
void
_zip_error_set(struct zip_error *err, int ze, int se)
{
if (err) {

9
ext/zip/lib/zip_error_clear.c

@ -1,11 +1,9 @@
/*
$NiH: zip_error_clear.c,v 1.1 2007/10/04 15:21:09 dillo Exp $
zip_error_clear.c -- clear zip error
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI void
ZIP_EXTERN(void)
zip_error_clear(struct zip *za)
{
_zip_error_clear(&za->error);

9
ext/zip/lib/zip_error_get.c

@ -1,11 +1,9 @@
/*
$NiH: zip_error_get.c,v 1.1 2004/11/18 15:06:20 wiz Exp $
zip_error_get.c -- get zip error
Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI void
ZIP_EXTERN(void)
zip_error_get(struct zip *za, int *zep, int *sep)
{
_zip_error_get(&za->error, zep, sep);

9
ext/zip/lib/zip_error_get_sys_type.c

@ -1,11 +1,9 @@
/*
$NiH: zip_error_get_sys_type.c,v 1.1 2004/12/22 15:49:18 wiz Exp $
zip_error_get_sys_type.c -- return type of system error code
Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_error_get_sys_type(int ze)
{
if (ze < 0 || ze >= _zip_nerr_str)

19
ext/zip/lib/zip_error_strerror.c

@ -1,11 +1,9 @@
/*
$NiH: zip_error_strerror.c,v 1.4 2007/02/21 09:41:00 dillo Exp $
zip_error_sterror.c -- get string representation of struct zip_error
Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -40,12 +38,11 @@
#include <stdlib.h>
#include <string.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI const char *
const char *
_zip_error_strerror(struct zip_error *err)
{
const char *zs, *ss;
@ -54,7 +51,7 @@ _zip_error_strerror(struct zip_error *err)
_zip_error_fini(err);
if (err->zip_err < 0 || err->zip_err >= _zip_nerr_str) {
snprintf(buf, sizeof(buf), "Unknown error %d", err->zip_err);
sprintf(buf, "Unknown error %d", err->zip_err);
zs = NULL;
ss = buf;
}
@ -78,16 +75,16 @@ _zip_error_strerror(struct zip_error *err)
if (ss == NULL)
return zs;
else {
int l = strlen(ss) + (zs ? strlen(zs)+2 : 0) + 1;
if ((s=(char *)malloc(l)) == NULL)
if ((s=(char *)malloc(strlen(ss)
+ (zs ? strlen(zs)+2 : 0) + 1)) == NULL)
return _zip_err_str[ZIP_ER_MEMORY];
snprintf(s, l, "%s%s%s",
sprintf(s, "%s%s%s",
(zs ? zs : ""),
(zs ? ": " : ""),
ss);
err->str = s;
return ss;
return s;
}
}

9
ext/zip/lib/zip_error_to_str.c

@ -1,11 +1,9 @@
/*
$NiH: zip_error_to_str.c,v 1.1 2004/11/18 15:06:20 wiz Exp $
zip_error_to_str.c -- get string representation of zip error code
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -40,12 +38,11 @@
#include <stdlib.h>
#include <string.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_error_to_str(char *buf, size_t len, int ze, int se)
{
const char *zs, *ss;

24
ext/zip/lib/zip_fclose.c

@ -1,11 +1,9 @@
/*
$NiH: zip_fclose.c,v 1.14 2005/06/09 19:57:09 dillo Exp $
zip_fclose.c -- close file in zip archive
Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -37,12 +35,11 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_fclose(struct zip_file *zf)
{
int i, ret;
@ -51,15 +48,14 @@ zip_fclose(struct zip_file *zf)
inflateEnd(zf->zstr);
free(zf->buffer);
free(zf->zstr);
if (zf->za) {
for (i=0; i<zf->za->nfile; i++) {
if (zf->za->file[i] == zf) {
zf->za->file[i] = zf->za->file[zf->za->nfile-1];
zf->za->nfile--;
break;
}
}
for (i=0; i<zf->za->nfile; i++) {
if (zf->za->file[i] == zf) {
zf->za->file[i] = zf->za->file[zf->za->nfile-1];
zf->za->nfile--;
break;
}
}
}
ret = 0;

9
ext/zip/lib/zip_file_error_clear.c

@ -1,11 +1,9 @@
/*
$NiH: zip_file_error_clear.c,v 1.4 2007/10/04 18:37:54 wiz Exp $
zip_file_error_clear.c -- clear zip file error
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI void
ZIP_EXTERN(void)
zip_file_error_clear(struct zip_file *zf)
{
_zip_error_clear(&zf->error);

9
ext/zip/lib/zip_file_error_get.c

@ -1,11 +1,9 @@
/*
$NiH: zip_file_error_get.c,v 1.1 2004/11/18 15:06:21 wiz Exp $
zip_file_error_get.c -- get zip file error
Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI void
ZIP_EXTERN(void)
zip_file_error_get(struct zip_file *zf, int *zep, int *sep)
{
_zip_error_get(&zf->error, zep, sep);

14
ext/zip/lib/zip_file_get_offset.c

@ -1,11 +1,9 @@
/*
$NiH: zip_file_get_offset.c,v 1.4 2007/04/23 14:51:45 wiz Exp $
zip_file_get_offset.c -- get offset of file data in archive.
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -39,13 +37,9 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#ifndef _MSC_VER
#include <unistd.h>
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include "zip.h"
#include "zipint.h"
@ -56,7 +50,7 @@
On error, fills in za->error and returns 0.
*/
PHPZIPAPI unsigned int
unsigned int
_zip_file_get_offset(struct zip *za, int idx)
{
struct zip_dirent de;
@ -64,7 +58,7 @@ _zip_file_get_offset(struct zip *za, int idx)
offset = za->cdir->entry[idx].offset;
if (fseek(za->zp, offset, SEEK_SET) != 0) {
if (fseeko(za->zp, offset, SEEK_SET) != 0) {
_zip_error_set(&za->error, ZIP_ER_SEEK, errno);
return 0;
}

9
ext/zip/lib/zip_file_strerror.c

@ -1,11 +1,9 @@
/*
$NiH: zip_file_strerror.c,v 1.1 2003/10/05 16:05:22 dillo Exp $
zip_file_sterror.c -- get string representation of zip file error
Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI const char *
ZIP_EXTERN(const char *)
zip_file_strerror(struct zip_file *zf)
{
return _zip_error_strerror(&zf->error);

71
ext/zip/lib/zip_filerange_crc.c

@ -0,0 +1,71 @@
/*
zip_filerange_crc.c -- compute CRC32 for a range of a file
Copyright (C) 2008 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
3. The names of the authors may not be used to endorse or promote
products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdio.h>
#include <errno.h>
#include "zipint.h"
int
_zip_filerange_crc(FILE *fp, off_t start, off_t len, uLong *crcp,
struct zip_error *errp)
{
Bytef buf[BUFSIZE];
size_t n;
*crcp = crc32(0L, Z_NULL, 0);
if (fseeko(fp, start, SEEK_SET) != 0) {
_zip_error_set(errp, ZIP_ER_SEEK, errno);
return -1;
}
while (len > 0) {
n = len > BUFSIZE ? BUFSIZE : len;
if ((n=fread(buf, 1, n, fp)) <= 0) {
_zip_error_set(errp, ZIP_ER_READ, errno);
return -1;
}
*crcp = crc32(*crcp, buf, n);
len-= n;
}
return 0;
}

9
ext/zip/lib/zip_fopen.c

@ -1,11 +1,9 @@
/*
$NiH: zip_fopen.c,v 1.12 2005/06/09 19:57:09 dillo Exp $
zip_fopen.c -- open file in zip archive for reading
Copyright (C) 1999, 2003, 2004, 2005 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI struct zip_file *
ZIP_EXTERN(struct zip_file *)
zip_fopen(struct zip *za, const char *fname, int flags)
{
int idx;

13
ext/zip/lib/zip_fopen_index.c

@ -1,11 +1,9 @@
/*
$NiH: zip_fopen_index.c,v 1.24 2005/05/20 21:54:53 wiz Exp $
zip_fopen_index.c -- open file in zip archive for reading by index
Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -39,14 +37,13 @@
#include <stdio.h>
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
static struct zip_file *_zip_file_new(struct zip *za);
PHPZIPAPI struct zip_file *
ZIP_EXTERN(struct zip_file *)
zip_fopen_index(struct zip *za, int fileno, int flags)
{
int len, ret;
@ -141,7 +138,7 @@ zip_fopen_index(struct zip *za, int fileno, int flags)
PHPZIPAPI int
int
_zip_file_fillbuf(void *buf, size_t buflen, struct zip_file *zf)
{
int i, j;
@ -152,7 +149,7 @@ _zip_file_fillbuf(void *buf, size_t buflen, struct zip_file *zf)
if ((zf->flags & ZIP_ZF_EOF) || zf->cbytes_left <= 0 || buflen <= 0)
return 0;
if (fseek(zf->za->zp, zf->fpos, SEEK_SET) < 0) {
if (fseeko(zf->za->zp, zf->fpos, SEEK_SET) < 0) {
_zip_error_set(&zf->error, ZIP_ER_SEEK, errno);
return -1;
}

11
ext/zip/lib/zip_fread.c

@ -1,11 +1,9 @@
/*
$NiH: zip_fread.c,v 1.21 2007/04/23 14:49:50 wiz Exp $
zip_fread.c -- read from file
Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,16 +33,15 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI ssize_t
ZIP_EXTERN(ssize_t)
zip_fread(struct zip_file *zf, void *outbuf, size_t toread)
{
int ret;
size_t out_before, len;
size_t out_before, len;
int i;
if (!zf)

13
ext/zip/lib/zip_free.c

@ -1,11 +1,9 @@
/*
$NiH: zip_free.c,v 1.17 2005/06/09 19:57:10 dillo Exp $
zip_free.c -- free struct zip
Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -36,7 +34,7 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
@ -45,7 +43,7 @@
frees the space allocated to a zipfile struct, and closes the
corresponding file. */
PHPZIPAPI void
void
_zip_free(struct zip *za)
{
int i;
@ -59,9 +57,6 @@ _zip_free(struct zip *za)
if (za->zp)
fclose(za->zp);
if (za->ch_comment)
free(za->ch_comment);
_zip_cdir_free(za->cdir);
if (za->entry) {

24
ext/zip/lib/zip_get_archive_comment.c

@ -1,11 +1,9 @@
/*
$NiH: zip_get_archive_comment.c,v 1.4 2007/04/23 16:11:33 wiz Exp $
zip_get_archive_comment.c -- get archive comment
Copyright (C) 2007 Dieter Baron and Thomas Klausner
Copyright (C) 2006-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,21 +33,25 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI const char *
ZIP_EXTERN(const char *)
zip_get_archive_comment(struct zip *za, int *lenp, int flags)
{
if ((flags & ZIP_FL_UNCHANGED)
|| (za->ch_comment_len == -1)) {
if (za->cdir) {
if (lenp != NULL)
*lenp = za->cdir->comment_len;
return za->cdir->comment;
}
if (za->cdir) {
if (lenp != NULL)
*lenp = za->cdir->comment_len;
return za->cdir->comment;
}
else {
if (lenp != NULL)
*lenp = -1;
return NULL;
}
}
if (lenp != NULL)

48
ext/zip/lib/zip_get_archive_flag.c

@ -0,0 +1,48 @@
/*
zip_get_archive_flag.c -- get archive global flag
Copyright (C) 2008 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
3. The names of the authors may not be used to endorse or promote
products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "zipint.h"
ZIP_EXTERN(int)
zip_get_archive_flag(struct zip *za, int flag, int flags)
{
int fl;
fl = (flags & ZIP_FL_UNCHANGED) ? za->flags : za->ch_flags;
return (fl & flag) ? 1 : 0;
}

9
ext/zip/lib/zip_get_file_comment.c

@ -1,11 +1,9 @@
/*
$NiH: zip_get_file_comment.c,v 1.2 2007/04/23 13:06:28 wiz Exp $
zip_get_file_comment.c -- get file comment
Copyright (C) 2007 Dieter Baron and Thomas Klausner
Copyright (C) 2006-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI const char *
ZIP_EXTERN(const char *)
zip_get_file_comment(struct zip *za, int idx, int *lenp, int flags)
{
if (idx < 0 || idx >= za->nentry) {

11
ext/zip/lib/zip_get_name.c

@ -1,11 +1,9 @@
/*
$NiH: zip_get_name.c,v 1.13 2005/01/20 21:00:54 dillo Exp $
zip_get_name.c -- get filename for a file in zip file
Copyright (C) 1999, 2003, 2004, 2005 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI const char *
ZIP_EXTERN(const char *)
zip_get_name(struct zip *za, int idx, int flags)
{
return _zip_get_name(za, idx, flags, &za->error);
@ -48,7 +45,7 @@ zip_get_name(struct zip *za, int idx, int flags)
PHPZIPAPI const char *
const char *
_zip_get_name(struct zip *za, int idx, int flags, struct zip_error *error)
{
if (idx < 0 || idx >= za->nentry) {

9
ext/zip/lib/zip_get_num_files.c

@ -1,11 +1,9 @@
/*
$NiH: zip_get_num_files.c,v 1.2 2003/12/27 22:53:15 wiz Exp $
zip_get_num_files.c -- get number of files in archive
Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_get_num_files(struct zip *za)
{
if (za == NULL)

9
ext/zip/lib/zip_memdup.c

@ -1,11 +1,9 @@
/*
$NiH: zip_memdup.c,v 1.2 2007/04/24 10:34:39 dillo Exp $
zip_memdup.c -- internal zip function, "strdup" with len
Copyright (C) 1999, 2003, 2004, 2005, 2007 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -36,12 +34,11 @@
#include <stdlib.h>
#include <string.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI void *
void *
_zip_memdup(const void *mem, size_t len, struct zip_error *error)
{
void *ret;

25
ext/zip/lib/zip_name_locate.c

@ -1,11 +1,9 @@
/*
$NiH: zip_name_locate.c,v 1.19 2005/06/09 19:57:10 dillo Exp $
zip_name_locate.c -- get index by name
Copyright (C) 1999, 2003, 2004, 2005 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -19,7 +17,7 @@
3. The names of the authors may not be used to endorse or promote
products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -37,12 +35,11 @@
#include <string.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_name_locate(struct zip *za, const char *fname, int flags)
{
return _zip_name_locate(za, fname, flags, &za->error);
@ -50,7 +47,7 @@ zip_name_locate(struct zip *za, const char *fname, int flags)
PHPZIPAPI int
int
_zip_name_locate(struct zip *za, const char *fname, int flags,
struct zip_error *error)
{
@ -62,11 +59,8 @@ _zip_name_locate(struct zip *za, const char *fname, int flags,
_zip_error_set(error, ZIP_ER_INVAL, 0);
return -1;
}
#ifdef PHP_WIN32
cmp = (flags & ZIP_FL_NOCASE) ? stricmp : strcmp;
#else
cmp = (flags & ZIP_FL_NOCASE) ? strcasecmp : strcmp;
#endif
cmp = (flags & ZIP_FL_NOCASE) ? strcmpi : strcmp;
n = (flags & ZIP_FL_UNCHANGED) ? za->cdir->nentry : za->nentry;
for (i=0; i<n; i++) {
@ -78,7 +72,7 @@ _zip_name_locate(struct zip *za, const char *fname, int flags,
/* newly added (partially filled) entry */
if (fn == NULL)
continue;
if (flags & ZIP_FL_NODIR) {
p = strrchr(fn, '/');
if (p)
@ -89,6 +83,7 @@ _zip_name_locate(struct zip *za, const char *fname, int flags,
return i;
}
_zip_error_set(error, ZIP_ER_NOENT, 0);
/* Look for an entry should not raise an error */
/* _zip_error_set(error, ZIP_ER_NOENT, 0);*/
return -1;
}

11
ext/zip/lib/zip_new.c

@ -1,11 +1,9 @@
/*
$NiH: zip_new.c,v 1.12 2007/04/23 00:40:47 wiz Exp $
zip_new.c -- create and init struct zip
Copyright (C) 1999, 2004, 2005 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -36,7 +34,7 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
@ -45,7 +43,7 @@
creates a new zipfile struct, and sets the contents to zero; returns
the new struct. */
PHPZIPAPI struct zip *
struct zip *
_zip_new(struct zip_error *error)
{
struct zip *za;
@ -66,6 +64,7 @@ _zip_new(struct zip_error *error)
za->entry = NULL;
za->nfile = za->nfile_alloc = 0;
za->file = NULL;
za->flags = za->ch_flags = 0;
return za;
}

372
ext/zip/lib/zip_open.c

@ -1,11 +1,9 @@
/*
$NiH: zip_open.c,v 1.38 2007/05/04 00:01:26 dillo Exp $
zip_open.c -- open zip archive
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -37,18 +35,19 @@
#include <sys/stat.h>
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef _MSC_VER
#include <unistd.h>
#endif
#include <sys/types.h>
#include "zip.h"
#include "zipint.h"
static void set_error(int *, struct zip_error *, int);
static struct zip *_zip_allocate_new(const char *, int *);
static int _zip_checkcons(FILE *, struct zip_cdir *, struct zip_error *);
static void _zip_check_torrentzip(struct zip *);
static struct zip_cdir *_zip_find_central_dir(FILE *, int, int *, off_t);
static int _zip_file_exists(const char *, int, int *);
static int _zip_headercomp(struct zip_dirent *, int,
struct zip_dirent *, int);
static unsigned char *_zip_memmem(const unsigned char *, int,
@ -58,154 +57,55 @@ static struct zip_cdir *_zip_readcdir(FILE *, unsigned char *, unsigned char *,
PHPZIPAPI struct zip *
ZIP_EXTERN(struct zip *)
zip_open(const char *fn, int flags, int *zep)
{
FILE *fp;
unsigned char *buf, *match;
int a, i, buflen, best;
struct zip *za;
struct zip_cdir *cdir, *cdirnew;
long len;
struct stat st;
struct zip_error error, err2;
if (fn == NULL) {
set_error(zep, NULL, ZIP_ER_INVAL);
struct zip_cdir *cdir;
int i;
off_t len;
switch (_zip_file_exists(fn, flags, zep)) {
case -1:
return NULL;
case 0:
return _zip_allocate_new(fn, zep);
default:
break;
}
if (flags & ZIP_OVERWRITE || stat(fn, &st) != 0) {
if ((flags & ZIP_CREATE) || (flags & ZIP_OVERWRITE)) {
if ((za=_zip_new(&error)) == NULL) {
set_error(zep, &error, 0);
return NULL;
}
za->zn = strdup(fn);
if (!za->zn) {
_zip_free(za);
set_error(zep, NULL, ZIP_ER_MEMORY);
return NULL;
}
return za;
}
else {
set_error(zep, NULL, ZIP_ER_OPEN);
return NULL;
}
}
else if ((flags & ZIP_EXCL)) {
set_error(zep, NULL, ZIP_ER_EXISTS);
if ((fp=fopen(fn, "rb")) == NULL) {
set_error(zep, NULL, ZIP_ER_OPEN);
return NULL;
}
/* ZIP_CREATE gets ignored if file exists and not ZIP_EXCL,
just like open() */
if ((fp=fopen(fn, "rb")) == NULL) {
set_error(zep, NULL, ZIP_ER_OPEN);
return NULL;
}
#ifdef PHP_WIN32
_setmode(_fileno(fp), _O_BINARY );
#endif
fseeko(fp, 0, SEEK_END);
len = ftello(fp);
clearerr(fp);
fseek(fp, 0, SEEK_END);
len = ftell(fp);
i = fseek(fp, -(len < CDBUFSIZE ? len : CDBUFSIZE), SEEK_END);
if (i == -1 && errno != EFBIG) {
/* seek before start of file on my machine */
set_error(zep, NULL, ZIP_ER_SEEK);
fclose(fp);
return NULL;
}
/* 64k is too much for stack */
if ((buf=(unsigned char *)malloc(CDBUFSIZE)) == NULL) {
set_error(zep, NULL, ZIP_ER_MEMORY);
fclose(fp);
return NULL;
/* treat empty files as empty archives */
if (len == 0) {
if ((za=_zip_allocate_new(fn, zep)) == NULL)
fclose(fp);
else
za->zp = fp;
return za;
}
clearerr(fp);
buflen = fread(buf, 1, CDBUFSIZE, fp);
if (ferror(fp)) {
set_error(zep, NULL, ZIP_ER_READ);
free(buf);
cdir = _zip_find_central_dir(fp, flags, zep, len);
if (cdir == NULL) {
fclose(fp);
return NULL;
}
best = -2;
cdir = NULL;
match = buf;
while ((match=_zip_memmem(match, buflen-(match-buf)-18,
(const unsigned char *)EOCD_MAGIC, 4))!=NULL) {
/* found match -- check, if good */
/* to avoid finding the same match all over again */
match++;
if ((cdirnew=_zip_readcdir(fp, buf, match-1, buflen, flags,
&err2)) == NULL) {
if (best == -2) {
set_error(zep, &err2, 0);
best = -1;
}
continue;
}
if (cdir) {
if (best <= 0)
best = _zip_checkcons(fp, cdir, &err2);
a = _zip_checkcons(fp, cdirnew, &err2);
if (best < a) {
_zip_cdir_free(cdir);
cdir = cdirnew;
best = a;
}
else
_zip_cdir_free(cdirnew);
}
else {
cdir = cdirnew;
if (flags & ZIP_CHECKCONS)
best = _zip_checkcons(fp, cdir, &err2);
else
best = 0;
}
cdirnew = NULL;
}
free(buf);
if (best < 0) {
/* no consistent eocd found */
if (best == -2) {
/* no eocd found at all */
set_error(zep, NULL, ZIP_ER_NOZIP);
}
_zip_cdir_free(cdir);
fclose(fp);
return NULL;
}
if ((za=_zip_new(&error)) == NULL) {
set_error(zep, &error, 0);
if ((za=_zip_allocate_new(fn, zep)) == NULL) {
_zip_cdir_free(cdir);
fclose(fp);
return NULL;
}
za->zp = fp;
za->cdir = cdir;
if ((za->zn=strdup(fn)) == NULL) {
set_error(zep, NULL, ZIP_ER_MEMORY);
_zip_free(za);
return NULL;
}
za->zp = fp;
if ((za->entry=(struct zip_entry *)malloc(sizeof(*(za->entry))
* cdir->nentry)) == NULL) {
@ -216,6 +116,9 @@ zip_open(const char *fn, int flags, int *zep)
for (i=0; i<cdir->nentry; i++)
_zip_entry_new(za);
_zip_check_torrentzip(za);
za->ch_flags = za->flags;
return za;
}
@ -295,13 +198,14 @@ _zip_readcdir(FILE *fp, unsigned char *buf, unsigned char *eocd, int buflen,
return NULL;
}
if (cd->comment_len)
if (cd->comment_len) {
if ((cd->comment=(char *)_zip_memdup(eocd+EOCDLEN,
cd->comment_len, error))
== NULL) {
free(cd);
return NULL;
}
}
cdp = eocd;
if (cd->size < (unsigned int)(eocd-buf)) {
@ -313,8 +217,10 @@ _zip_readcdir(FILE *fp, unsigned char *buf, unsigned char *eocd, int buflen,
/* go to start of cdir and read it entry by entry */
bufp = NULL;
clearerr(fp);
fseek(fp, -(cd->size+cd->comment_len+EOCDLEN), SEEK_END);
if (ferror(fp) || ((unsigned int)ftell(fp) != cd->offset)) {
fseeko(fp, cd->offset, SEEK_SET);
/* possible consistency check: cd->offset =
len-(cd->size+cd->comment_len+EOCDLEN) ? */
if (ferror(fp) || ((unsigned long)ftello(fp) != cd->offset)) {
/* seek error or offset of cdir wrong */
if (ferror(fp))
_zip_error_set(error, ZIP_ER_SEEK, errno);
@ -376,7 +282,7 @@ _zip_checkcons(FILE *fp, struct zip_cdir *cd, struct zip_error *error)
return -1;
}
if (fseek(fp, cd->entry[i].offset, SEEK_SET) != 0) {
if (fseeko(fp, cd->entry[i].offset, SEEK_SET) != 0) {
_zip_error_set(error, ZIP_ER_SEEK, 0);
return -1;
}
@ -385,7 +291,7 @@ _zip_checkcons(FILE *fp, struct zip_cdir *cd, struct zip_error *error)
return -1;
if (_zip_headercomp(cd->entry+i, 0, &temp, 1) != 0) {
_zip_error_set(error, ZIP_ER_NOZIP, 0);
_zip_error_set(error, ZIP_ER_INCONS, 0);
_zip_dirent_finalize(&temp);
return -1;
}
@ -397,6 +303,41 @@ _zip_checkcons(FILE *fp, struct zip_cdir *cd, struct zip_error *error)
/* _zip_check_torrentzip:
check wether ZA has a valid TORRENTZIP comment, i.e. is torrentzipped */
static void
_zip_check_torrentzip(struct zip *za)
{
uLong crc_got, crc_should;
char buf[8+1];
char *end;
if (za->zp == NULL || za->cdir == NULL)
return;
if (za->cdir->comment_len != TORRENT_SIG_LEN+8
|| strncmp(za->cdir->comment, TORRENT_SIG, TORRENT_SIG_LEN) != 0)
return;
memcpy(buf, za->cdir->comment+TORRENT_SIG_LEN, 8);
buf[8] = '\0';
errno = 0;
crc_should = strtoul(buf, &end, 16);
if ((crc_should == UINT_MAX && errno != 0) || (end && *end))
return;
if (_zip_filerange_crc(za->zp, za->cdir->offset, za->cdir->size,
&crc_got, NULL) < 0)
return;
if (crc_got == crc_should)
za->flags |= ZIP_AFL_TORRENT;
}
/* _zip_headercomp:
compares two headers h1 and h2; if they are local headers, set
local1p or local2p respectively to 1, else 0. Return 0 if they
@ -414,14 +355,32 @@ _zip_headercomp(struct zip_dirent *h1, int local1p, struct zip_dirent *h2,
#endif
|| (h1->comp_method != h2->comp_method)
|| (h1->last_mod != h2->last_mod)
|| (h1->crc != h2->crc)
|| (h1->comp_size != h2->comp_size)
|| (h1->uncomp_size != h2->uncomp_size)
|| (h1->filename_len != h2->filename_len)
|| !h1->filename || !h2->filename
|| strcmp(h1->filename, h2->filename))
return -1;
/* check that CRC and sizes are zero if data descriptor is used */
if ((h1->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) && local1p
&& (h1->crc != 0
|| h1->comp_size != 0
|| h1->uncomp_size != 0))
return -1;
if ((h2->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) && local2p
&& (h2->crc != 0
|| h2->comp_size != 0
|| h2->uncomp_size != 0))
return -1;
/* check that CRC and sizes are equal if no data descriptor is used */
if (((h1->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) == 0 || local1p == 0)
&& ((h2->bitflags & ZIP_GPBF_DATA_DESCRIPTOR) == 0 || local2p == 0)) {
if ((h1->crc != h2->crc)
|| (h1->comp_size != h2->comp_size)
|| (h1->uncomp_size != h2->uncomp_size))
return -1;
}
if ((local1p == local2p)
&& ((h1->extrafield_len != h2->extrafield_len)
|| (h1->extrafield_len && h2->extrafield
@ -448,6 +407,137 @@ _zip_headercomp(struct zip_dirent *h1, int local1p, struct zip_dirent *h2,
static struct zip *
_zip_allocate_new(const char *fn, int *zep)
{
struct zip *za;
struct zip_error error;
if ((za=_zip_new(&error)) == NULL) {
set_error(zep, &error, 0);
return NULL;
}
za->zn = strdup(fn);
if (!za->zn) {
_zip_free(za);
set_error(zep, NULL, ZIP_ER_MEMORY);
return NULL;
}
return za;
}
static int
_zip_file_exists(const char *fn, int flags, int *zep)
{
struct stat st;
if (fn == NULL) {
set_error(zep, NULL, ZIP_ER_INVAL);
return -1;
}
if (stat(fn, &st) != 0) {
if (flags & ZIP_CREATE)
return 0;
else {
set_error(zep, NULL, ZIP_ER_OPEN);
return -1;
}
}
else if ((flags & ZIP_EXCL)) {
set_error(zep, NULL, ZIP_ER_EXISTS);
return -1;
}
/* ZIP_CREATE gets ignored if file exists and not ZIP_EXCL,
just like open() */
return 1;
}
static struct zip_cdir *
_zip_find_central_dir(FILE *fp, int flags, int *zep, off_t len)
{
struct zip_cdir *cdir, *cdirnew;
unsigned char *buf, *match;
int a, best, buflen, i;
struct zip_error zerr;
i = fseeko(fp, -(len < CDBUFSIZE ? len : CDBUFSIZE), SEEK_END);
if (i == -1 && errno != EFBIG) {
/* seek before start of file on my machine */
set_error(zep, NULL, ZIP_ER_SEEK);
return NULL;
}
/* 64k is too much for stack */
if ((buf=(unsigned char *)malloc(CDBUFSIZE)) == NULL) {
set_error(zep, NULL, ZIP_ER_MEMORY);
return NULL;
}
clearerr(fp);
buflen = fread(buf, 1, CDBUFSIZE, fp);
if (ferror(fp)) {
set_error(zep, NULL, ZIP_ER_READ);
free(buf);
return NULL;
}
best = -1;
cdir = NULL;
match = buf;
_zip_error_set(&zerr, ZIP_ER_NOZIP, 0);
while ((match=_zip_memmem(match, buflen-(match-buf)-18,
(const unsigned char *)EOCD_MAGIC, 4))!=NULL) {
/* found match -- check, if good */
/* to avoid finding the same match all over again */
match++;
if ((cdirnew=_zip_readcdir(fp, buf, match-1, buflen, flags,
&zerr)) == NULL)
continue;
if (cdir) {
if (best <= 0)
best = _zip_checkcons(fp, cdir, &zerr);
a = _zip_checkcons(fp, cdirnew, &zerr);
if (best < a) {
_zip_cdir_free(cdir);
cdir = cdirnew;
best = a;
}
else
_zip_cdir_free(cdirnew);
}
else {
cdir = cdirnew;
if (flags & ZIP_CHECKCONS)
best = _zip_checkcons(fp, cdir, &zerr);
else
best = 0;
}
cdirnew = NULL;
}
free(buf);
if (best < 0) {
set_error(zep, &zerr, 0);
_zip_cdir_free(cdir);
return NULL;
}
return cdir;
}
static unsigned char *
_zip_memmem(const unsigned char *big, int biglen, const unsigned char *little,
int littlelen)

27
ext/zip/lib/zip_rename.c

@ -1,11 +1,9 @@
/*
$NiH: zip_rename.c,v 1.15 2004/11/30 22:19:38 wiz Exp $
zip_rename.c -- rename file in zip archive
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,15 +33,30 @@
#include "zip.h"
#include <string.h>
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_rename(struct zip *za, int idx, const char *name)
{
if (idx >= za->nentry || idx < 0) {
const char *old_name;
int old_is_dir, new_is_dir;
if (idx >= za->nentry || idx < 0 || name[0] == '\0') {
_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
return -1;
}
if ((old_name=zip_get_name(za, idx, 0)) == NULL)
return -1;
new_is_dir = (name[strlen(name)-1] == '/');
old_is_dir = (old_name[strlen(old_name)-1] == '/');
if (new_is_dir != old_is_dir) {
_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
return -1;
}

28
ext/zip/lib/zip_replace.c

@ -1,11 +1,9 @@
/*
$NiH: zip_replace.c,v 1.20 2007/04/09 14:52:02 wiz Exp $
zip_replace.c -- replace file via callback function
Copyright (C) 1999, 2003, 2004, 2007 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_replace(struct zip *za, int idx, struct zip_source *source)
{
if (idx < 0 || idx >= za->nentry || source == NULL) {
@ -57,23 +54,22 @@ zip_replace(struct zip *za, int idx, struct zip_source *source)
PHPZIPAPI int
int
_zip_replace(struct zip *za, int idx, const char *name,
struct zip_source *source)
{
if (idx == -1) {
if (_zip_entry_new(za) == NULL)
return -1;
idx = za->nentry - 1;
}
if (idx == -1) {
if (_zip_entry_new(za) == NULL)
return -1;
idx = za->nentry - 1;
}
_zip_unchange_data(za->entry+idx);
if (name && _zip_set_name(za, idx, name) != 0)
return -1;
return -1;
za->entry[idx].state = ((za->cdir == NULL || idx >= za->cdir->nentry)
? ZIP_ST_ADDED : ZIP_ST_REPLACED);
za->entry[idx].source = source;

11
ext/zip/lib/zip_set_archive_comment.c

@ -1,11 +1,9 @@
/*
$NiH: zip_set_archive_comment.c,v 1.3 2007/04/24 10:34:39 dillo Exp $
zip_set_archive_comment.c -- set archive comment
Copyright (C) 2007 Dieter Baron and Thomas Klausner
Copyright (C) 2006-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -37,12 +35,11 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_set_archive_comment(struct zip *za, const char *comment, int len)
{
char *tmpcom;
@ -60,7 +57,7 @@ zip_set_archive_comment(struct zip *za, const char *comment, int len)
else
tmpcom = NULL;
if (za->ch_comment) free(za->ch_comment);
free(za->ch_comment);
za->ch_comment = tmpcom;
za->ch_comment_len = len;

49
ext/zip/lib/zip_set_archive_flag.c

@ -0,0 +1,49 @@
/*
zip_get_archive_flag.c -- set archive global flag
Copyright (C) 2008 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
3. The names of the authors may not be used to endorse or promote
products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "zipint.h"
ZIP_EXTERN(int)
zip_set_archive_flag(struct zip *za, int flag, int value)
{
if (value)
za->ch_flags |= flag;
else
za->ch_flags &= ~flag;
return 0;
}

9
ext/zip/lib/zip_set_file_comment.c

@ -1,11 +1,9 @@
/*
$NiH: zip_set_file_comment.c,v 1.4 2007/04/24 10:34:39 dillo Exp $
zip_set_file_comment.c -- set comment for file in archive
Copyright (C) 2007 Dieter Baron and Thomas Klausner
Copyright (C) 2006-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -37,12 +35,11 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_set_file_comment(struct zip *za, int idx, const char *comment, int len)
{
char *tmpcom;

10
ext/zip/lib/zip_set_name.c

@ -1,11 +1,9 @@
/*
$NiH: zip_set_name.c,v 1.16 2004/11/30 23:02:47 wiz Exp $
zip_set_name.c -- rename helper function
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -37,12 +35,12 @@
#include <stdlib.h>
#include <string.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
int
_zip_set_name(struct zip *za, int idx, const char *name)
{
char *s;

13
ext/zip/lib/zip_source_buffer.c

@ -1,11 +1,9 @@
/*
$NiH: zip_source_buffer.c,v 1.8 2007/04/23 14:50:49 wiz Exp $
zip_source_buffer.c -- create zip data source from buffer
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -38,7 +36,6 @@
#include <stdlib.h>
#include <string.h>
#include "zip.h"
#include "zipint.h"
struct read_data {
@ -52,7 +49,7 @@ static ssize_t read_data(void *state, void *data, size_t len,
PHPZIPAPI struct zip_source *
ZIP_EXTERN(struct zip_source *)
zip_source_buffer(struct zip *za, const void *data, off_t len, int freep)
{
struct read_data *f;
@ -84,6 +81,8 @@ zip_source_buffer(struct zip *za, const void *data, off_t len, int freep)
return zs;
}
static ssize_t
read_data(void *state, void *data, size_t len, enum zip_source_cmd cmd)
{
@ -103,8 +102,6 @@ read_data(void *state, void *data, size_t len, enum zip_source_cmd cmd)
n = z->end - z->buf;
if (n > len)
n = len;
if (n < 0)
n = 0;
if (n) {
memcpy(buf, z->buf, n);

28
ext/zip/lib/zip_source_file.c

@ -1,11 +1,9 @@
/*
$NiH: zip_source_file.c,v 1.2 2004/11/18 16:28:13 wiz Exp $
zip_source_file.c -- create data source from file
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -38,17 +36,13 @@
#include <errno.h>
#include <stdio.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI struct zip_source *
ZIP_EXTERN(struct zip_source *)
zip_source_file(struct zip *za, const char *fname, off_t start, off_t len)
{
struct zip_source *zs;
FILE *fp;
if (za == NULL)
return NULL;
@ -57,19 +51,5 @@ zip_source_file(struct zip *za, const char *fname, off_t start, off_t len)
return NULL;
}
if ((fp=fopen(fname, "rb")) == NULL) {
_zip_error_set(&za->error, ZIP_ER_OPEN, errno);
return NULL;
}
#ifdef PHP_WIN32
_setmode(_fileno(fp), _O_BINARY );
#endif
if ((zs=zip_source_filep(za, fp, start, len)) == NULL) {
fclose(fp);
return NULL;
}
return zs;
return _zip_source_file_or_p(za, fname, NULL, start, len);
}

58
ext/zip/lib/zip_source_filep.c

@ -1,11 +1,9 @@
/*
$NiH: zip_source_filep.c,v 1.6 2005/06/09 19:57:10 dillo Exp $
zip_source_filep.c -- create data source from FILE *
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -41,10 +39,10 @@
#include <stdlib.h>
#include <string.h>
#include "zip.h"
#include "zipint.h"
struct read_file {
char *fname; /* name of file to copy from */
FILE *f; /* file to copy from */
off_t off; /* start offset of */
off_t len; /* lengt of data to copy */
@ -57,12 +55,9 @@ static ssize_t read_file(void *state, void *data, size_t len,
PHPZIPAPI struct zip_source *
ZIP_EXTERN(struct zip_source *)
zip_source_filep(struct zip *za, FILE *file, off_t start, off_t len)
{
struct read_file *f;
struct zip_source *zs;
if (za == NULL)
return NULL;
@ -71,11 +66,36 @@ zip_source_filep(struct zip *za, FILE *file, off_t start, off_t len)
return NULL;
}
return _zip_source_file_or_p(za, NULL, file, start, len);
}
struct zip_source *
_zip_source_file_or_p(struct zip *za, const char *fname, FILE *file,
off_t start, off_t len)
{
struct read_file *f;
struct zip_source *zs;
if (file == NULL && fname == NULL) {
_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
return NULL;
}
if ((f=(struct read_file *)malloc(sizeof(struct read_file))) == NULL) {
_zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
return NULL;
}
f->fname = NULL;
if (fname) {
if ((f->fname=strdup(fname)) == NULL) {
_zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
free(f);
return NULL;
}
}
f->f = file;
f->off = start;
f->len = (len ? len : -1);
@ -102,6 +122,14 @@ read_file(void *state, void *data, size_t len, enum zip_source_cmd cmd)
switch (cmd) {
case ZIP_SOURCE_OPEN:
if (z->fname) {
if ((z->f=fopen(z->fname, "rb")) == NULL) {
z->e[0] = ZIP_ER_OPEN;
z->e[1] = errno;
return -1;
}
}
if (fseeko(z->f, z->off, SEEK_SET) < 0) {
z->e[0] = ZIP_ER_SEEK;
z->e[1] = errno;
@ -128,17 +156,27 @@ read_file(void *state, void *data, size_t len, enum zip_source_cmd cmd)
return i;
case ZIP_SOURCE_CLOSE:
if (z->fname) {
fclose(z->f);
z->f = NULL;
}
return 0;
case ZIP_SOURCE_STAT:
{
struct zip_stat *st;
struct stat fst;
int err;
if (len < sizeof(*st))
return -1;
if (fstat(fileno(z->f), &fst) != 0) {
if (z->f)
err = fstat(fileno(z->f), &fst);
else
err = stat(z->fname, &fst);
if (err != 0) {
z->e[0] = ZIP_ER_READ; /* best match */
z->e[1] = errno;
return -1;
@ -164,6 +202,8 @@ read_file(void *state, void *data, size_t len, enum zip_source_cmd cmd)
return sizeof(int)*2;
case ZIP_SOURCE_FREE:
free(z->fname);
if (z->f)
fclose(z->f);
free(z);
return 0;

9
ext/zip/lib/zip_source_free.c

@ -1,11 +1,9 @@
/*
$NiH: zip_source_free.c,v 1.2 2004/12/22 16:32:00 dillo Exp $
zip_source_free.c -- free zip data source
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -37,12 +35,11 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI void
ZIP_EXTERN(void)
zip_source_free(struct zip_source *source)
{
if (source == NULL)

9
ext/zip/lib/zip_source_function.c

@ -1,11 +1,9 @@
/*
$NiH: zip_source_function.c,v 1.4 2007/02/21 09:41:00 dillo Exp $
zip_source_function.c -- create zip data source from callback function
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -37,12 +35,11 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI struct zip_source *
ZIP_EXTERN(struct zip_source *)
zip_source_function(struct zip *za, zip_source_callback zcb, void *ud)
{
struct zip_source *zs;

13
ext/zip/lib/zip_source_zip.c

@ -1,11 +1,9 @@
/*
$NiH: zip_source_zip.c,v 1.7 2007/02/21 09:41:00 dillo Exp $
zip_source_zip.c -- create data source from zip file
Copyright (C) 1999, 2003, 2004, 2005 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -38,7 +36,6 @@
#include <stdlib.h>
#include <string.h>
#include "zip.h"
#include "zipint.h"
struct read_zip {
@ -52,7 +49,7 @@ static ssize_t read_zip(void *st, void *data, size_t len,
PHPZIPAPI struct zip_source *
ZIP_EXTERN(struct zip_source *)
zip_source_zip(struct zip *za, struct zip *srcza, int srcidx, int flags,
off_t start, off_t len)
{
@ -60,6 +57,8 @@ zip_source_zip(struct zip *za, struct zip *srcza, int srcidx, int flags,
struct zip_source *zs;
struct read_zip *p;
/* XXX: ZIP_FL_RECOMPRESS */
if (za == NULL)
return NULL;
@ -77,7 +76,7 @@ zip_source_zip(struct zip *za, struct zip *srcza, int srcidx, int flags,
if (len == 0)
len = -1;
if (start == 0 && len == -1)
if (start == 0 && len == -1 && (flags & ZIP_FL_RECOMPRESS) == 0)
flags |= ZIP_FL_COMPRESSED;
else
flags &= ~ZIP_FL_COMPRESSED;

9
ext/zip/lib/zip_stat.c

@ -1,11 +1,9 @@
/*
$NiH: zip_stat.c,v 1.3 2004/04/16 09:40:30 dillo Exp $
zip_stat.c -- get information about file by name
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_stat(struct zip *za, const char *fname, int flags, struct zip_stat *st)
{
int idx;

11
ext/zip/lib/zip_stat_index.c

@ -1,11 +1,9 @@
/*
$NiH: zip_stat_index.c,v 1.10 2007/04/24 14:04:19 dillo Exp $
zip_stat_index.c -- get information about file by index
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,11 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_stat_index(struct zip *za, int index, int flags, struct zip_stat *st)
{
const char *name;
@ -67,7 +64,7 @@ zip_stat_index(struct zip *za, int index, int flags, struct zip_stat *st)
_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
return -1;
}
st->crc = za->cdir->entry[index].crc;
st->size = za->cdir->entry[index].uncomp_size;
st->mtime = za->cdir->entry[index].last_mod;

8
ext/zip/lib/zip_stat_init.c

@ -1,11 +1,9 @@
/*
$NiH: zip_stat_init.c,v 1.1 2007/10/31 12:03:04 dillo Exp $
zip_stat_init.c -- initialize struct zip_stat.
Copyright (C) 2007 Dieter Baron and Thomas Klausner
Copyright (C) 2006-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -39,7 +37,7 @@
PHPZIPAPI void
ZIP_EXTERN(void)
zip_stat_init(struct zip_stat *st)
{
st->name = NULL;

10
ext/zip/lib/zip_strerror.c

@ -1,11 +1,9 @@
/*
$NiH: zip_strerror.c,v 1.1 2003/10/05 16:05:22 dillo Exp $
zip_sterror.c -- get string representation of zip error
Copyright (C) 1999, 2003 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -35,12 +33,10 @@
#include "zip.h"
#include "zipint.h"
PHPZIPAPI const char *
ZIP_EXTERN(const char *)
zip_strerror(struct zip *za)
{
return _zip_error_strerror(&za->error);

12
ext/zip/lib/zip_unchange.c

@ -1,11 +1,9 @@
/*
$NiH: zip_unchange.c,v 1.19 2007/04/23 13:21:18 wiz Exp $
zip_unchange.c -- undo changes to file in zip archive
Copyright (C) 1999, 2004, 2007 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -36,12 +34,12 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_unchange(struct zip *za, int idx)
{
return _zip_unchange(za, idx, 0);
@ -49,7 +47,7 @@ zip_unchange(struct zip *za, int idx)
PHPZIPAPI int
int
_zip_unchange(struct zip *za, int idx, int allow_duplicates)
{
int i;

12
ext/zip/lib/zip_unchange_all.c

@ -1,11 +1,9 @@
/*
$NiH: zip_unchange_all.c,v 1.10 2007/04/23 13:14:46 wiz Exp $
zip_unchange.c -- undo changes to all files in zip archive
Copyright (C) 1999, 2007 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2007 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -36,12 +34,12 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_unchange_all(struct zip *za)
{
int ret, i;
@ -49,7 +47,7 @@ zip_unchange_all(struct zip *za)
ret = 0;
for (i=0; i<za->nentry; i++)
ret |= _zip_unchange(za, i, 1);
ret |= zip_unchange_archive(za);
return ret;

12
ext/zip/lib/zip_unchange_archive.c

@ -1,11 +1,9 @@
/*
$NiH: zip_unchange_archive.c,v 1.1 2007/04/23 13:14:46 wiz Exp $
zip_unchange_archive.c -- undo global changes to ZIP archive
Copyright (C) 2007 Dieter Baron and Thomas Klausner
Copyright (C) 2006-2008 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -36,17 +34,19 @@
#include <stdlib.h>
#include "zip.h"
#include "zipint.h"
PHPZIPAPI int
ZIP_EXTERN(int)
zip_unchange_archive(struct zip *za)
{
free(za->ch_comment);
za->ch_comment = NULL;
za->ch_comment_len = -1;
za->ch_flags = za->flags;
return 0;
}

6
ext/zip/lib/zip_unchange_data.c

@ -1,11 +1,11 @@
/*
$NiH: zip_unchange_data.c,v 1.15 2004/12/22 16:32:00 dillo Exp $
$NiH: zip_unchange_data.c,v 1.14 2004/11/30 23:02:47 wiz Exp $
zip_unchange_data.c -- undo helper function
Copyright (C) 1999, 2004 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -39,7 +39,7 @@
#include "zipint.h"
PHPZIPAPI void
void
_zip_unchange_data(struct zip_entry *ze)
{
if (ze->source) {

9
ext/zip/lib/zip_win32.h

@ -2,16 +2,25 @@
#include <windows.h>
#include <io.h>
#include <fcntl.h>
#include <string.h>
#include <zconf.h>
#ifndef strcasecmp
# define strcmpi _strcmpi
#endif
#ifndef ssize_t
# define ssize_t SSIZE_T
#endif
#ifndef mode_t
# define mode_t int
#endif
#ifndef snprintf
# define snprintf _snprintf
#endif
#ifndef mkstemp
# define mkstemp(t) _creat(_mktemp(t), _S_IREAD|_S_IWRITE)
#endif

125
ext/zip/lib/zipint.h

@ -2,13 +2,11 @@
#define _HAD_ZIPINT_H
/*
$NiH: zipint.h,v 1.48 2007/04/24 14:04:19 dillo Exp $
zipint.h -- internal declarations.
Copyright (C) 1999, 2003, 2004, 2005, 2007 Dieter Baron and Thomas Klausner
Copyright (C) 1999-2008 Dieter Baron and Thomas Klausner
This file is part of libzip, a library to manipulate ZIP archives.
The authors can be contacted at <nih@giga.or.at>
The authors can be contacted at <libzip@nih.at>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@ -22,7 +20,7 @@
3. The names of the authors may not be used to endorse or promote
products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@ -39,18 +37,38 @@
#include <zlib.h>
#include "zip.h"
/* #defines that rename all zip_ functions and structs */
#include "zipint_alias.h"
BEGIN_EXTERN_C()
#ifdef PHP_WIN32
#include <windows.h>
#include <wchar.h>
#define _zip_rename(s, t) \
(!MoveFileExA((s), (t), \
MOVEFILE_COPY_ALLOWED|MOVEFILE_REPLACE_EXISTING))
#else
#define _zip_rename rename
#endif
#ifndef strcasecmp
# define strcmpi strcasecmp
#endif
#ifndef HAVE_FSEEKO
#define fseeko(s, o, w) (fseek((s), (long int)(o), (w)))
#endif
#ifndef HAVE_FTELLO
#define ftello(s) ((long)ftell((s)))
#endif
#define CENTRAL_MAGIC "PK\1\2"
#define LOCAL_MAGIC "PK\3\4"
#define EOCD_MAGIC "PK\5\6"
#define DATADES_MAGIC "PK\7\8"
#define TORRENT_SIG "TORRENTZIPPED-"
#define TORRENT_SIG_LEN 14
#define TORRENT_CRC_LEN 8
#define TORRENT_MEM_LEVEL 8
#define CDENTRYSIZE 46u
#define LENTRYSIZE 30
#define MAXCOMLEN 65536
@ -74,8 +92,8 @@ enum zip_state { ZIP_ST_UNCHANGED, ZIP_ST_DELETED, ZIP_ST_REPLACED,
/* directory entry: general purpose bit flags */
#define ZIP_GPBF_ENCRYPTED 0x0001 /* is encrypted */
#define ZIP_GPBF_DATA_DESCRIPTOR 0x0008 /* crc/size after file data */
#define ZIP_GPBF_STRONG_ENCRYPTION 0x0040 /* uses strong encryption */
#define ZIP_GPBF_USE_DATA_DESCRIPTOR 0x0008 /* uses crc and size from data header */
/* error information */
@ -92,6 +110,9 @@ struct zip {
FILE *zp; /* file */
struct zip_error error; /* error information */
unsigned int flags; /* archive global flags */
unsigned int ch_flags; /* changed archive global flags */
struct zip_cdir *cdir; /* central directory */
char *ch_comment; /* changed archive comment */
int ch_comment_len; /* length of changed zip archive
@ -112,13 +133,13 @@ struct zip_file {
int flags; /* -1: eof, >0: error */
int method; /* compression method */
long fpos; /* position within zip file (fread/fwrite) */
off_t fpos; /* position within zip file (fread/fwrite) */
unsigned long bytes_left; /* number of bytes left to read */
unsigned long cbytes_left; /* number of bytes of compressed data left */
unsigned long crc; /* CRC so far */
unsigned long crc_orig; /* CRC recorded in archive */
char *buffer;
z_stream *zstr;
};
@ -189,43 +210,49 @@ extern const int _zip_err_type[];
PHPZIPAPI void _zip_cdir_free(struct zip_cdir *);
PHPZIPAPI struct zip_cdir *_zip_cdir_new(int, struct zip_error *);
PHPZIPAPI int _zip_cdir_write(struct zip_cdir *, FILE *, struct zip_error *);
int _zip_cdir_compute_crc(struct zip *, uLong *);
void _zip_cdir_free(struct zip_cdir *);
struct zip_cdir *_zip_cdir_new(int, struct zip_error *);
int _zip_cdir_write(struct zip_cdir *, FILE *, struct zip_error *);
PHPZIPAPI void _zip_dirent_finalize(struct zip_dirent *);
PHPZIPAPI void _zip_dirent_init(struct zip_dirent *);
PHPZIPAPI int _zip_dirent_read(struct zip_dirent *, FILE *,
void _zip_dirent_finalize(struct zip_dirent *);
void _zip_dirent_init(struct zip_dirent *);
int _zip_dirent_read(struct zip_dirent *, FILE *,
unsigned char **, unsigned int, int, struct zip_error *);
PHPZIPAPI int _zip_dirent_write(struct zip_dirent *, FILE *, int, struct zip_error *);
PHPZIPAPI void _zip_entry_free(struct zip_entry *);
PHPZIPAPI void _zip_entry_init(struct zip *, int);
PHPZIPAPI struct zip_entry *_zip_entry_new(struct zip *);
PHPZIPAPI void _zip_error_clear(struct zip_error *);
PHPZIPAPI void _zip_error_copy(struct zip_error *, struct zip_error *);
PHPZIPAPI void _zip_error_fini(struct zip_error *);
PHPZIPAPI void _zip_error_get(struct zip_error *, int *, int *);
PHPZIPAPI void _zip_error_init(struct zip_error *);
PHPZIPAPI void _zip_error_set(struct zip_error *, int, int);
PHPZIPAPI const char *_zip_error_strerror(struct zip_error *);
PHPZIPAPI int _zip_file_fillbuf(void *, size_t, struct zip_file *);
PHPZIPAPI unsigned int _zip_file_get_offset(struct zip *, int);
PHPZIPAPI void _zip_free(struct zip *);
PHPZIPAPI const char *_zip_get_name(struct zip *, int, int, struct zip_error *);
PHPZIPAPI int _zip_local_header_read(struct zip *, int);
PHPZIPAPI void *_zip_memdup(const void *, size_t, struct zip_error *);
PHPZIPAPI int _zip_name_locate(struct zip *, const char *, int, struct zip_error *);
PHPZIPAPI struct zip *_zip_new(struct zip_error *);
PHPZIPAPI unsigned short _zip_read2(unsigned char **);
PHPZIPAPI unsigned int _zip_read4(unsigned char **);
PHPZIPAPI int _zip_replace(struct zip *, int, const char *, struct zip_source *);
PHPZIPAPI int _zip_set_name(struct zip *, int, const char *);
PHPZIPAPI int _zip_unchange(struct zip *, int, int);
PHPZIPAPI void _zip_unchange_data(struct zip_entry *);
END_EXTERN_C();
void _zip_dirent_torrent_normalize(struct zip_dirent *);
int _zip_dirent_write(struct zip_dirent *, FILE *, int, struct zip_error *);
void _zip_entry_free(struct zip_entry *);
void _zip_entry_init(struct zip *, int);
struct zip_entry *_zip_entry_new(struct zip *);
void _zip_error_clear(struct zip_error *);
void _zip_error_copy(struct zip_error *, struct zip_error *);
void _zip_error_fini(struct zip_error *);
void _zip_error_get(struct zip_error *, int *, int *);
void _zip_error_init(struct zip_error *);
void _zip_error_set(struct zip_error *, int, int);
const char *_zip_error_strerror(struct zip_error *);
int _zip_file_fillbuf(void *, size_t, struct zip_file *);
unsigned int _zip_file_get_offset(struct zip *, int);
int _zip_filerange_crc(FILE *, off_t, off_t, uLong *, struct zip_error *);
struct zip_source *_zip_source_file_or_p(struct zip *, const char *, FILE *,
off_t, off_t);
void _zip_free(struct zip *);
const char *_zip_get_name(struct zip *, int, int, struct zip_error *);
int _zip_local_header_read(struct zip *, int);
void *_zip_memdup(const void *, size_t, struct zip_error *);
int _zip_name_locate(struct zip *, const char *, int, struct zip_error *);
struct zip *_zip_new(struct zip_error *);
unsigned short _zip_read2(unsigned char **);
unsigned int _zip_read4(unsigned char **);
int _zip_replace(struct zip *, int, const char *, struct zip_source *);
int _zip_set_name(struct zip *, int, const char *);
int _zip_unchange(struct zip *, int, int);
void _zip_unchange_data(struct zip_entry *);
#endif /* zipint.h */
Loading…
Cancel
Save