Re: GtkSelectionData:: get_uris/set_uris override
| From: | Andrei Zmievski | Date: | Thu, 27 Jul 2006 21:27:15 +0000 |
| Subject: | Re: GtkSelectionData:: get_uris/set_uris override | ||
| References: | 1 2 | Groups: | php.gtk.dev |
| Request: | Send a blank email to php-gtk-dev+get-3337@lists.php.net to get a copy of this message | ||
Yeah, I know. Need to find some time away from Unicode..
-Andrei
On Jul 27, 2006, at 12:53 PM, Christian Weiske wrote:
Bump. Christian Weiske wrote:Hi all, I made a patch for GtkSelectionData::get_uris() and set_uris(). My demo script works, I am just unsure about how to free the gchar list in get_uris(). Andrei, could you check it? And together with this patch, I'm able to reproduce the--Regards/MfG, Christian Weiske*** glibc detected *** corrupted double-linked list: 0x08dd5e00 ***error I had already yesterday with drag and drop - just drop 3x on itself. (This has nothing to do with this patch, as it already came yesterday now and then). The demo script will be attached to the bug I'm about to open now. ------------------------------------------------------------------------ %% {{{ GtkSelectionData %% override gtk_selection_data_get_uris PHP_METHOD {gchar **ret; gchar *cp_str; gsize cp_len; zend_bool free_cp_str; GtkSelectionData *selection_data = NULL;if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "")) return;selection_data = (GtkSelectionData *) PHPG_GBOXED(this_ptr); ret = gtk_selection_data_get_uris(selection_data); if (ret) { array_init(return_value); while (*ret) { cp_str = phpg_from_utf8(*ret, strlen(*ret), &cp_len, &free_cp_str TSRMLS_CC); if (cp_str) { add_next_index_stringl(return_value, cp_str, cp_len, !free_cp_str); } else { zval_dtor(return_value); RETURN_NULL(); } *ret++; } // g_strfreev(*ret); } else { RETURN_NULL(); }} %% add-arginfo GtkSelectionData set_uris static ZEND_BEGIN_ARG_INFO(ARGINFO_NAME, 0)ZEND_ARG_INFO(0, uris)ZEND_END_ARG_INFO(); %% override gtk_selection_data_set_uris PHP_METHOD {gchar **uris; zval *arr = NULL; zval **data; int i, arr_count; GtkSelectionData *selection_data = NULL;if (!php_gtk_parse_args(ZEND_NUM_ARGS(), "a", &arr)) { return; }arr_count = zend_hash_num_elements(Z_ARRVAL_P(arr)); uris = safe_emalloc(arr_count+1, sizeof (gchar *), 0);for (i=0, zend_hash_internal_pointer_reset(Z_ARRVAL_P(arr)); zend_hash_get_current_data(Z_ARRVAL_P(arr), (void **)&data) == SUCCESS; zend_hash_move_forward(Z_ARRVAL_P(arr))) {convert_to_string_ex(data); uris[i++] = Z_STRVAL_PP(data);}uris[i] = NULL; selection_data = (GtkSelectionData *) PHPG_GBOXED(this_ptr); gtk_selection_data_set_uris(selection_data, (