summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierrick Charron <pierrick@php.net>2012-12-23 15:45:39 -0500
committerPierrick Charron <pierrick@php.net>2012-12-23 15:45:39 -0500
commit4b4f3db73142799da71be14d73938456e918b3ac (patch)
tree3dd3c56065bd96d67d86276ecb63eaf3fd18ea09
parent64595a5d1a51417ae518e124c61e1a9840d221a8 (diff)
downloadphp-git-4b4f3db73142799da71be14d73938456e918b3ac.tar.gz
Support for curl_strerror and curl_multi_strerror
Add the support for both curl_strerror and curl_multi_strerror. Those function will return a string describing the error code passed in the argument errornum
-rw-r--r--ext/curl/interface.c38
-rw-r--r--ext/curl/multi.c23
-rw-r--r--ext/curl/php_curl.h5
-rw-r--r--ext/curl/tests/curl_multi_strerror_001.phpt20
-rw-r--r--ext/curl/tests/curl_strerror_001.phpt22
5 files changed, 106 insertions, 2 deletions
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index a0a4ec5b5f..21d4bb187c 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -374,6 +374,16 @@ ZEND_BEGIN_ARG_INFO(arginfo_curl_multi_close, 0)
ZEND_ARG_INFO(0, mh)
ZEND_END_ARG_INFO()
+#if LIBCURL_VERSION_NUM >= 0x070c00 /* Available since 7.12.0 */
+ZEND_BEGIN_ARG_INFO(arginfo_curl_strerror, 0)
+ ZEND_ARG_INFO(0, errornum)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO(arginfo_curl_multi_strerror, 0)
+ ZEND_ARG_INFO(0, errornum)
+ZEND_END_ARG_INFO()
+#endif
+
ZEND_BEGIN_ARG_INFO(arginfo_curl_share_init, 0)
ZEND_END_ARG_INFO()
@@ -401,6 +411,10 @@ const zend_function_entry curl_functions[] = {
PHP_FE(curl_error, arginfo_curl_error)
PHP_FE(curl_errno, arginfo_curl_errno)
PHP_FE(curl_close, arginfo_curl_close)
+#if LIBCURL_VERSION_NUM >= 0x070c00 /* 7.12.0 */
+ PHP_FE(curl_strerror, arginfo_curl_strerror)
+ PHP_FE(curl_multi_strerror, arginfo_curl_multi_strerror)
+#endif
#if LIBCURL_VERSION_NUM >= 0x070c01 /* 7.12.1 */
PHP_FE(curl_reset, arginfo_curl_reset)
#endif
@@ -3256,6 +3270,28 @@ static void _php_curl_close(zend_rsrc_list_entry *rsrc TSRMLS_DC)
}
/* }}} */
+#if LIBCURL_VERSION_NUM >= 0x070c00 /* Available since 7.12.0 */
+/* {{{ proto bool curl_strerror(int code)
+ return string describing error code */
+PHP_FUNCTION(curl_strerror)
+{
+ long code;
+ const char *str;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &code) == FAILURE) {
+ return;
+ }
+
+ str = curl_easy_strerror(code);
+ if (str) {
+ RETURN_STRING(str, 1);
+ } else {
+ RETURN_NULL();
+ }
+}
+/* }}} */
+#endif
+
#if LIBCURL_VERSION_NUM >= 0x070c01 /* 7.12.1 */
/* {{{ _php_curl_reset_handlers()
Reset all handlers of a given php_curl */
@@ -3280,7 +3316,7 @@ static void _php_curl_reset_handlers(php_curl *ch)
ch->handlers->read->stream = NULL;
}
ch->handlers->read->fp = NULL;
- ch->handlers->read->fd = NULL;
+ ch->handlers->read->fd = 0;
ch->handlers->read->method = PHP_CURL_DIRECT;
if (ch->handlers->std_err) {
diff --git a/ext/curl/multi.c b/ext/curl/multi.c
index 48655ba6e4..4cf9d5fb4a 100644
--- a/ext/curl/multi.c
+++ b/ext/curl/multi.c
@@ -359,6 +359,28 @@ void _php_curl_multi_close(zend_rsrc_list_entry *rsrc TSRMLS_DC) /* {{{ */
}
/* }}} */
+#if LIBCURL_VERSION_NUM >= 0x070c00 /* Available since 7.12.0 */
+/* {{{ proto bool curl_multi_strerror(int code)
+ return string describing error code */
+PHP_FUNCTION(curl_multi_strerror)
+{
+ long code;
+ const char *str;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &code) == FAILURE) {
+ return;
+ }
+
+ str = curl_multi_strerror(code);
+ if (str) {
+ RETURN_STRING(str, 1);
+ } else {
+ RETURN_NULL();
+ }
+}
+/* }}} */
+#endif
+
#if LIBCURL_VERSION_NUM >= 0x070f04 /* 7.15.4 */
static int _php_curl_multi_setopt(php_curlm *mh, long option, zval **zvalue, zval *return_value TSRMLS_DC) /* {{{ */
{
@@ -389,7 +411,6 @@ static int _php_curl_multi_setopt(php_curlm *mh, long option, zval **zvalue, zva
}
/* }}} */
-
/* {{{ proto int curl_multi_setopt(resource mh, int option, mixed value)
Set an option for the curl multi handle */
PHP_FUNCTION(curl_multi_setopt)
diff --git a/ext/curl/php_curl.h b/ext/curl/php_curl.h
index d00b431faf..2c97bcaca4 100644
--- a/ext/curl/php_curl.h
+++ b/ext/curl/php_curl.h
@@ -84,6 +84,11 @@ PHP_FUNCTION(curl_share_close);
PHP_FUNCTION(curl_share_init);
PHP_FUNCTION(curl_share_setopt);
+#if LIBCURL_VERSION_NUM >= 0x070c00 /* 7.12.0 */
+PHP_FUNCTION(curl_strerror);
+PHP_FUNCTION(curl_multi_strerror);
+#endif
+
#if LIBCURL_VERSION_NUM >= 0x070c01 /* 7.12.1 */
PHP_FUNCTION(curl_reset);
#endif
diff --git a/ext/curl/tests/curl_multi_strerror_001.phpt b/ext/curl/tests/curl_multi_strerror_001.phpt
new file mode 100644
index 0000000000..85a665ce6f
--- /dev/null
+++ b/ext/curl/tests/curl_multi_strerror_001.phpt
@@ -0,0 +1,20 @@
+--TEST--
+curl_multi_strerror basic test
+--SKIPIF--
+if (!extension_loaded("curl")) {
+ exit("skip curl extension not loaded");
+}
+$curl_version = curl_version();
+if ($curl_version['version_number'] < 0x070c00) {
+ exit("skip: test works only with curl >= 7.12.0");
+}
+--FILE--
+<?php
+
+var_dump(curl_multi_strerror(CURLM_OK));
+var_dump(curl_multi_strerror(CURLM_BAD_HANDLE));
+
+?>
+--EXPECTF--
+string(8) "No error"
+string(20) "Invalid multi handle"
diff --git a/ext/curl/tests/curl_strerror_001.phpt b/ext/curl/tests/curl_strerror_001.phpt
new file mode 100644
index 0000000000..c61481bc8b
--- /dev/null
+++ b/ext/curl/tests/curl_strerror_001.phpt
@@ -0,0 +1,22 @@
+--TEST--
+curl_strerror basic test
+--SKIPIF--
+if (!extension_loaded("curl")) {
+ exit("skip curl extension not loaded");
+}
+$curl_version = curl_version();
+if ($curl_version['version_number'] < 0x070c00) {
+ exit("skip: test works only with curl >= 7.12.0");
+}
+--FILE--
+<?php
+
+var_dump(curl_strerror(CURLE_OK));
+var_dump(curl_strerror(CURLE_UNSUPPORTED_PROTOCOL));
+var_dump(curl_strerror(-1));
+
+?>
+--EXPECTF--
+string(8) "No error"
+string(20) "Unsupported protocol"
+string(13) "Unknown error"