Files
2021-11-25 21:14:43 -06:00

117 lines
3.9 KiB
Diff

Fix build with php81.
https://github.com/cataphract/php-rar/commit/ab26d285759e4c917879967b09976a44829ed570
--- rar_stream.c.orig
+++ rar_stream.c
@@ -784,7 +784,13 @@ static int _rar_get_archive_and_fragment(php_stream_wrapper *wrapper,
#if PHP_MAJOR_VERSION < 7
*archive = zend_resolve_path(tmp_archive, tmp_arch_len TSRMLS_CC);
#else
+# if PHP_VERSION_ID < 80100
zend_string *arc_str = zend_resolve_path(tmp_archive, tmp_arch_len);
+# else
+ zend_string *tmp_archive_str = zend_string_init_fast(tmp_archive, tmp_arch_len);
+ zend_string *arc_str = zend_resolve_path(tmp_archive_str);
+ zend_string_free(tmp_archive_str);
+# endif
if (arc_str != NULL) {
*archive = estrndup(arc_str->val, arc_str->len);
} else {
--- rararch.c.orig
+++ rararch.c
@@ -28,6 +28,7 @@
/* $Id$ */
#include "zend_types.h"
+#include <zend_API.h>
#ifdef __cplusplus
extern "C" {
#endif
@@ -962,6 +963,11 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_rararchive_setallowbroken, 0, 0, 1)
ZEND_ARG_INFO(0, allow_broken)
ZEND_END_ARG_INFO()
+#if PHP_MAJOR_VERSION >= 8
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_rararchive_getiterator, 0, 0, Traversable, 0)
+ZEND_END_ARG_INFO()
+#endif
+
ZEND_BEGIN_ARG_INFO(arginfo_rararchive_void, 0)
ZEND_END_ARG_INFO()
/* }}} */
@@ -981,7 +987,7 @@ static zend_function_entry php_rararch_class_functions[] = {
PHP_ME(rararch, __toString, arginfo_rararchive_void, ZEND_ACC_PUBLIC)
PHP_ME_MAPPING(__construct, rar_bogus_ctor, arginfo_rararchive_void, ZEND_ACC_PRIVATE | ZEND_ACC_CTOR)
#if PHP_MAJOR_VERSION >= 8
- PHP_ME(rararch, getIterator, arginfo_rararchive_void, ZEND_ACC_PUBLIC)
+ PHP_ME(rararch, getIterator, arginfo_rararchive_getiterator, ZEND_ACC_PUBLIC)
#endif
{NULL, NULL, NULL}
};
--- rarentry.c.orig
+++ rarentry.c
@@ -27,11 +27,10 @@
/* $Id$ */
-#ifdef __cplusplus
-extern "C" {
+#include <zend_types.h>
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
#endif
-
-#define _GNU_SOURCE
#include <string.h>
#include <php.h>
@@ -270,8 +269,8 @@ static void _rar_dos_date_to_text(unsigned dos_time, char *date_string) /* {{{ *
/* }}} */
/* {{{ Methods */
-/* {{{ proto bool RarEntry::extract(string dir [, string filepath = ''
- [, string password = NULL [, bool extended_data = FALSE]])
+/* {{{ public function extract(?string $dir, ?string $filepath = '',
+ ?string $password = null, bool $extended_data = false): void {}
Extract file from the archive */
PHP_METHOD(rarentry, extract)
{ /* lots of variables, but no need to be intimidated */
@@ -298,7 +297,7 @@ PHP_METHOD(rarentry, extract)
* password that's different from the one stored in the rar_file_t object*/
rar_cb_user_data cb_udata = {NULL};
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ss!b", &dir,
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!|s!s!b", &dir,
&dir_len, &filepath, &filepath_len, &password, &password_len,
&process_ed) == FAILURE ) {
return;
@@ -714,12 +713,21 @@ PHP_METHOD(rarentry, __toString)
/* }}} */
/* {{{ arginfo */
+#if PHP_MAJOR_VERSION < 8
ZEND_BEGIN_ARG_INFO_EX(arginfo_rarentry_extract, 0, 0, 1)
ZEND_ARG_INFO(0, path)
ZEND_ARG_INFO(0, filename)
ZEND_ARG_INFO(0, password)
ZEND_ARG_INFO(0, extended_data)
ZEND_END_ARG_INFO()
+#else
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_rarentry_extract, 0, 1, _IS_BOOL, 0)
+ ZEND_ARG_TYPE_INFO(0, dir, IS_STRING, 1)
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, filepath, IS_STRING, 1, "\'\'")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, password, IS_STRING, 1, "null")
+ ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, extended_data, _IS_BOOL, 0, "false")
+ZEND_END_ARG_INFO()
+#endif
ZEND_BEGIN_ARG_INFO_EX(arginfo_rarentry_getstream, 0, 0, 0)
ZEND_ARG_INFO(0, password)
@@ -829,7 +837,3 @@ void minit_rarentry(TSRMLS_D)
REG_RAR_CLASS_CONST_LONG("ATTRIBUTE_UNIX_SYM_LINK", 0x0A000L);
REG_RAR_CLASS_CONST_LONG("ATTRIBUTE_UNIX_SOCKET", 0x0C000L);
}
-
-#ifdef __cplusplus
-}
-#endif