Blob Blame History Raw
--- pecl/geoip/trunk/geoip.c	2015/02/15 15:08:09	335947
+++ pecl/geoip/trunk/geoip.c	2015/02/15 17:56:49	335948
@@ -129,11 +129,19 @@
 {
 	if (stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) {
 		GEOIP_G(set_runtime_custom_directory) = 1;
+#if PHP_MAJOR_VERSION >= 7
+		geoip_change_custom_directory(new_value->val);
+#else
 		geoip_change_custom_directory(new_value);
+#endif
 		return SUCCESS;
 	}
 	
+#if PHP_MAJOR_VERSION >= 7
+	return OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
+#else
 	return OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC);
+#endif
 }
 /* }}} */
 #endif
@@ -250,7 +258,7 @@
 /* {{{ proto boolean geoip_db_avail( [ int database ] ) */
 PHP_FUNCTION(geoip_db_avail)
 {
-	long edition;
+	zend_long edition;
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &edition) == FAILURE) {
 		return;
@@ -269,7 +277,7 @@
 /* {{{ proto string geoip_db_filename( [ int database ] ) */
 PHP_FUNCTION(geoip_db_filename)
 {
-	long edition;
+	zend_long edition;
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &edition) == FAILURE) {
 		return;
@@ -282,7 +290,11 @@
 	}
 	
 	if (NULL != GeoIPDBFileName[edition])
+#if PHP_MAJOR_VERSION >= 7
+		RETURN_STRING(GeoIPDBFileName[edition]);	
+#else
 		RETURN_STRING(GeoIPDBFileName[edition], 1);	
+#endif
 }
 /* }}} */
 
@@ -297,16 +309,31 @@
 	{
 		if (NULL != GeoIPDBDescription[i])
 		{
+#if PHP_MAJOR_VERSION >= 7
+			zval real_row;
+			zval *row = &real_row;
+
+			array_init(row);
+#else
 			zval *row;
 			ALLOC_INIT_ZVAL(row);
 			array_init(row);
+#endif
 
 			add_assoc_bool(row, "available", GeoIP_db_avail(i));
 			if (GeoIPDBDescription[i]) {
+#if PHP_MAJOR_VERSION >= 7
+				add_assoc_string(row, "description", (char *)GeoIPDBDescription[i]);
+#else
 				add_assoc_string(row, "description", (char *)GeoIPDBDescription[i], 1);
+#endif
 			}
 			if (GeoIPDBFileName[i]) {
+#if PHP_MAJOR_VERSION >= 7
+				add_assoc_string(row, "filename", GeoIPDBFileName[i]);
+#else
 				add_assoc_string(row, "filename", GeoIPDBFileName[i], 1);
+#endif
 			}
 
 			add_index_zval(return_value, i, row);
@@ -321,7 +348,7 @@
 {
 	GeoIP * gi;
 	char * db_info;
-	long edition = GEOIP_COUNTRY_EDITION;
+	zend_long edition = GEOIP_COUNTRY_EDITION;
 	
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &edition) == FAILURE) {
 		return;
@@ -346,12 +373,45 @@
 	db_info = GeoIP_database_info(gi);
 	GeoIP_delete(gi);
 
+#if PHP_MAJOR_VERSION >= 7
+	RETVAL_STRING(db_info);
+#else
 	RETVAL_STRING(db_info, 1);
+#endif
 	free(db_info);
 }
 /* }}} */
 
 /* {{{ */
+#if PHP_MAJOR_VERSION >= 7
+#define GEOIPDEF(php_func, c_func, db_type) \
+	PHP_FUNCTION(php_func) \
+	{ \
+		GeoIP * gi; \
+		char * hostname = NULL; \
+		const char * return_code; \
+		size_t arglen; \
+		\
+		if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) { \
+			return; \
+		} \
+		\
+		if (GeoIP_db_avail(db_type)) { \
+			gi = GeoIP_open_type(db_type, GEOIP_STANDARD); \
+		} else { \
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Required database not available at %s.", GeoIPDBFileName[db_type]); \
+			return; \
+		} \
+		\
+		return_code = c_func(gi, hostname); \
+		GeoIP_delete(gi); \
+		if (return_code == NULL) { \
+			RETURN_FALSE; \
+		} \
+		RETURN_STRING((char*)return_code); \
+		\
+	}
+#else
 #define GEOIPDEF(php_func, c_func, db_type) \
 	PHP_FUNCTION(php_func) \
 	{ \
@@ -379,6 +439,7 @@
 		RETURN_STRING((char*)return_code, 1); \
 		\
 	}
+#endif
 #include "geoip.def"
 #undef GEOIPDEF
 /* }}} */
@@ -390,7 +451,11 @@
 	GeoIP * gi;
 	char * hostname = NULL;
 	int id;
+#if PHP_MAJOR_VERSION >= 7
+	size_t arglen;
+#else
 	int arglen;
+#endif
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
 		return;
@@ -408,7 +473,11 @@
 	if (id == 0) {
 		RETURN_FALSE;
 	}
+#if PHP_MAJOR_VERSION >= 7
+	RETURN_STRING((char *)GeoIP_country_continent[id]);
+#else
 	RETURN_STRING((char *)GeoIP_country_continent[id], 1);
+#endif
 }
 /* }}} */
 
@@ -419,7 +488,11 @@
 	GeoIP * gi;
 	char * hostname = NULL;
 	char * org;
+#if PHP_MAJOR_VERSION >= 7
+	size_t arglen;
+#else
 	int arglen;
+#endif
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
 		return;
@@ -437,7 +510,11 @@
 	if (org == NULL) {
 		RETURN_FALSE;
 	}
+#if PHP_MAJOR_VERSION >= 7
+	RETVAL_STRING(org);
+#else
 	RETVAL_STRING(org, 1);
+#endif
 	free(org);
 }
 /* }}} */
