]> granicus.if.org Git - php/commitdiff
add the ability for curl_multi_info to introspect the handles.
authorSterling Hughes <sterling@php.net>
Wed, 2 Apr 2003 16:58:52 +0000 (16:58 +0000)
committerSterling Hughes <sterling@php.net>
Wed, 2 Apr 2003 16:58:52 +0000 (16:58 +0000)
# Zend commit doesn't break anything, so I'm committing it.  If anyone
# has problems, just speak up. :)

Zend/zend_list.c
Zend/zend_list.h
ext/curl/multi.c

index 348ecaf6655af7edfa928070f7761d5825e8d18d..de3d11f26517cc4236616eee039d6f1be7496fe7 100644 (file)
@@ -43,6 +43,8 @@ ZEND_API int zend_list_insert(void *ptr, int type)
        le.refcount=1;
 
        index = zend_hash_next_free_element(&EG(regular_list));
+       le.id = index;
+
        zend_hash_index_update(&EG(regular_list), index, (void *) &le, sizeof(zend_rsrc_list_entry), NULL);
        return index;
 }
@@ -77,7 +79,22 @@ ZEND_API void *_zend_list_find(int id, int *type TSRMLS_DC)
        }
 }
 
+ZEND_API int zend_list_id_by_pointer(void *p, int type TSRMLS_DC)
+{
+       zend_rsrc_list_entry *le;
+       HashPosition pos;
 
+       for (zend_hash_internal_pointer_reset_ex(&EG(regular_list), &pos);
+            zend_hash_get_current_data_ex(&EG(regular_list), (void *) &le, &pos) == SUCCESS;
+                zend_hash_move_forward_ex(&EG(regular_list), &pos)) {
+               if (le->type == type && le->ptr == p) {
+                       return le->id;
+               } 
+       }
+
+       return -1;
+}
+               
 ZEND_API int _zend_list_addref(int id TSRMLS_DC)
 {
        zend_rsrc_list_entry *le;
index 05f5d50bf87ab9b03c4c20eeb615604ef8f14751..c6c3b1f8f471532803ef524dcc198a3ef316e6c5 100644 (file)
@@ -34,6 +34,7 @@ typedef struct _zend_rsrc_list_entry {
        void *ptr;
        int type;
        int refcount;
+       int id;
 } zend_rsrc_list_entry;
 
 typedef void (*rsrc_dtor_func_t)(zend_rsrc_list_entry *rsrc TSRMLS_DC);
@@ -74,6 +75,7 @@ ZEND_API int zend_list_insert(void *ptr, int type);
 ZEND_API int _zend_list_addref(int id TSRMLS_DC);
 ZEND_API int _zend_list_delete(int id TSRMLS_DC);
 ZEND_API void *_zend_list_find(int id, int *type TSRMLS_DC);
+ZEND_API int zend_list_id_by_pointer(void *p, int type TSRMLS_DC);
 
 #define zend_list_addref(id)           _zend_list_addref(id TSRMLS_CC)
 #define zend_list_delete(id)           _zend_list_delete(id TSRMLS_CC)
index 19aef8f0b62b3e5a9d2bf32b54f2345b6ed66e27..24a4df94a11982e4d807cd8483349ae9ca725a9a 100644 (file)
@@ -221,7 +221,7 @@ PHP_FUNCTION(curl_multi_info_read)
        array_init(return_value);
        add_assoc_long(return_value, "msg", tmp_msg->msg);
        add_assoc_long(return_value, "result", tmp_msg->data.result);
-/*     add_assoc_resource(return_value, "handle", _find_handle(tmp_msg->easy_handle)); */
+       add_assoc_resource(return_value, "handle", zend_list_id_by_pointer(tmp_msg->easy_handle, le_curl TSRMLS_CC));
        add_assoc_string(return_value, "whatever", (char *) tmp_msg->data.whatever, 1);
 }
 /* }}} */