- finish work on encoding api
[m6w6/ext-http] / http_url_api.c
index c8e9e78ea8597f7b0d2170a747efc0201387bb86..7bacffc3e73e26120c8ddbc58e7f52ec1df63eb4 100644 (file)
@@ -27,8 +27,6 @@
 #include "php_http_api.h"
 #include "php_http_url_api.h"
 
-ZEND_EXTERN_MODULE_GLOBALS(http);
-
 PHP_HTTP_API char *_http_absolute_url(const char *url TSRMLS_DC)
 {
        char *abs = estrdup(url);
@@ -39,6 +37,8 @@ PHP_HTTP_API char *_http_absolute_url(const char *url TSRMLS_DC)
        if (purl) {
                http_build_url(purl, NULL, NULL, &abs, NULL);
                php_url_free(purl);
+       } else {
+               http_error_ex(HE_WARNING, HTTP_E_URL, "Could not parse URL (%s)", url);
        }
        
        return abs;
@@ -299,9 +299,7 @@ PHP_HTTP_API STATUS _http_urlencode_hash_recursive(HashTable *ht, phpstr *str, c
                                return FAILURE;
                        }
                } else {
-                       char *encoded_val;
-                       int encoded_len;
-                       zval *cpy, *val = convert_to_type_ex(IS_STRING, *data, &cpy);
+                       zval *val = zval_copy(IS_STRING, *data);
                        
                        if (PHPSTR_LEN(str)) {
                                phpstr_append(str, arg_sep, arg_sep_len);
@@ -309,15 +307,17 @@ PHP_HTTP_API STATUS _http_urlencode_hash_recursive(HashTable *ht, phpstr *str, c
                        phpstr_append(str, PHPSTR_VAL(&new_prefix), PHPSTR_LEN(&new_prefix));
                        phpstr_appends(str, "=");
                        
-                       encoded_val = php_url_encode(Z_STRVAL_P(val), Z_STRLEN_P(val), &encoded_len);
-                       phpstr_append(str, encoded_val, encoded_len);
-                       efree(encoded_val);
-                       
-                       if (cpy) {
-                               zval_ptr_dtor(&cpy);
+                       if (Z_STRLEN_P(val) && Z_STRVAL_P(val)) {
+                               char *encoded_val;
+                               int encoded_len;
+                               
+                               encoded_val = php_url_encode(Z_STRVAL_P(val), Z_STRLEN_P(val), &encoded_len);
+                               phpstr_append(str, encoded_val, encoded_len);
+                               efree(encoded_val);
                        }
+                       
+                       zval_free(&val);
                }
-               
                phpstr_dtor(&new_prefix);
        }
        return SUCCESS;