iliaa Mon Sep 25 16:02:19 2006 UTC Modified files: /php-src/ext/standard url.c Log: MFB: Fixed bug #38891 (get_headers() do not work with curl-wrappers). http://cvs.php.net/viewvc.cgi/php-src/ext/standard/url.c?r1=1.96&r2=1.97&diff_format=u Index: php-src/ext/standard/url.c diff -u php-src/ext/standard/url.c:1.96 php-src/ext/standard/url.c:1.97 --- php-src/ext/standard/url.c:1.96 Sat Sep 23 11:58:49 2006 +++ php-src/ext/standard/url.c Mon Sep 25 16:02:19 2006 @@ -15,7 +15,7 @@ | Author: Jim Winstead <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: url.c,v 1.96 2006/09/23 11:58:49 tony2001 Exp $ */ +/* $Id: url.c,v 1.97 2006/09/25 16:02:19 iliaa Exp $ */ #include <stdlib.h> #include <string.h> @@ -661,8 +661,9 @@ int url_len; php_stream_context *context; php_stream *stream; - zval **prev_val, **hdr = NULL; + zval **prev_val, **hdr = NULL, **h; HashPosition pos; + HashTable *hashT; long format = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &url, &url_len, &format) == FAILURE) { @@ -676,10 +677,22 @@ array_init(return_value); - zend_hash_internal_pointer_reset_ex(HASH_OF(stream->wrapperdata), &pos); - while (zend_hash_get_current_data_ex(HASH_OF(stream->wrapperdata), (void**)&hdr, &pos) != FAILURE) { + /* check for curl-wrappers that provide headers via a special "headers" element */ + if (zend_hash_find(HASH_OF(stream->wrapperdata), "headers", sizeof("headers"), (void **)&h) != FAILURE && Z_TYPE_PP(h) == IS_ARRAY) { + /* curl-wrappers don't load data until the 1st read */ + if (!Z_ARRVAL_PP(h)->nNumOfElements) { + php_stream_getc(stream); + } + zend_hash_find(HASH_OF(stream->wrapperdata), "headers", sizeof("headers"), (void **)&h); + hashT = Z_ARRVAL_PP(h); + } else { + hashT = HASH_OF(stream->wrapperdata); + } + + zend_hash_internal_pointer_reset_ex(hashT, &pos); + while (zend_hash_get_current_data_ex(hashT, (void**)&hdr, &pos) != FAILURE) { if (!hdr || Z_TYPE_PP(hdr) != IS_STRING) { - zend_hash_move_forward_ex(HASH_OF(stream->wrapperdata), &pos); + zend_hash_move_forward_ex(hashT, &pos); continue; } @@ -710,7 +723,7 @@ goto no_name_header; } } - zend_hash_move_forward_ex(HASH_OF(stream->wrapperdata), &pos); + zend_hash_move_forward_ex(hashT, &pos); } php_stream_close(stream);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php