@@ -449,7 +526,11 @@
 	GeoIP * gi;
 	char * hostname = NULL;
 	char * org;
+#if PHP_MAJOR_VERSION >= 7
+	size_t arglen;
+#else
 	int arglen;
+#endif
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
 		return;
@@ -467,7 +548,11 @@
 	if (org == NULL) {
 		RETURN_FALSE;
 	}
+#if PHP_MAJOR_VERSION >= 7
+	RETVAL_STRING(org);
+#else
 	RETVAL_STRING(org, 1);
+#endif
 	free(org);
 }
 /* }}} */
@@ -479,7 +564,11 @@
 	GeoIP * gi;
 	char * hostname = NULL;
 	char * org;
+#if PHP_MAJOR_VERSION >= 7
+	size_t arglen;
+#else
 	int arglen;
+#endif
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
 		return;
@@ -497,7 +586,11 @@
 	if (org == NULL) {
 		RETURN_FALSE;
 	}
+#if PHP_MAJOR_VERSION >= 7
+	RETVAL_STRING(org);
+#else
 	RETVAL_STRING(org, 1);
+#endif
 	free(org);
 }
 /* }}} */
@@ -510,7 +603,11 @@
 	GeoIP * gi;
 	char * hostname = NULL;
 	char * org;
+#if PHP_MAJOR_VERSION >= 7
+	size_t arglen;
+#else
 	int arglen;
+#endif
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
 		return;
@@ -528,7 +625,11 @@
 	if (org == NULL) {
 		RETURN_FALSE;
 	}
+#if PHP_MAJOR_VERSION >= 7
+	RETVAL_STRING(org);
+#else
 	RETVAL_STRING(org, 1);
+#endif
 	free(org);
 }
 /* }}} */
@@ -540,7 +641,11 @@
 {
 	GeoIP * gi;
 	char * hostname = NULL;
+#if PHP_MAJOR_VERSION >= 7
+	size_t arglen;
+#else
 	int arglen;
+#endif
 	GeoIPRecord * gir;
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
@@ -566,15 +671,27 @@
 	}
 	
 	array_init(return_value);
-#if LIBGEOIP_VERSION >= 1004003
+#if PHP_MAJOR_VERSION >= 7
+# if LIBGEOIP_VERSION >= 1004003
+	add_assoc_string(return_value, "continent_code", (gir->continent_code == NULL) ? "" : gir->continent_code);
+# endif
+	add_assoc_string(return_value, "country_code", (gir->country_code == NULL) ? "" : gir->country_code);
+	add_assoc_string(return_value, "country_code3", (gir->country_code3 == NULL) ? "" : gir->country_code3);
+	add_assoc_string(return_value, "country_name", (gir->country_name == NULL) ? "" : gir->country_name);
+	add_assoc_string(return_value, "region", (gir->region == NULL) ? "" : gir->region);
+	add_assoc_string(return_value, "city", (gir->city == NULL) ? "" : gir->city);
+	add_assoc_string(return_value, "postal_code", (gir->postal_code == NULL) ? "" : gir->postal_code);
+#else
+# if LIBGEOIP_VERSION >= 1004003
 	add_assoc_string(return_value, "continent_code", (gir->continent_code == NULL) ? "" : gir->continent_code, 1);
