mirror of
https://github.com/php/php-src.git
synced 2024-11-27 20:03:40 +08:00
add the ability for curl_multi_info to introspect the handles.
# Zend commit doesn't break anything, so I'm committing it. If anyone # has problems, just speak up. :)
This commit is contained in:
parent
bdd3b6042c
commit
bb7c2ddb23
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
/* }}} */
|
||||
|
Loading…
Reference in New Issue
Block a user