diff options
Diffstat (limited to 'ext/zip/php_zip.c')
-rw-r--r-- | ext/zip/php_zip.c | 716 |
1 files changed, 346 insertions, 370 deletions
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index 9d704b0cbf..e2be7fc668 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -1,7 +1,5 @@ /* +----------------------------------------------------------------------+ - | PHP Version 7 | - +----------------------------------------------------------------------+ | Copyright (c) The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | @@ -30,6 +28,7 @@ #include "ext/standard/php_filestat.h" #include "zend_interfaces.h" #include "php_zip.h" +#include "php_zip_arginfo.h" /* zip_open is a macro for renaming libzip zipopen, so we need to use PHP_NAMED_FUNCTION */ static PHP_NAMED_FUNCTION(zif_zip_open); @@ -373,8 +372,8 @@ static int php_zip_parse_options(zval *options, zend_long *remove_all_path, char ze_zip_object *obj = Z_ZIP_P(object); \ intern = obj->za; \ if (!intern) { \ - php_error_docref(NULL, E_WARNING, "Invalid or uninitialized Zip object"); \ - RETURN_FALSE; \ + zend_value_error("Invalid or uninitialized Zip object"); \ + RETURN_THROWS(); \ } \ } /* }}} */ @@ -713,51 +712,6 @@ int php_zip_pcre(zend_string *regexp, char *path, int path_len, zval *return_val } /* }}} */ -/* {{{ arginfo */ -ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_open, 0, 0, 1) - ZEND_ARG_INFO(0, filename) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_close, 0, 0, 1) - ZEND_ARG_INFO(0, zip) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_read, 0, 0, 1) - ZEND_ARG_INFO(0, zip) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_entry_open, 0, 0, 2) - ZEND_ARG_INFO(0, zip_dp) - ZEND_ARG_INFO(0, zip_entry) - ZEND_ARG_INFO(0, mode) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_entry_close, 0, 0, 1) - ZEND_ARG_INFO(0, zip_ent) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_entry_read, 0, 0, 1) - ZEND_ARG_INFO(0, zip_entry) - ZEND_ARG_INFO(0, len) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_entry_name, 0, 0, 1) - ZEND_ARG_INFO(0, zip_entry) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_entry_compressedsize, 0, 0, 1) - ZEND_ARG_INFO(0, zip_entry) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_entry_filesize, 0, 0, 1) - ZEND_ARG_INFO(0, zip_entry) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_entry_compressionmethod, 0, 0, 1) - ZEND_ARG_INFO(0, zip_entry) -ZEND_END_ARG_INFO() -/* }}} */ - /* {{{ zend_function_entry */ static const zend_function_entry zip_functions[] = { ZEND_RAW_FENTRY("zip_open", zif_zip_open, arginfo_zip_open, 0) @@ -865,62 +819,36 @@ static zval *php_zip_property_reader(ze_zip_object *obj, zip_prop_handler *hnd, } /* }}} */ -static zval *php_zip_get_property_ptr_ptr(zval *object, zval *member, int type, void **cache_slot) /* {{{ */ +static zval *php_zip_get_property_ptr_ptr(zend_object *object, zend_string *name, int type, void **cache_slot) /* {{{ */ { ze_zip_object *obj; - zval tmp_member; zval *retval = NULL; zip_prop_handler *hnd = NULL; - if (Z_TYPE_P(member) != IS_STRING) { - zend_string *str = zval_try_get_string_func(member); - if (UNEXPECTED(!str)) { - return NULL; - } - ZVAL_STR(&tmp_member, str); - member = &tmp_member; - cache_slot = NULL; - } - - obj = Z_ZIP_P(object); + obj = php_zip_fetch_object(object); if (obj->prop_handler != NULL) { - hnd = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member)); + hnd = zend_hash_find_ptr(obj->prop_handler, name); } if (hnd == NULL) { - retval = zend_std_get_property_ptr_ptr(object, member, type, cache_slot); - } - - if (member == &tmp_member) { - zval_ptr_dtor_str(&tmp_member); + retval = zend_std_get_property_ptr_ptr(object, name, type, cache_slot); } return retval; } /* }}} */ -static zval *php_zip_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv) /* {{{ */ +static zval *php_zip_read_property(zend_object *object, zend_string *name, int type, void **cache_slot, zval *rv) /* {{{ */ { ze_zip_object *obj; - zval tmp_member; zval *retval = NULL; zip_prop_handler *hnd = NULL; - if (Z_TYPE_P(member) != IS_STRING) { - zend_string *str = zval_try_get_string_func(member); - if (UNEXPECTED(!str)) { - return &EG(uninitialized_zval); - } - ZVAL_STR(&tmp_member, str); - member = &tmp_member; - cache_slot = NULL; - } - - obj = Z_ZIP_P(object); + obj = php_zip_fetch_object(object); if (obj->prop_handler != NULL) { - hnd = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member)); + hnd = zend_hash_find_ptr(obj->prop_handler, name); } if (hnd != NULL) { @@ -929,38 +857,23 @@ static zval *php_zip_read_property(zval *object, zval *member, int type, void ** retval = &EG(uninitialized_zval); } } else { - retval = zend_std_read_property(object, member, type, cache_slot, rv); - } - - if (member == &tmp_member) { - zval_ptr_dtor_str(&tmp_member); + retval = zend_std_read_property(object, name, type, cache_slot, rv); } return retval; } /* }}} */ -static int php_zip_has_property(zval *object, zval *member, int type, void **cache_slot) /* {{{ */ +static int php_zip_has_property(zend_object *object, zend_string *name, int type, void **cache_slot) /* {{{ */ { ze_zip_object *obj; - zval tmp_member; zip_prop_handler *hnd = NULL; int retval = 0; - if (Z_TYPE_P(member) != IS_STRING) { - zend_string *str = zval_try_get_string_func(member); - if (UNEXPECTED(!str)) { - return 0; - } - ZVAL_STR(&tmp_member, str); - member = &tmp_member; - cache_slot = NULL; - } - - obj = Z_ZIP_P(object); + obj = php_zip_fetch_object(object); if (obj->prop_handler != NULL) { - hnd = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member)); + hnd = zend_hash_find_ptr(obj->prop_handler, name); } if (hnd != NULL) { @@ -978,18 +891,14 @@ static int php_zip_has_property(zval *object, zval *member, int type, void **cac zval_ptr_dtor(&tmp); } else { - retval = zend_std_has_property(object, member, type, cache_slot); - } - - if (member == &tmp_member) { - zval_ptr_dtor_str(&tmp_member); + retval = zend_std_has_property(object, name, type, cache_slot); } return retval; } /* }}} */ -static HashTable *php_zip_get_gc(zval *object, zval **gc_data, int *gc_data_count) /* {{{ */ +static HashTable *php_zip_get_gc(zend_object *object, zval **gc_data, int *gc_data_count) /* {{{ */ { *gc_data = NULL; *gc_data_count = 0; @@ -997,14 +906,14 @@ static HashTable *php_zip_get_gc(zval *object, zval **gc_data, int *gc_data_coun } /* }}} */ -static HashTable *php_zip_get_properties(zval *object)/* {{{ */ +static HashTable *php_zip_get_properties(zend_object *object)/* {{{ */ { ze_zip_object *obj; HashTable *props; zip_prop_handler *hnd; zend_string *key; - obj = Z_ZIP_P(object); + obj = php_zip_fetch_object(object); props = zend_std_get_properties(object); if (obj->prop_handler == NULL) { @@ -1024,6 +933,30 @@ static HashTable *php_zip_get_properties(zval *object)/* {{{ */ } /* }}} */ +#ifdef HAVE_PROGRESS_CALLBACK +static void _php_zip_progress_callback_free(void *ptr) +{ + ze_zip_object *obj = ptr; + + if (!Z_ISUNDEF(obj->progress_callback)) { + zval_ptr_dtor(&obj->progress_callback); + ZVAL_UNDEF(&obj->progress_callback); + } +} +#endif + +#ifdef HAVE_CANCEL_CALLBACK +static void _php_zip_cancel_callback_free(void *ptr) +{ + ze_zip_object *obj = ptr; + + if (!Z_ISUNDEF(obj->cancel_callback)) { + zval_ptr_dtor(&obj->cancel_callback); + ZVAL_UNDEF(&obj->cancel_callback); + } +} +#endif + static void php_zip_object_free_storage(zend_object *object) /* {{{ */ { ze_zip_object * intern = php_zip_fetch_object(object); @@ -1050,6 +983,16 @@ static void php_zip_object_free_storage(zend_object *object) /* {{{ */ efree(intern->buffers); } +#ifdef HAVE_PROGRESS_CALLBACK + /* if not properly called by libzip */ + _php_zip_progress_callback_free(intern); +#endif + +#ifdef HAVE_CANCEL_CALLBACK + /* if not properly called by libzip */ + _php_zip_cancel_callback_free(intern); +#endif + intern->za = NULL; zend_object_std_dtor(&intern->zo); @@ -1152,7 +1095,7 @@ static PHP_NAMED_FUNCTION(zif_zip_open) zend_string *filename; if (zend_parse_parameters(ZEND_NUM_ARGS(), "P", &filename) == FAILURE) { - return; + RETURN_THROWS(); } if (ZSTR_LEN(filename) == 0) { @@ -1191,11 +1134,11 @@ static PHP_NAMED_FUNCTION(zif_zip_close) zip_rsrc *z_rsrc = NULL; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &zip) == FAILURE) { - return; + RETURN_THROWS(); } if ((z_rsrc = (zip_rsrc *)zend_fetch_resource(Z_RES_P(zip), le_zip_dir_name, le_zip_dir)) == NULL) { - RETURN_FALSE; + RETURN_THROWS(); } /* really close the zip will break BC :-D */ @@ -1213,11 +1156,11 @@ static PHP_NAMED_FUNCTION(zif_zip_read) zip_rsrc *rsrc_int; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &zip_dp) == FAILURE) { - return; + RETURN_THROWS(); } if ((rsrc_int = (zip_rsrc *)zend_fetch_resource(Z_RES_P(zip_dp), le_zip_dir_name, le_zip_dir)) == NULL) { - RETURN_FALSE; + RETURN_THROWS(); } if (rsrc_int && rsrc_int->za) { @@ -1262,15 +1205,15 @@ static PHP_NAMED_FUNCTION(zif_zip_entry_open) zip_rsrc *z_rsrc; if (zend_parse_parameters(ZEND_NUM_ARGS(), "rr|s", &zip, &zip_entry, &mode, &mode_len) == FAILURE) { - return; + RETURN_THROWS(); } if ((zr_rsrc = (zip_read_rsrc *)zend_fetch_resource(Z_RES_P(zip_entry), le_zip_entry_name, le_zip_entry)) == NULL) { - RETURN_FALSE; + RETURN_THROWS(); } if ((z_rsrc = (zip_rsrc *)zend_fetch_resource(Z_RES_P(zip), le_zip_dir_name, le_zip_dir)) == NULL) { - RETURN_FALSE; + RETURN_THROWS(); } if (zr_rsrc->zf != NULL) { @@ -1289,11 +1232,11 @@ static PHP_NAMED_FUNCTION(zif_zip_entry_close) zip_read_rsrc * zr_rsrc; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &zip_entry) == FAILURE) { - return; + RETURN_THROWS(); } if ((zr_rsrc = (zip_read_rsrc *)zend_fetch_resource(Z_RES_P(zip_entry), le_zip_entry_name, le_zip_entry)) == NULL) { - RETURN_FALSE; + RETURN_THROWS(); } RETURN_BOOL(SUCCESS == zend_list_close(Z_RES_P(zip_entry))); @@ -1311,11 +1254,11 @@ static PHP_NAMED_FUNCTION(zif_zip_entry_read) int n = 0; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|l", &zip_entry, &len) == FAILURE) { - return; + RETURN_THROWS(); } if ((zr_rsrc = (zip_read_rsrc *)zend_fetch_resource(Z_RES_P(zip_entry), le_zip_entry_name, le_zip_entry)) == NULL) { - RETURN_FALSE; + RETURN_THROWS(); } if (len <= 0) { @@ -1331,7 +1274,7 @@ static PHP_NAMED_FUNCTION(zif_zip_entry_read) RETURN_NEW_STR(buffer); } else { zend_string_efree(buffer); - RETURN_EMPTY_STRING() + RETURN_EMPTY_STRING(); } } else { RETURN_FALSE; @@ -1345,11 +1288,11 @@ static void php_zip_entry_get_info(INTERNAL_FUNCTION_PARAMETERS, int opt) /* {{{ zip_read_rsrc * zr_rsrc; if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &zip_entry) == FAILURE) { - return; + RETURN_THROWS(); } if ((zr_rsrc = (zip_read_rsrc *)zend_fetch_resource(Z_RES_P(zip_entry), le_zip_entry_name, le_zip_entry)) == NULL) { - RETURN_FALSE; + RETURN_THROWS(); } if (!zr_rsrc->zf) { @@ -1439,7 +1382,7 @@ static ZIPARCHIVE_METHOD(open) ze_zip_object *ze_obj; if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|l", &filename, &flags) == FAILURE) { - return; + RETURN_THROWS(); } /* We do not use ZIP_FROM_OBJECT, zip init function here */ @@ -1496,7 +1439,7 @@ static ZIPARCHIVE_METHOD(setPassword) ZIP_FROM_OBJECT(intern, self); if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &password, &password_len) == FAILURE) { - return; + RETURN_THROWS(); } if (password_len < 1) { @@ -1521,6 +1464,10 @@ static ZIPARCHIVE_METHOD(close) ze_zip_object *ze_obj; int err; + if (zend_parse_parameters_none() == FAILURE) { + RETURN_THROWS(); + } + ZIP_FROM_OBJECT(intern, self); ze_obj = Z_ZIP_P(self); @@ -1555,6 +1502,10 @@ static ZIPARCHIVE_METHOD(count) zval *self = ZEND_THIS; zip_int64_t num; + if (zend_parse_parameters_none() == FAILURE) { + RETURN_THROWS(); + } + ZIP_FROM_OBJECT(intern, self); num = zip_get_num_entries(intern, 0); @@ -1575,6 +1526,10 @@ static ZIPARCHIVE_METHOD(getStatusString) zip_error_t *err; #endif + if (zend_parse_parameters_none() == FAILURE) { + RETURN_THROWS(); + } + ZIP_FROM_OBJECT(intern, self); #if LIBZIP_VERSION_MAJOR < 1 @@ -1606,7 +1561,7 @@ static ZIPARCHIVE_METHOD(addEmptyDir) if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &dirname, &dirname_len) == FAILURE) { - return; + RETURN_THROWS(); } if (dirname_len<1) { @@ -1659,12 +1614,12 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* if (type == 1) { if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|la", &pattern, &flags, &options) == FAILURE) { - return; + RETURN_THROWS(); } } else { if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|sa", &pattern, &path, &path_len, &options) == FAILURE) { - return; + RETURN_THROWS(); } } @@ -1682,6 +1637,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* size_t real_len = strlen(remove_path); if ((real_len > 1) && ((remove_path[real_len - 1] == '/') || (remove_path[real_len - 1] == '\\'))) { remove_path = estrndup(remove_path, real_len - 1); + remove_path_len -= 1; } } @@ -1707,8 +1663,8 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* file_stripped = ZSTR_VAL(basename); file_stripped_len = ZSTR_LEN(basename); } else if (remove_path && strstr(Z_STRVAL_P(zval_file), remove_path) != NULL) { - file_stripped = Z_STRVAL_P(zval_file) + remove_path_len + 1; - file_stripped_len = Z_STRLEN_P(zval_file) - remove_path_len - 1; + file_stripped = Z_STRVAL_P(zval_file) + remove_path_len; + file_stripped_len = Z_STRLEN_P(zval_file) - remove_path_len; } else { file_stripped = Z_STRVAL_P(zval_file); file_stripped_len = Z_STRLEN_P(zval_file); @@ -1778,7 +1734,7 @@ static ZIPARCHIVE_METHOD(addFile) if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|sll", &filename, &entry_name, &entry_name_len, &offset_start, &offset_len) == FAILURE) { - return; + RETURN_THROWS(); } if (ZSTR_LEN(filename) == 0) { @@ -1818,7 +1774,7 @@ static ZIPARCHIVE_METHOD(addFromString) if (zend_parse_parameters(ZEND_NUM_ARGS(), "sS", &name, &name_len, &buffer) == FAILURE) { - return; + RETURN_THROWS(); } ze_obj = Z_ZIP_P(self); @@ -1871,7 +1827,7 @@ static ZIPARCHIVE_METHOD(statName) ZIP_FROM_OBJECT(intern, self); if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|l", &name, &flags) == FAILURE) { - return; + RETURN_THROWS(); } PHP_ZIP_STAT_PATH(intern, ZSTR_VAL(name), ZSTR_LEN(name), flags, sb); @@ -1894,7 +1850,7 @@ static ZIPARCHIVE_METHOD(statIndex) if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", &index, &flags) == FAILURE) { - return; + RETURN_THROWS(); } if (zip_stat_index(intern, index, flags, &sb) != 0) { @@ -1917,7 +1873,7 @@ static ZIPARCHIVE_METHOD(locateName) ZIP_FROM_OBJECT(intern, self); if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|l", &name, &flags) == FAILURE) { - return; + RETURN_THROWS(); } if (ZSTR_LEN(name) < 1) { @@ -1947,7 +1903,7 @@ static ZIPARCHIVE_METHOD(getNameIndex) if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", &index, &flags) == FAILURE) { - return; + RETURN_THROWS(); } name = zip_get_name(intern, (int) index, flags); @@ -1972,7 +1928,7 @@ static ZIPARCHIVE_METHOD(setArchiveComment) ZIP_FROM_OBJECT(intern, self); if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &comment, &comment_len) == FAILURE) { - return; + RETURN_THROWS(); } if (comment_len > 0xffff) { @@ -2001,7 +1957,7 @@ static ZIPARCHIVE_METHOD(getArchiveComment) ZIP_FROM_OBJECT(intern, self); if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &flags) == FAILURE) { - return; + RETURN_THROWS(); } comment = zip_get_archive_comment(intern, &comment_len, (int)flags); @@ -2026,7 +1982,7 @@ static ZIPARCHIVE_METHOD(setCommentName) if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &name, &name_len, &comment, &comment_len) == FAILURE) { - return; + RETURN_THROWS(); } if (name_len < 1) { @@ -2061,7 +2017,7 @@ static ZIPARCHIVE_METHOD(setCommentIndex) if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &index, &comment, &comment_len) == FAILURE) { - return; + RETURN_THROWS(); } if (comment_len > 0xffff) { @@ -2092,7 +2048,7 @@ static ZIPARCHIVE_METHOD(setExternalAttributesName) if (zend_parse_parameters(ZEND_NUM_ARGS(), "sll|l", &name, &name_len, &opsys, &attr, &flags) == FAILURE) { - return; + RETURN_THROWS(); } if (name_len < 1) { @@ -2124,7 +2080,7 @@ static ZIPARCHIVE_METHOD(setExternalAttributesIndex) if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll|l", &index, &opsys, &attr, &flags) == FAILURE) { - return; + RETURN_THROWS(); } PHP_ZIP_STAT_INDEX(intern, index, 0, sb); @@ -2153,7 +2109,7 @@ static ZIPARCHIVE_METHOD(getExternalAttributesName) if (zend_parse_parameters(ZEND_NUM_ARGS(), "szz|l", &name, &name_len, &z_opsys, &z_attr, &flags) == FAILURE) { - return; + RETURN_THROWS(); } if (name_len < 1) { @@ -2189,7 +2145,7 @@ static ZIPARCHIVE_METHOD(getExternalAttributesIndex) if (zend_parse_parameters(ZEND_NUM_ARGS(), "lzz|l", &index, &z_opsys, &z_attr, &flags) == FAILURE) { - return; + RETURN_THROWS(); } PHP_ZIP_STAT_INDEX(intern, index, 0, sb); @@ -2220,7 +2176,7 @@ static ZIPARCHIVE_METHOD(setEncryptionName) if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|s", &name, &name_len, &method, &password, &password_len) == FAILURE) { - return; + RETURN_THROWS(); } if (name_len < 1) { @@ -2253,7 +2209,7 @@ static ZIPARCHIVE_METHOD(setEncryptionIndex) if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll|s", &index, &method, &password, &password_len) == FAILURE) { - return; + RETURN_THROWS(); } if (zip_file_set_encryption(intern, index, (zip_uint16_t)method, password)) { @@ -2281,7 +2237,7 @@ static ZIPARCHIVE_METHOD(getCommentName) if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|l", &name, &name_len, &flags) == FAILURE) { - return; + RETURN_THROWS(); } if (name_len < 1) { php_error_docref(NULL, E_NOTICE, "Empty string as entry name"); @@ -2313,7 +2269,7 @@ static ZIPARCHIVE_METHOD(getCommentIndex) if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", &index, &flags) == FAILURE) { - return; + RETURN_THROWS(); } PHP_ZIP_STAT_INDEX(intern, index, 0, sb); @@ -2337,7 +2293,7 @@ static ZIPARCHIVE_METHOD(setCompressionName) if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|l", &name, &name_len, &comp_method, &comp_flags) == FAILURE) { - return; + RETURN_THROWS(); } if (name_len < 1) { @@ -2370,7 +2326,7 @@ static ZIPARCHIVE_METHOD(setCompressionIndex) if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll|l", &index, &comp_method, &comp_flags) == FAILURE) { - return; + RETURN_THROWS(); } if (zip_set_file_compression(intern, (zip_uint64_t)index, @@ -2381,6 +2337,67 @@ static ZIPARCHIVE_METHOD(setCompressionIndex) } /* }}} */ +#ifdef HAVE_SET_MTIME +/* {{{ proto bool ZipArchive::setMtimeName(string name, int timestamp[, int flags]) +Set the modification time of a file in zip, using its name */ +static ZIPARCHIVE_METHOD(setMtimeName) + { + struct zip *intern; + zval *this = ZEND_THIS; + size_t name_len; + char *name; + zip_int64_t idx; + zend_long mtime, flags = 0; + + ZIP_FROM_OBJECT(intern, this); + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|l", + &name, &name_len, &mtime, &flags) == FAILURE) { + return; + } + + if (name_len < 1) { + php_error_docref(NULL, E_NOTICE, "Empty string as entry name"); + } + + idx = zip_name_locate(intern, name, 0); + if (idx < 0) { + RETURN_FALSE; + } + + if (zip_file_set_mtime(intern, (zip_uint64_t)idx, + (time_t)mtime, (zip_uint32_t)flags) != 0) { + RETURN_FALSE; + } + RETURN_TRUE; +} +/* }}} */ + +/* {{{ proto bool ZipArchive::setMtimeIndex(int index, int timestamp[, int flags]) +Set the modification time of a file in zip, using its index */ +static ZIPARCHIVE_METHOD(setMtimeIndex) +{ + struct zip *intern; + zval *this = ZEND_THIS; + zend_long index; + zend_long mtime, flags = 0; + + ZIP_FROM_OBJECT(intern, this); + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll|l", + &index, &mtime, &flags) == FAILURE) { + return; + } + + if (zip_file_set_mtime(intern, (zip_uint64_t)index, + (time_t)mtime, (zip_uint32_t)flags) != 0) { + RETURN_FALSE; + } + RETURN_TRUE; +} +/* }}} */ +#endif + /* {{{ proto bool ZipArchive::deleteIndex(int index) Delete a file using its index */ static ZIPARCHIVE_METHOD(deleteIndex) @@ -2392,7 +2409,7 @@ static ZIPARCHIVE_METHOD(deleteIndex) ZIP_FROM_OBJECT(intern, self); if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &index) == FAILURE) { - return; + RETURN_THROWS(); } if (index < 0) { @@ -2420,7 +2437,7 @@ static ZIPARCHIVE_METHOD(deleteName) ZIP_FROM_OBJECT(intern, self); if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name, &name_len) == FAILURE) { - return; + RETURN_THROWS(); } if (name_len < 1) { RETURN_FALSE; @@ -2448,7 +2465,7 @@ static ZIPARCHIVE_METHOD(renameIndex) ZIP_FROM_OBJECT(intern, self); if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &index, &new_name, &new_name_len) == FAILURE) { - return; + RETURN_THROWS(); } if (index < 0) { @@ -2479,7 +2496,7 @@ static ZIPARCHIVE_METHOD(renameName) ZIP_FROM_OBJECT(intern, self); if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &name, &name_len, &new_name, &new_name_len) == FAILURE) { - return; + RETURN_THROWS(); } if (new_name_len < 1) { @@ -2507,7 +2524,7 @@ static ZIPARCHIVE_METHOD(unchangeIndex) ZIP_FROM_OBJECT(intern, self); if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &index) == FAILURE) { - return; + RETURN_THROWS(); } if (index < 0) { @@ -2535,7 +2552,7 @@ static ZIPARCHIVE_METHOD(unchangeName) ZIP_FROM_OBJECT(intern, self); if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name, &name_len) == FAILURE) { - return; + RETURN_THROWS(); } if (name_len < 1) { @@ -2559,6 +2576,10 @@ static ZIPARCHIVE_METHOD(unchangeAll) struct zip *intern; zval *self = ZEND_THIS; + if (zend_parse_parameters_none() == FAILURE) { + RETURN_THROWS(); + } + ZIP_FROM_OBJECT(intern, self); if (zip_unchange_all(intern) != 0) { @@ -2576,6 +2597,10 @@ static ZIPARCHIVE_METHOD(unchangeArchive) struct zip *intern; zval *self = ZEND_THIS; + if (zend_parse_parameters_none() == FAILURE) { + RETURN_THROWS(); + } + ZIP_FROM_OBJECT(intern, self); if (zip_unchange_archive(intern) != 0) { @@ -2606,7 +2631,7 @@ static ZIPARCHIVE_METHOD(extractTo) int ret; if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|z", &pathto, &pathto_len, &zval_files) == FAILURE) { - return; + RETURN_THROWS(); } if (pathto_len < 1) { @@ -2695,12 +2720,12 @@ static void php_zip_get_from(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */ if (type == 1) { if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|ll", &filename, &len, &flags) == FAILURE) { - return; + RETURN_THROWS(); } PHP_ZIP_STAT_PATH(intern, ZSTR_VAL(filename), ZSTR_LEN(filename), flags, sb); } else { if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|ll", &index, &len, &flags) == FAILURE) { - return; + RETURN_THROWS(); } PHP_ZIP_STAT_INDEX(intern, index, 0, sb); } @@ -2767,7 +2792,7 @@ static ZIPARCHIVE_METHOD(getStream) ZIP_FROM_OBJECT(intern, self); if (zend_parse_parameters(ZEND_NUM_ARGS(), "P", &filename) == FAILURE) { - return; + RETURN_THROWS(); } if (zip_stat(intern, ZSTR_VAL(filename), 0, &sb) != 0) { @@ -2785,227 +2810,178 @@ static ZIPARCHIVE_METHOD(getStream) } /* }}} */ -/* {{{ arginfo */ -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_open, 0, 0, 1) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setpassword, 0, 0, 1) - ZEND_ARG_INFO(0, password) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_ziparchive__void, 0) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_addemptydir, 0, 0, 1) - ZEND_ARG_INFO(0, dirname) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_addglob, 0, 0, 1) - ZEND_ARG_INFO(0, pattern) - ZEND_ARG_INFO(0, flags) - ZEND_ARG_INFO(0, options) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_addpattern, 0, 0, 1) - ZEND_ARG_INFO(0, pattern) - ZEND_ARG_INFO(0, path) - ZEND_ARG_INFO(0, options) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_addfile, 0, 0, 1) - ZEND_ARG_INFO(0, filepath) - ZEND_ARG_INFO(0, entryname) - ZEND_ARG_INFO(0, start) - ZEND_ARG_INFO(0, length) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_addfromstring, 0, 0, 2) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, content) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_statname, 0, 0, 1) - ZEND_ARG_INFO(0, filename) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_statindex, 0, 0, 1) - ZEND_ARG_INFO(0, index) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setarchivecomment, 0, 0, 1) - ZEND_ARG_INFO(0, comment) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setcommentindex, 0, 0, 2) - ZEND_ARG_INFO(0, index) - ZEND_ARG_INFO(0, comment) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getcommentname, 0, 0, 1) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getcommentindex, 0, 0, 1) - ZEND_ARG_INFO(0, index) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_renameindex, 0, 0, 2) - ZEND_ARG_INFO(0, index) - ZEND_ARG_INFO(0, new_name) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_renamename, 0, 0, 2) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, new_name) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_unchangeindex, 0, 0, 1) - ZEND_ARG_INFO(0, index) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_unchangename, 0, 0, 1) - ZEND_ARG_INFO(0, name) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_extractto, 0, 0, 1) - ZEND_ARG_INFO(0, pathto) - ZEND_ARG_INFO(0, files) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getfromname, 0, 0, 1) - ZEND_ARG_INFO(0, entryname) - ZEND_ARG_INFO(0, len) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getfromindex, 0, 0, 1) - ZEND_ARG_INFO(0, index) - ZEND_ARG_INFO(0, len) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getarchivecomment, 0, 0, 0) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setcommentname, 0, 0, 2) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, comment) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getstream, 0, 0, 1) - ZEND_ARG_INFO(0, entryname) -ZEND_END_ARG_INFO() +#ifdef HAVE_PROGRESS_CALLBACK +static void _php_zip_progress_callback(zip_t *arch, double state, void *ptr) +{ + zval cb_args[1]; + zval cb_retval; + ze_zip_object *obj = ptr; + + ZVAL_DOUBLE(&cb_args[0], state); + if (call_user_function_ex(EG(function_table), NULL, &obj->progress_callback, &cb_retval, 1, cb_args, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) { + zval_ptr_dtor(&cb_retval); + } +} -#ifdef ZIP_OPSYS_DEFAULT -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setextattrname, 0, 0, 3) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, opsys) - ZEND_ARG_INFO(0, attr) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setextattrindex, 0, 0, 3) - ZEND_ARG_INFO(0, index) - ZEND_ARG_INFO(0, opsys) - ZEND_ARG_INFO(0, attr) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getextattrname, 0, 0, 3) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(1, opsys) - ZEND_ARG_INFO(1, attr) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_getextattrindex, 0, 0, 3) - ZEND_ARG_INFO(0, index) - ZEND_ARG_INFO(1, opsys) - ZEND_ARG_INFO(1, attr) - ZEND_ARG_INFO(0, flags) -ZEND_END_ARG_INFO() -#endif /* ifdef ZIP_OPSYS_DEFAULT */ -/* }}} */ +/* {{{ proto bool ZipArchive::registerProgressCallback(double rate, callable callback) +register a progression callback: void callback(double state); */ +static ZIPARCHIVE_METHOD(registerProgressCallback) +{ + struct zip *intern; + zval *self = getThis(); + double rate; + zval *callback; + ze_zip_object *obj; -#ifdef HAVE_ENCRYPTION -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setencryption_name, 0, 0, 2) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, method) - ZEND_ARG_INFO(0, password) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setencryption_index, 0, 0, 2) - ZEND_ARG_INFO(0, index) - ZEND_ARG_INFO(0, method) - ZEND_ARG_INFO(0, password) -ZEND_END_ARG_INFO() + if (!self) { + RETURN_FALSE; + } + + ZIP_FROM_OBJECT(intern, self); + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "dz", &rate, &callback) == FAILURE) { + return; + } + + /* callable? */ + if (!zend_is_callable(callback, 0, NULL)) { + zend_string *callback_name = zend_get_callable_name(callback); + php_error_docref(NULL, E_WARNING, "Invalid callback '%s'", ZSTR_VAL(callback_name)); + zend_string_release_ex(callback_name, 0); + RETURN_FALSE; + } + + obj = Z_ZIP_P(self); + + /* free if called twice */ + _php_zip_progress_callback_free(obj); + + /* register */ + ZVAL_COPY(&obj->progress_callback, callback); + if (zip_register_progress_callback_with_state(intern, rate, _php_zip_progress_callback, _php_zip_progress_callback_free, obj)) { + RETURN_FALSE; + } + + RETURN_TRUE; +} +/* }}} */ #endif -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setcompname, 0, 0, 2) - ZEND_ARG_INFO(0, name) - ZEND_ARG_INFO(0, method) - ZEND_ARG_INFO(0, compflags) -ZEND_END_ARG_INFO() +#ifdef HAVE_CANCEL_CALLBACK +static int _php_zip_cancel_callback(zip_t *arch, void *ptr) +{ + zval cb_retval; + int retval = 0; + ze_zip_object *obj = ptr; + + if (call_user_function_ex(EG(function_table), NULL, &obj->cancel_callback, &cb_retval, 0, NULL, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) { + retval = zval_get_long(&cb_retval); + zval_ptr_dtor(&cb_retval); + } -ZEND_BEGIN_ARG_INFO_EX(arginfo_ziparchive_setcompindex, 0, 0, 2) - ZEND_ARG_INFO(0, index) - ZEND_ARG_INFO(0, method) - ZEND_ARG_INFO(0, compflags) -ZEND_END_ARG_INFO() + return retval; +} + +/* {{{ proto bool ZipArchive::registerCancelCallback(callable callback) +register a progression callback: int callback(double state); */ +static ZIPARCHIVE_METHOD(registerCancelCallback) +{ + struct zip *intern; + zval *self = getThis(); + zval *callback; + ze_zip_object *obj; + + if (!self) { + RETURN_FALSE; + } + + ZIP_FROM_OBJECT(intern, self); + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &callback) == FAILURE) { + return; + } + + /* callable? */ + if (!zend_is_callable(callback, 0, NULL)) { + zend_string *callback_name = zend_get_callable_name(callback); + php_error_docref(NULL, E_WARNING, "Invalid callback '%s'", ZSTR_VAL(callback_name)); + zend_string_release_ex(callback_name, 0); + RETURN_FALSE; + } + + obj = Z_ZIP_P(self); + + /* free if called twice */ + _php_zip_cancel_callback_free(obj); + + /* register */ + ZVAL_COPY(&obj->cancel_callback, callback); + if (zip_register_cancel_callback_with_state(intern, _php_zip_cancel_callback, _php_zip_cancel_callback_free, obj)) { + RETURN_FALSE; + } + + RETURN_TRUE; +} +/* }}} */ +#endif /* {{{ ze_zip_object_class_functions */ static const zend_function_entry zip_class_functions[] = { - ZIPARCHIVE_ME(open, arginfo_ziparchive_open, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(setPassword, arginfo_ziparchive_setpassword, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(close, arginfo_ziparchive__void, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(count, arginfo_ziparchive__void, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(getStatusString, arginfo_ziparchive__void, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(addEmptyDir, arginfo_ziparchive_addemptydir, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(addFromString, arginfo_ziparchive_addfromstring, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(addFile, arginfo_ziparchive_addfile, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(addGlob, arginfo_ziparchive_addglob, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(addPattern, arginfo_ziparchive_addpattern, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(renameIndex, arginfo_ziparchive_renameindex, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(renameName, arginfo_ziparchive_renamename, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(setArchiveComment, arginfo_ziparchive_setarchivecomment, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(getArchiveComment, arginfo_ziparchive_getarchivecomment, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(setCommentIndex, arginfo_ziparchive_setcommentindex, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(setCommentName, arginfo_ziparchive_setcommentname, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(getCommentIndex, arginfo_ziparchive_getcommentindex, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(getCommentName, arginfo_ziparchive_getcommentname, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(deleteIndex, arginfo_ziparchive_unchangeindex, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(deleteName, arginfo_ziparchive_unchangename, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(statName, arginfo_ziparchive_statname, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(statIndex, arginfo_ziparchive_statindex, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(locateName, arginfo_ziparchive_statname, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(getNameIndex, arginfo_ziparchive_statindex, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(unchangeArchive, arginfo_ziparchive__void, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(unchangeAll, arginfo_ziparchive__void, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(unchangeIndex, arginfo_ziparchive_unchangeindex, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(unchangeName, arginfo_ziparchive_unchangename, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(extractTo, arginfo_ziparchive_extractto, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(getFromName, arginfo_ziparchive_getfromname, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(getFromIndex, arginfo_ziparchive_getfromindex, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(getStream, arginfo_ziparchive_getstream, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(open, arginfo_class_ZipArchive_open, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(setPassword, arginfo_class_ZipArchive_setPassword, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(close, arginfo_class_ZipArchive_close, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(count, arginfo_class_ZipArchive_count, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(getStatusString, arginfo_class_ZipArchive_getStatusString, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(addEmptyDir, arginfo_class_ZipArchive_addEmptyDir, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(addFromString, arginfo_class_ZipArchive_addFromString, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(addFile, arginfo_class_ZipArchive_addFile, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(addGlob, arginfo_class_ZipArchive_addGlob, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(addPattern, arginfo_class_ZipArchive_addPattern, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(renameIndex, arginfo_class_ZipArchive_renameIndex, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(renameName, arginfo_class_ZipArchive_renameName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(setArchiveComment, arginfo_class_ZipArchive_setArchiveComment, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(getArchiveComment, arginfo_class_ZipArchive_getArchiveComment, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(setCommentIndex, arginfo_class_ZipArchive_setCommentIndex, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(setCommentName, arginfo_class_ZipArchive_setCommentName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(getCommentIndex, arginfo_class_ZipArchive_getCommentIndex, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(getCommentName, arginfo_class_ZipArchive_getCommentName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(deleteIndex, arginfo_class_ZipArchive_deleteIndex, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(deleteName, arginfo_class_ZipArchive_deleteName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(statName, arginfo_class_ZipArchive_statName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(statIndex, arginfo_class_ZipArchive_statIndex, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(locateName, arginfo_class_ZipArchive_locateName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(getNameIndex, arginfo_class_ZipArchive_getNameIndex, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(unchangeArchive, arginfo_class_ZipArchive_unchangeArchive, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(unchangeAll, arginfo_class_ZipArchive_unchangeAll, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(unchangeIndex, arginfo_class_ZipArchive_unchangeIndex, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(unchangeName, arginfo_class_ZipArchive_unchangeName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(extractTo, arginfo_class_ZipArchive_extractTo, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(getFromName, arginfo_class_ZipArchive_getFromName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(getFromIndex, arginfo_class_ZipArchive_getFromIndex, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(getStream, arginfo_class_ZipArchive_getStream, ZEND_ACC_PUBLIC) #ifdef ZIP_OPSYS_DEFAULT - ZIPARCHIVE_ME(setExternalAttributesName, arginfo_ziparchive_setextattrname, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(setExternalAttributesIndex, arginfo_ziparchive_setextattrindex, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(getExternalAttributesName, arginfo_ziparchive_getextattrname, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(getExternalAttributesIndex, arginfo_ziparchive_getextattrindex, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(setExternalAttributesName, arginfo_class_ZipArchive_setExternalAttributesName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(setExternalAttributesIndex, arginfo_class_ZipArchive_setExternalAttributesIndex, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(getExternalAttributesName, arginfo_class_ZipArchive_getExternalAttributesName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(getExternalAttributesIndex, arginfo_class_ZipArchive_getExternalAttributesIndex, ZEND_ACC_PUBLIC) +#endif + ZIPARCHIVE_ME(setCompressionName, arginfo_class_ZipArchive_setCompressionName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(setCompressionIndex, arginfo_class_ZipArchive_setCompressionIndex, ZEND_ACC_PUBLIC) +#ifdef HAVE_SET_MTIME + ZIPARCHIVE_ME(setMtimeName, arginfo_class_ZipArchive_setMtimeName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(setMtimeIndex, arginfo_class_ZipArchive_setMtimeIndex, ZEND_ACC_PUBLIC) #endif - ZIPARCHIVE_ME(setCompressionName, arginfo_ziparchive_setcompname, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(setCompressionIndex, arginfo_ziparchive_setcompindex, ZEND_ACC_PUBLIC) #ifdef HAVE_ENCRYPTION - ZIPARCHIVE_ME(setEncryptionName, arginfo_ziparchive_setencryption_name, ZEND_ACC_PUBLIC) - ZIPARCHIVE_ME(setEncryptionIndex, arginfo_ziparchive_setencryption_index, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(setEncryptionName, arginfo_class_ZipArchive_setEncryptionName, ZEND_ACC_PUBLIC) + ZIPARCHIVE_ME(setEncryptionIndex, arginfo_class_ZipArchive_setEncryptionIndex, ZEND_ACC_PUBLIC) #endif +#ifdef HAVE_PROGRESS_CALLBACK + ZIPARCHIVE_ME(registerProgressCallback, arginfo_class_ZipArchive_registerProgressCallback, ZEND_ACC_PUBLIC) +#endif +#ifdef HAVE_CANCEL_CALLBACK + ZIPARCHIVE_ME(registerCancelCallback, arginfo_class_ZipArchive_registerCancelCallback, ZEND_ACC_PUBLIC) +#endif + PHP_FE_END }; /* }}} */ |