-#endif
+# endif
 	add_assoc_string(return_value, "country_code", (gir->country_code == NULL) ? "" : gir->country_code, 1);
 	add_assoc_string(return_value, "country_code3", (gir->country_code3 == NULL) ? "" : gir->country_code3, 1);
 	add_assoc_string(return_value, "country_name", (gir->country_name == NULL) ? "" : gir->country_name, 1);
 	add_assoc_string(return_value, "region", (gir->region == NULL) ? "" : gir->region, 1);
 	add_assoc_string(return_value, "city", (gir->city == NULL) ? "" : gir->city, 1);
 	add_assoc_string(return_value, "postal_code", (gir->postal_code == NULL) ? "" : gir->postal_code, 1);
+#endif
 	add_assoc_double(return_value, "latitude", gir->latitude);
 	add_assoc_double(return_value, "longitude", gir->longitude);
 #if LIBGEOIP_VERSION >= 1004005
@@ -594,7 +711,11 @@
 {
 	GeoIP * gi;
 	char * hostname = NULL;
+#if PHP_MAJOR_VERSION >= 7
+	size_t arglen;
+#else
 	int arglen;
+#endif
 	int netspeed;
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
@@ -620,7 +741,11 @@
 {
 	GeoIP * gi;
 	char * hostname = NULL;
+#if PHP_MAJOR_VERSION >= 7
+	size_t arglen;
+#else
 	int arglen;
+#endif
 	GeoIPRegion * region;
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
@@ -646,9 +771,14 @@
 	}
 
 	array_init(return_value);
+#if PHP_MAJOR_VERSION >= 7
+	add_assoc_string(return_value, "country_code", region->country_code);
+	add_assoc_string(return_value, "region", region->region);
+#else
 	add_assoc_string(return_value, "country_code", region->country_code, 1);
 	add_assoc_string(return_value, "region", region->region, 1);
-	
+#endif
+
 	GeoIPRegion_delete(region);
 }
 /* }}} */
@@ -660,7 +790,11 @@
 	GeoIP * gi;
 	char * hostname = NULL;
 	char * isp;
+#if PHP_MAJOR_VERSION >= 7
+	size_t arglen;
+#else
 	int arglen;
+#endif
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &hostname, &arglen) == FAILURE) {
 		return;
@@ -678,7 +812,11 @@
 	if (isp == NULL) {
 		RETURN_FALSE;
 	}
+#if PHP_MAJOR_VERSION >= 7
+	RETVAL_STRING(isp);
+#else
 	RETVAL_STRING(isp, 1);
+#endif
 	free(isp);
 }
 
@@ -690,7 +828,11 @@
 	char * country_code = NULL;
 	char * region_code = NULL;
 	const char * region_name;
+#if PHP_MAJOR_VERSION >= 7
+	size_t countrylen, regionlen;
+#else
 	int countrylen, regionlen;
+#endif
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &country_code, &countrylen, &region_code, &regionlen) == FAILURE) {
 		return;
@@ -705,7 +847,11 @@
 	if (region_name == NULL) {
 		RETURN_FALSE;
 	}
+#if PHP_MAJOR_VERSION >= 7
+	RETURN_STRING((char*)region_name);
+#else
 	RETURN_STRING((char*)region_name, 1);
+#endif
 }
 /* }}} */
 #endif
@@ -718,7 +864,11 @@
 	char * country = NULL;
 	char * region = NULL;
 	const char * timezone;
+#if PHP_MAJOR_VERSION >= 7
+	size_t countrylen, arg2len;
+#else
 	int countrylen, arg2len;
+#endif
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &country, &countrylen, &region, &arg2len) == FAILURE) {
 		return;
@@ -733,7 +883,11 @@
 	if (timezone == NULL) {
 		RETURN_FALSE;
 	}
+#if PHP_MAJOR_VERSION >= 7
+	RETURN_STRING((char*)timezone);
+#else
 	RETURN_STRING((char*)timezone, 1);
+#endif
 }
 /* }}} */
 #endif
@@ -744,7 +898,11 @@
 PHP_FUNCTION(geoip_setup_custom_directory)
 {
 	char * dir = NULL;
+#if PHP_MAJOR_VERSION >= 7
+	size_t dirlen;
+#else
 	int dirlen;
+#endif
 
 	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &dir, &dirlen) == FAILURE) {
 		return;
--- pecl/geoip/trunk/php_geoip.h	2015/02/15 15:08:09	335947
+++ pecl/geoip/trunk/php_geoip.h	2015/02/15 17:56:49	335948
@@ -26,6 +26,10 @@
 
 #define PHP_GEOIP_VERSION "1.1.0"
 
+#if PHP_MAJOR_VERSION < 7
+typedef long zend_long;
+#endif
+
 #ifdef PHP_WIN32
 #define PHP_GEOIP_API __declspec(dllexport)
 #else