9月
30
2013
分類:
最近更新:
2013-09-30
php dbus extension with ByteArray support, r101/r108 update
「php dbus extension with ByteArray support」程式碼更新。更新內容詳見「rocksources r101」和「rocksources r108」。
PHP 5.4 版起,移除了 default_properties 項目。依「internals:engine:objects [PHP Wiki]」的示範,應該改用 object_properties_init() ,而這也正是 dbus.c 的巨集 INIT_OBJ_PROP 所做的事。故修改變數名稱,以便改用 INIT_OBJ_PROP 完成 ByteArray 的初始化工作。 r108 則修正了 PHP 5.4 釋放 ByteArray 時會發生記憶體存取錯誤的嚴重Bug。
#if PHP_MINOR_VERSION > 3 # define INIT_OBJ_PROP object_properties_init(&intern->std, class_type); #else # define INIT_OBJ_PROP zend_hash_copy(intern->std.properties, \ &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, \ (void *) &tmp, sizeof(zval *)); #endif // r108 void bytearray_free_storage(void *object TSRMLS_DC) { bytearray_object *this = (bytearray_object *)object; efree(this->data); this->len = 0; zend_object_std_dtor(&this->std TSRMLS_CC); //zend_hash_destroy(this->std.properties); //FREE_HASHTABLE(this->std.properties); efree(this); }
PHP Wiki 使用 (r108 已修改)
PHP_VERSION_ID < 50399
(5.3.99) 判別。而 dbus.c 取巧地使用 PHP_MINOR_VERSION > 3
。我暫時不想更動 ByteArray 以外的部份,故保留之。
另外, PHP 5.4 也完全移除了 function_entry 項目。所有 function_entry 都應更名為 zend_function_entry 。 ByteArray 實作時用了 function_entry ,此次一併修正。
r108 修正了 PHP 5.4 釋放 ByteArray 時會發生記憶體存取錯誤的嚴重Bug ,還修改了一處 DBus API 宣告廢棄的項目(dbus_message_iter_get_array_len)。增加了 DBus service/client 的測試案例。
樂多舊網址: http://blog.roodo.com/rocksaying/archives/25736040.html