summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemi Collet <fedora@famillecollet.com>2013-10-11 10:19:18 +0200
committerRemi Collet <fedora@famillecollet.com>2013-10-11 10:19:18 +0200
commit5072438c00513116dba4227fa69e7c753b8f18b0 (patch)
tree64d0861efd89351788c6fe522ce65b9e65f45def
php-pecl-quickhash: 1.0.0 - New package
-rw-r--r--Makefile4
-rw-r--r--php-pecl-quickhash.spec181
-rw-r--r--quickhash-pr4.patch625
3 files changed, 810 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..13af741
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,4 @@
+SRCDIR := $(shell pwd)
+NAME := $(shell basename $(SRCDIR))
+include ../../../common/Makefile
+
diff --git a/php-pecl-quickhash.spec b/php-pecl-quickhash.spec
new file mode 100644
index 0000000..c53cb45
--- /dev/null
+++ b/php-pecl-quickhash.spec
@@ -0,0 +1,181 @@
+# spec file for php-pecl-quickhash
+#
+# Copyright (c) 2013 Remi Collet
+# License: CC-BY-SA
+# http://creativecommons.org/licenses/by-sa/3.0/
+#
+# Please, preserve the changelog entries
+#
+%{!?php_inidir: %{expand: %%global php_inidir %{_sysconfdir}/php.d}}
+%{!?__pecl: %{expand: %%global __pecl %{_bindir}/pecl}}
+
+%global with_zts 0%{?__ztsphp:1}
+%global pecl_name quickhash
+
+Summary: Set of specific strongly-typed classes for sets and hashing
+Name: php-pecl-%{pecl_name}
+Version: 1.0.0
+Release: 1%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}
+License: PHP
+Group: Development/Languages
+URL: http://pecl.php.net/package/%{pecl_name}
+Source0: http://pecl.php.net/get/%{pecl_name}-%{version}.tgz
+
+# https://github.com/derickr/quickhash/pull/4
+Patch0: %{pecl_name}-pr4.patch
+
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+BuildRequires: php-devel
+BuildRequires: php-pear
+
+Requires(post): %{__pecl}
+Requires(postun): %{__pecl}
+Requires: php(zend-abi) = %{php_zend_api}
+Requires: php(api) = %{php_core_api}
+
+Provides: php-%{pecl_name} = %{version}
+Provides: php-%{pecl_name}%{?_isa} = %{version}
+Provides: php-pecl(%{pecl_name}) = %{version}
+Provides: php-pecl(%{pecl_name})%{?_isa} = %{version}
+
+# Filter shared private
+%{?filter_provides_in: %filter_provides_in %{_libdir}/.*\.so$}
+%{?filter_setup}
+
+
+%description
+This extension contains four classes for managing: an integer set, an integer
+hash, integer to string hash and a string to integer hash. The main features
+are low memory consumption and fast serialization and deserialization of
+the sets and hashes.
+
+Documentation: http://php.net/quickhash
+
+
+%prep
+%setup -q -c
+mv %{pecl_name}-%{version} NTS
+
+cd NTS
+%patch0 -p1
+
+# Sanity check, really often broken
+extver=$(sed -n '/#define PHP_QUICKHASH_VERSION/{s/.* "//;s/".*$//;p}' php_quickhash.h)
+if test "x${extver}" != "x%{version}%{?prever:-%{prever}}"; then
+ : Error: Upstream extension version is ${extver}, expecting %{version}%{?prever:-%{prever}}.
+ exit 1
+fi
+cd ..
+
+%if %{with_zts}
+# Duplicate source tree for NTS / ZTS build
+cp -pr NTS ZTS
+%endif
+
+# Create configuration file
+cat > %{pecl_name}.ini << 'EOF'
+; Enable %{pecl_name} extension module
+extension=%{pecl_name}.so
+EOF
+
+
+%build
+cd NTS
+%{_bindir}/phpize
+%configure \
+ --with-libdir=%{_lib} \
+ --with-php-config=%{_bindir}/php-config
+
+make %{?_smp_mflags}
+
+%if %{with_zts}
+cd ../ZTS
+%{_bindir}/zts-phpize
+%configure \
+ --with-libdir=%{_lib} \
+ --with-php-config=%{_bindir}/zts-php-config
+
+make %{?_smp_mflags}
+%endif
+
+
+%install
+rm -rf %{buildroot}
+
+make -C NTS install INSTALL_ROOT=%{buildroot}
+
+# install config file
+install -D -m 644 %{pecl_name}.ini %{buildroot}%{php_inidir}/%{pecl_name}.ini
+
+# Install XML package description
+install -D -m 644 package.xml %{buildroot}%{pecl_xmldir}/%{name}.xml
+
+%if %{with_zts}
+make -C ZTS install INSTALL_ROOT=%{buildroot}
+
+install -D -m 644 %{pecl_name}.ini %{buildroot}%{php_ztsinidir}/%{pecl_name}.ini
+%endif
+
+
+%post
+%{pecl_install} %{pecl_xmldir}/%{name}.xml >/dev/null || :
+
+
+%postun
+if [ $1 -eq 0 ] ; then
+ %{pecl_uninstall} %{pecl_name} >/dev/null || :
+fi
+
+
+%check
+: Minimal load test for NTS extension
+cd NTS
+%{_bindir}/php --no-php-ini \
+ --define extension=modules/%{pecl_name}.so \
+ --modules | grep %{pecl_name}
+
+: Upstream test suite for NTS extension
+TEST_PHP_EXECUTABLE=%{_bindir}/php \
+TEST_PHP_ARGS="-n -d extension=$PWD/modules/%{pecl_name}.so" \
+NO_INTERACTION=1 \
+REPORT_EXIT_STATUS=1 \
+%{_bindir}/php -n run-tests.php
+
+
+%if %{with_zts}
+: Minimal load test for ZTS extension
+cd ../ZTS
+%{__ztsphp} --no-php-ini \
+ --define extension=modules/%{pecl_name}.so \
+ --modules | grep %{pecl_name}
+
+: Upstream test suite for ZTS extension
+TEST_PHP_EXECUTABLE=%{__ztsphp} \
+TEST_PHP_ARGS="-n -d extension=$PWD/modules/%{pecl_name}.so" \
+NO_INTERACTION=1 \
+REPORT_EXIT_STATUS=1 \
+%{__ztsphp} -n run-tests.php
+%endif
+
+
+%clean
+rm -rf %{buildroot}
+
+
+%files
+%defattr(-,root,root,-)
+%doc NTS/{LICENSE,CREDITS}
+%{pecl_xmldir}/%{name}.xml
+%config(noreplace) %{php_inidir}/%{pecl_name}.ini
+%{php_extdir}/%{pecl_name}.so
+
+%if %{with_zts}
+%config(noreplace) %{php_ztsinidir}/%{pecl_name}.ini
+%{php_ztsextdir}/%{pecl_name}.so
+%endif
+
+
+%changelog
+* Fri Oct 11 2013 Remi Collet <remi@fedoraproject.org> - 1.0.0-1
+- initial package, version 1.0.0 (stable)
+- open https://github.com/derickr/quickhash/pull/4
diff --git a/quickhash-pr4.patch b/quickhash-pr4.patch
new file mode 100644
index 0000000..447122f
--- /dev/null
+++ b/quickhash-pr4.patch
@@ -0,0 +1,625 @@
+From ea1f197b7e5d96fc09f02bb7fc382e28b3c4fc86 Mon Sep 17 00:00:00 2001
+From: Remi Collet <fedora@famillecollet.com>
+Date: Thu, 10 Oct 2013 15:36:12 +0200
+Subject: [PATCH 1/5] Fix iterator for PHP 5.5
+
+---
+ qh_iterator.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/qh_iterator.c b/qh_iterator.c
+index c11d62d..ae6d9b5 100644
+--- a/qh_iterator.c
++++ b/qh_iterator.c
+@@ -84,6 +84,18 @@ static void qh_intset_it_current_data(zend_object_iterator *iter, zval ***data T
+ *data = &iterator->current_value;
+ }
+
++#if ZEND_MODULE_API_NO >= 20121212
++static void qh_intset_it_current_key(zend_object_iterator *iter, zval *key TSRMLS_DC)
++{
++ qh_intset_it *iterator = (qh_intset_it *)iter;
++ qhi *hash = (qhi* ) iterator->intern.data;
++
++ if (hash->key_type == QHI_KEY_TYPE_STRING) {
++ ZVAL_STRING(key, estrndup(hash->keys.values + iterator->iterator.key, strlen(hash->keys.values + iterator->iterator.key)), 0);
++ } else {
++ ZVAL_LONG(key, iterator->iterator.key);
++ }
++#else
+ static int qh_intset_it_current_key(zend_object_iterator *iter, char **str_key, uint *str_key_len, ulong *int_key TSRMLS_DC)
+ {
+ qh_intset_it *iterator = (qh_intset_it *)iter;
+@@ -97,6 +109,7 @@ static int qh_intset_it_current_key(zend_object_iterator *iter, char **str_key,
+ *int_key = iterator->iterator.key;
+ return HASH_KEY_IS_LONG;
+ }
++#endif
+ }
+
+ static void qh_intset_it_move_forward(zend_object_iterator *iter TSRMLS_DC)
+--
+1.8.4
+
+
+From c8493e199fb05f8b0bf85d51548ff37c69956ceb Mon Sep 17 00:00:00 2001
+From: Remi Collet <fedora@famillecollet.com>
+Date: Thu, 10 Oct 2013 16:19:05 +0200
+Subject: [PATCH 4/5] fix deprecated warnings php_set_error_handling
+
+---
+ qh_inthash.c | 16 ++++++++--------
+ qh_intset.c | 20 ++++++++++----------
+ qh_intstringhash.c | 20 ++++++++++----------
+ qh_stringinthash.c | 20 ++++++++++----------
+ quickhash.h | 7 +++++++
+ 5 files changed, 45 insertions(+), 38 deletions(-)
+
+diff --git a/qh_inthash.c b/qh_inthash.c
+index 6c01343..b2eea41 100644
+--- a/qh_inthash.c
++++ b/qh_inthash.c
+@@ -301,7 +301,7 @@ static uint32_t qh_inthash_initialize_from_file(php_qh_inthash_obj *obj, php_str
+ long size = 0, flags = 0;
+ php_stream *stream;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &filename, &filename_len, &size, &flags) == FAILURE) {
+ return;
+ }
+@@ -316,7 +316,7 @@ static uint32_t qh_inthash_initialize_from_file(php_qh_inthash_obj *obj, php_str
+ qh_inthash_initialize_from_file(zend_object_store_get_object(return_value TSRMLS_CC), stream, size, flags TSRMLS_CC);
+ php_stream_close(stream);
+ }
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -340,7 +340,7 @@ int qh_inthash_save_to_file(php_stream *stream, php_qh_inthash_obj *obj)
+ php_qh_inthash_obj *inthash_obj;
+ php_stream *stream;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, qh_ce_inthash, &filename, &filename_len) == FAILURE) {
+ return;
+ }
+@@ -356,7 +356,7 @@ int qh_inthash_save_to_file(php_stream *stream, php_qh_inthash_obj *obj)
+ qh_inthash_save_to_file(stream, inthash_obj);
+ php_stream_close(stream);
+ }
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -407,14 +407,14 @@ static uint32_t qh_inthash_initialize_from_string(php_qh_inthash_obj *obj, char
+ int contents_len;
+ long size = 0, flags = 0;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &contents, &contents_len, &size, &flags) == FAILURE) {
+ return;
+ }
+
+ qh_instantiate(qh_ce_inthash, return_value TSRMLS_CC);
+ qh_inthash_initialize_from_string(zend_object_store_get_object(return_value TSRMLS_CC), contents, contents_len, size, flags TSRMLS_CC);
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -440,7 +440,7 @@ char *qh_inthash_save_to_string(uint32_t *string_len, php_qh_inthash_obj *obj)
+ char *string;
+ uint32_t string_len;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, qh_ce_inthash) == FAILURE) {
+ return;
+ }
+@@ -448,7 +448,7 @@ char *qh_inthash_save_to_string(uint32_t *string_len, php_qh_inthash_obj *obj)
+ inthash_obj = (php_qh_inthash_obj *) zend_object_store_get_object(object TSRMLS_CC);
+
+ string = qh_inthash_save_to_string(&string_len, inthash_obj);
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ RETURN_STRINGL(string, string_len, 0);
+ }
+ /* }}} */
+diff --git a/qh_intset.c b/qh_intset.c
+index 6d22a1b..43200b8 100644
+--- a/qh_intset.c
++++ b/qh_intset.c
+@@ -186,13 +186,13 @@ static int qh_intset_initialize(php_qh_intset_obj *obj, long size, long flags TS
+ long size;
+ long flags = 0;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &size, &flags) == SUCCESS) {
+ if (!qh_intset_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), size, flags TSRMLS_CC)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not initialize set.");
+ }
+ }
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -297,7 +297,7 @@ static uint32_t qh_intset_initialize_from_file(php_qh_intset_obj *obj, php_strea
+ long size = 0, flags = 0;
+ php_stream *stream;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &filename, &filename_len, &size, &flags) == FAILURE) {
+ return;
+ }
+@@ -312,7 +312,7 @@ static uint32_t qh_intset_initialize_from_file(php_qh_intset_obj *obj, php_strea
+ qh_intset_initialize_from_file(zend_object_store_get_object(return_value TSRMLS_CC), stream, size, flags TSRMLS_CC);
+ php_stream_close(stream);
+ }
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -336,7 +336,7 @@ int qh_intset_save_to_file(php_stream *stream, php_qh_intset_obj *obj)
+ php_qh_intset_obj *intset_obj;
+ php_stream *stream;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, qh_ce_intset, &filename, &filename_len) == FAILURE) {
+ return;
+ }
+@@ -352,7 +352,7 @@ int qh_intset_save_to_file(php_stream *stream, php_qh_intset_obj *obj)
+ qh_intset_save_to_file(stream, intset_obj);
+ php_stream_close(stream);
+ }
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -394,14 +394,14 @@ static uint32_t qh_intset_initialize_from_string(php_qh_intset_obj *obj, char *c
+ int contents_len;
+ long size = 0, flags = 0;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &contents, &contents_len, &size, &flags) == FAILURE) {
+ return;
+ }
+
+ qh_instantiate(qh_ce_intset, return_value TSRMLS_CC);
+ qh_intset_initialize_from_string(zend_object_store_get_object(return_value TSRMLS_CC), contents, contents_len, size, flags TSRMLS_CC);
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -427,7 +427,7 @@ char *qh_intset_save_to_string(uint32_t *string_len, php_qh_intset_obj *obj)
+ char *string;
+ uint32_t string_len;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, qh_ce_intset) == FAILURE) {
+ return;
+ }
+@@ -435,7 +435,7 @@ char *qh_intset_save_to_string(uint32_t *string_len, php_qh_intset_obj *obj)
+ intset_obj = (php_qh_intset_obj *) zend_object_store_get_object(object TSRMLS_CC);
+
+ string = qh_intset_save_to_string(&string_len, intset_obj);
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ RETURN_STRINGL(string, string_len, 0);
+ }
+ /* }}} */
+diff --git a/qh_intstringhash.c b/qh_intstringhash.c
+index e74fe8d..77d21f8 100644
+--- a/qh_intstringhash.c
++++ b/qh_intstringhash.c
+@@ -203,13 +203,13 @@ static int qh_intstringhash_initialize(php_qh_intset_obj *obj, long size, long f
+ long size;
+ long flags = 0;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &size, &flags) == SUCCESS) {
+ if (!qh_intstringhash_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), size, flags TSRMLS_CC)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not initialize hash.");
+ }
+ }
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -323,7 +323,7 @@ static uint32_t qh_intstringhash_initialize_from_file(php_qh_intstringhash_obj *
+ long size = 0, flags = 0;
+ php_stream *stream;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &filename, &filename_len, &size, &flags) == FAILURE) {
+ return;
+ }
+@@ -338,7 +338,7 @@ static uint32_t qh_intstringhash_initialize_from_file(php_qh_intstringhash_obj *
+ qh_intstringhash_initialize_from_file(zend_object_store_get_object(return_value TSRMLS_CC), stream, size, flags TSRMLS_CC);
+ php_stream_close(stream);
+ }
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -362,7 +362,7 @@ int qh_intstringhash_save_to_file(php_stream *stream, php_qh_intstringhash_obj *
+ php_qh_intstringhash_obj *intstringhash_obj;
+ php_stream *stream;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, qh_ce_intstringhash, &filename, &filename_len) == FAILURE) {
+ return;
+ }
+@@ -378,7 +378,7 @@ int qh_intstringhash_save_to_file(php_stream *stream, php_qh_intstringhash_obj *
+ qh_intstringhash_save_to_file(stream, intstringhash_obj);
+ php_stream_close(stream);
+ }
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -431,14 +431,14 @@ static uint32_t qh_intstringhash_initialize_from_string(php_qh_intstringhash_obj
+ int contents_len;
+ long size = 0, flags = 0;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &contents, &contents_len, &size, &flags) == FAILURE) {
+ return;
+ }
+
+ qh_instantiate(qh_ce_intstringhash, return_value TSRMLS_CC);
+ qh_intstringhash_initialize_from_string(zend_object_store_get_object(return_value TSRMLS_CC), contents, contents_len, size, flags TSRMLS_CC);
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -464,7 +464,7 @@ char *qh_intstringhash_save_to_string(uint32_t *string_len, php_qh_intstringhash
+ char *string;
+ uint32_t string_len;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, qh_ce_intstringhash) == FAILURE) {
+ return;
+ }
+@@ -472,7 +472,7 @@ char *qh_intstringhash_save_to_string(uint32_t *string_len, php_qh_intstringhash
+ intstringhash_obj = (php_qh_intstringhash_obj *) zend_object_store_get_object(object TSRMLS_CC);
+
+ string = qh_intstringhash_save_to_string(&string_len, intstringhash_obj);
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ RETURN_STRINGL(string, string_len, 0);
+ }
+ /* }}} */
+diff --git a/qh_stringinthash.c b/qh_stringinthash.c
+index c8e2794..8c667a1 100644
+--- a/qh_stringinthash.c
++++ b/qh_stringinthash.c
+@@ -203,13 +203,13 @@ static int qh_stringinthash_initialize(php_qh_intset_obj *obj, long size, long f
+ long size;
+ long flags = 0;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &size, &flags) == SUCCESS) {
+ if (!qh_stringinthash_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), size, flags TSRMLS_CC)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not initialize hash.");
+ }
+ }
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -382,7 +382,7 @@ static uint32_t qh_stringinthash_initialize_from_file(php_qh_stringinthash_obj *
+ long size = 0, flags = 0;
+ php_stream *stream;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &filename, &filename_len, &size, &flags) == FAILURE) {
+ return;
+ }
+@@ -397,7 +397,7 @@ static uint32_t qh_stringinthash_initialize_from_file(php_qh_stringinthash_obj *
+ qh_stringinthash_initialize_from_file(zend_object_store_get_object(return_value TSRMLS_CC), stream, size, flags TSRMLS_CC);
+ php_stream_close(stream);
+ }
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -421,7 +421,7 @@ int qh_stringinthash_save_to_file(php_stream *stream, php_qh_stringinthash_obj *
+ php_qh_stringinthash_obj *stringinthash_obj;
+ php_stream *stream;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, qh_ce_stringinthash, &filename, &filename_len) == FAILURE) {
+ return;
+ }
+@@ -437,7 +437,7 @@ int qh_stringinthash_save_to_file(php_stream *stream, php_qh_stringinthash_obj *
+ qh_stringinthash_save_to_file(stream, stringinthash_obj);
+ php_stream_close(stream);
+ }
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -488,14 +488,14 @@ static uint32_t qh_stringinthash_initialize_from_string(php_qh_stringinthash_obj
+ int contents_len;
+ long size = 0, flags = 0;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &contents, &contents_len, &size, &flags) == FAILURE) {
+ return;
+ }
+
+ qh_instantiate(qh_ce_stringinthash, return_value TSRMLS_CC);
+ qh_stringinthash_initialize_from_string(zend_object_store_get_object(return_value TSRMLS_CC), contents, contents_len, size, flags TSRMLS_CC);
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ }
+ /* }}} */
+
+@@ -521,7 +521,7 @@ char *qh_stringinthash_save_to_string(uint32_t *string_len, php_qh_stringinthash
+ char *string;
+ uint32_t string_len;
+
+- php_set_error_handling(EH_THROW, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_THROW, NULL);
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, qh_ce_stringinthash) == FAILURE) {
+ return;
+ }
+@@ -529,7 +529,7 @@ char *qh_stringinthash_save_to_string(uint32_t *string_len, php_qh_stringinthash
+ stringinthash_obj = (php_qh_stringinthash_obj *) zend_object_store_get_object(object TSRMLS_CC);
+
+ string = qh_stringinthash_save_to_string(&string_len, stringinthash_obj);
+- php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
++ QH_SET_ERROR_HANDLING(EH_NORMAL, NULL);
+ RETURN_STRINGL(string, string_len, 0);
+ }
+ /* }}} */
+diff --git a/quickhash.h b/quickhash.h
+index 5dcf6b5..8b1bbce 100644
+--- a/quickhash.h
++++ b/quickhash.h
+@@ -46,6 +46,13 @@
+ #define QH_HASHER_JENKINS2 0x0400
+ #define QH_HASHER_MASK 0xFF00
+
++#if PHP_MAJOR_VERSION >= 5 && PHP_MINOR_VERSION >= 3
++/* php_std_error_handling() is deprecated */
++#define QH_SET_ERROR_HANDLING(type, handler) zend_replace_error_handling(type, handler, NULL TSRMLS_CC)
++#else
++#define QH_SET_ERROR_HANDLING(type, handler) php_set_error_handling(type, handler TSRMLS_CC)
++#endif
++
+ typedef struct _php_qh_string_context {
+ char *string;
+ uint32_t string_len;
+--
+1.8.4
+
+
+From b9ca8d077261be8e5e43ab9622cde31aa19749f6 Mon Sep 17 00:00:00 2001
+From: Remi Collet <fedora@famillecollet.com>
+Date: Thu, 10 Oct 2013 16:24:46 +0200
+Subject: [PATCH 5/5] fix remaining build warnings (gcc 4.8)
+
+---
+ qh_inthash.c | 2 ++
+ qh_intset.c | 2 ++
+ qh_intstringhash.c | 2 ++
+ qh_stringinthash.c | 8 ++++----
+ 4 files changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/qh_inthash.c b/qh_inthash.c
+index b2eea41..d86f608 100644
+--- a/qh_inthash.c
++++ b/qh_inthash.c
+@@ -135,7 +135,9 @@ static inline zend_object_value qh_object_new_inthash_ex(zend_class_entry *class
+ {
+ php_qh_inthash_obj *intern;
+ zend_object_value retval;
++#if PHP_MINOR_VERSION <= 3
+ zval *tmp;
++#endif
+
+ intern = emalloc(sizeof(php_qh_inthash_obj));
+ memset(intern, 0, sizeof(php_qh_inthash_obj));
+diff --git a/qh_intset.c b/qh_intset.c
+index 43200b8..09c9b9e 100644
+--- a/qh_intset.c
++++ b/qh_intset.c
+@@ -122,7 +122,9 @@ static inline zend_object_value qh_object_new_intset_ex(zend_class_entry *class_
+ {
+ php_qh_intset_obj *intern;
+ zend_object_value retval;
++#if PHP_MINOR_VERSION <= 3
+ zval *tmp;
++#endif
+
+ intern = emalloc(sizeof(php_qh_intset_obj));
+ memset(intern, 0, sizeof(php_qh_intset_obj));
+diff --git a/qh_intstringhash.c b/qh_intstringhash.c
+index 77d21f8..a4dd396 100644
+--- a/qh_intstringhash.c
++++ b/qh_intstringhash.c
+@@ -138,7 +138,9 @@ static inline zend_object_value qh_object_new_intstringhash_ex(zend_class_entry
+ {
+ php_qh_intstringhash_obj *intern;
+ zend_object_value retval;
++#if PHP_MINOR_VERSION <= 3
+ zval *tmp;
++#endif
+
+ intern = emalloc(sizeof(php_qh_intstringhash_obj));
+ memset(intern, 0, sizeof(php_qh_intstringhash_obj));
+diff --git a/qh_stringinthash.c b/qh_stringinthash.c
+index 8c667a1..84a8752 100644
+--- a/qh_stringinthash.c
++++ b/qh_stringinthash.c
+@@ -138,7 +138,9 @@ static inline zend_object_value qh_object_new_stringinthash_ex(zend_class_entry
+ {
+ php_qh_stringinthash_obj *intern;
+ zend_object_value retval;
++#if PHP_MINOR_VERSION <= 3
+ zval *tmp;
++#endif
+
+ intern = emalloc(sizeof(php_qh_stringinthash_obj));
+ memset(intern, 0, sizeof(php_qh_stringinthash_obj));
+@@ -446,15 +448,13 @@ static int qh_stringinthash_string_validator(char *string, long length, uint32_t
+ {
+ uint32_t *int_buffer = (uint32_t*) string;
+ uint32_t hash_size;
+- uint32_t string_store_size;
+- uint32_t bucket_list_size;
+
+ if (string[0] != 'Q' || string[1] != 'H' || string[2] != 0x21) {
+ return 0;
+ }
+ hash_size = int_buffer[1];
+- string_store_size = int_buffer[2];
+- bucket_list_size = int_buffer[3];
++ /* string_store_size = int_buffer[2]; */
++ /* bucket_list_size = int_buffer[3]; */
+
+ *nr_of_elements = hash_size;
+
+--
+1.8.4
+
+From 2bf2475576cf272517c5a89888eb7b55f44670bf Mon Sep 17 00:00:00 2001
+From: Remi Collet <fedora@famillecollet.com>
+Date: Fri, 11 Oct 2013 09:21:55 +0200
+Subject: [PATCH] Fix ZTS build
+
+---
+ qh_inthash.c | 1 +
+ qh_intstringhash.c | 1 +
+ qh_stringinthash.c | 1 +
+ quickhash.c | 1 +
+ 4 files changed, 4 insertions(+)
+
+diff --git a/qh_inthash.c b/qh_inthash.c
+index d86f608..b5545fc 100644
+--- a/qh_inthash.c
++++ b/qh_inthash.c
+@@ -256,6 +256,7 @@ static int qh_inthash_stream_validator(php_stream_statbuf finfo, php_stream *str
+ {
+ char key_buffer[4];
+ uint32_t hash_size;
++ TSRMLS_FETCH();
+
+ if (php_stream_read(stream, key_buffer, 4) != 4) {
+ return 0;
+diff --git a/qh_intstringhash.c b/qh_intstringhash.c
+index a4dd396..ff8ccf1 100644
+--- a/qh_intstringhash.c
++++ b/qh_intstringhash.c
+@@ -275,6 +275,7 @@ static int qh_intstringhash_stream_validator(php_stream_statbuf finfo, php_strea
+ char key_buffer[4];
+ uint32_t hash_size;
+ uint32_t string_store_size;
++ TSRMLS_FETCH();
+
+ if (php_stream_read(stream, key_buffer, 4) != 4) {
+ return 0;
+diff --git a/qh_stringinthash.c b/qh_stringinthash.c
+index 84a8752..d7154b6 100644
+--- a/qh_stringinthash.c
++++ b/qh_stringinthash.c
+@@ -335,6 +335,7 @@ static int qh_stringinthash_stream_validator(php_stream_statbuf finfo, php_strea
+ uint32_t hash_size;
+ uint32_t string_store_size;
+ uint32_t bucket_list_size;
++ TSRMLS_FETCH();
+
+ if (php_stream_read(stream, key_buffer, 4) != 4) {
+ return 0;
+diff --git a/quickhash.c b/quickhash.c
+index ff60a4b..8608b54 100644
+--- a/quickhash.c
++++ b/quickhash.c
+@@ -209,6 +209,7 @@ int32_t php_qh_get_size_from_stream(void *context)
+ {
+ php_qh_stream_context *ctxt = (php_qh_stream_context*) context;
+ php_stream_statbuf finfo;
++ TSRMLS_FETCH();
+
+ // obtain the filesize
+ if (php_stream_stat(ctxt->stream, &finfo) == 0) {
+--
+1.8.4
+
+From c53c10025179bf96c05b3a20b14942ae6f5fd548 Mon Sep 17 00:00:00 2001
+From: Remi Collet <fedora@famillecollet.com>
+Date: Fri, 11 Oct 2013 09:31:38 +0200
+Subject: [PATCH] macrozify VERSION (common practice) + report it in phpinfo()
+
+---
+ php_quickhash.h | 2 ++
+ quickhash.c | 3 ++-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/php_quickhash.h b/php_quickhash.h
+index 958c0e8..b81f862 100644
+--- a/php_quickhash.h
++++ b/php_quickhash.h
+@@ -29,6 +29,8 @@
+ #include "TSRM.h"
+ #endif
+
++#define PHP_QUICKHASH_VERSION "1.0.0"
++
+ PHP_MINIT_FUNCTION(quickhash);
+ PHP_MSHUTDOWN_FUNCTION(quickhash);
+ PHP_RINIT_FUNCTION(quickhash);
+diff --git a/quickhash.c b/quickhash.c
+index 8608b54..1acaf13 100644
+--- a/quickhash.c
++++ b/quickhash.c
+@@ -52,7 +52,7 @@
+ PHP_RSHUTDOWN(quickhash),
+ PHP_MINFO(quickhash),
+ #if ZEND_MODULE_API_NO >= 20010901
+- "1.0.0",
++ PHP_QUICKHASH_VERSION,
+ #endif
+ STANDARD_MODULE_PROPERTIES
+ };
+@@ -347,5 +347,6 @@ int php_qh_prepare_string(qhi **hash, qho *options, char *string, long length, l
+ {
+ php_info_print_table_start();
+ php_info_print_table_header(2, "quickhash support", "enabled");
++ php_info_print_table_row(2, "quickhash version", PHP_QUICKHASH_VERSION);
+ php_info_print_table_end();
+ }
+--
+1.8.4
+