diff options
author | Paul Yang <TeBoring@users.noreply.github.com> | 2017-08-02 07:42:27 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-02 07:42:27 -0700 |
commit | c15a3269f9dea81db5a45b527cd8699f11b03f0b (patch) | |
tree | 9a824786160ee256544541361d71532850c097f5 /php/ext/google/protobuf/protobuf.c | |
parent | be73938d72c91ff0075b1ed683f07922ad5801b0 (diff) | |
download | protobuf-c15a3269f9dea81db5a45b527cd8699f11b03f0b.tar.gz protobuf-c15a3269f9dea81db5a45b527cd8699f11b03f0b.tar.bz2 protobuf-c15a3269f9dea81db5a45b527cd8699f11b03f0b.zip |
Expose descriptor API in php c extension (#3422)
Diffstat (limited to 'php/ext/google/protobuf/protobuf.c')
-rw-r--r-- | php/ext/google/protobuf/protobuf.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/php/ext/google/protobuf/protobuf.c b/php/ext/google/protobuf/protobuf.c index 2b5b58c6..dc730030 100644 --- a/php/ext/google/protobuf/protobuf.c +++ b/php/ext/google/protobuf/protobuf.c @@ -63,7 +63,6 @@ static void* get_from_table(const HashTable* t, const void* def) { void** value; if (php_proto_zend_hash_index_find_mem(t, (zend_ulong)def, (void**)&value) == FAILURE) { - zend_error(E_ERROR, "PHP object not found for given definition.\n"); return NULL; } return *value; @@ -166,6 +165,7 @@ static PHP_RINIT_FUNCTION(protobuf) { generated_pool = NULL; generated_pool_php = NULL; + internal_generated_pool_php = NULL; return 0; } @@ -182,21 +182,40 @@ static PHP_RSHUTDOWN_FUNCTION(protobuf) { zval_dtor(generated_pool_php); FREE_ZVAL(generated_pool_php); } + if (internal_generated_pool_php != NULL) { + zval_dtor(internal_generated_pool_php); + FREE_ZVAL(internal_generated_pool_php); + } +#else + if (generated_pool_php != NULL) { + zval tmp; + ZVAL_OBJ(&tmp, generated_pool_php); + zval_dtor(&tmp); + } + if (internal_generated_pool_php != NULL) { + zval tmp; + ZVAL_OBJ(&tmp, internal_generated_pool_php); + zval_dtor(&tmp); + } #endif return 0; } static PHP_MINIT_FUNCTION(protobuf) { + descriptor_pool_init(TSRMLS_C); + descriptor_init(TSRMLS_C); + enum_descriptor_init(TSRMLS_C); + enum_value_descriptor_init(TSRMLS_C); + field_descriptor_init(TSRMLS_C); + gpb_type_init(TSRMLS_C); + internal_descriptor_pool_init(TSRMLS_C); map_field_init(TSRMLS_C); map_field_iter_init(TSRMLS_C); + message_init(TSRMLS_C); + oneof_descriptor_init(TSRMLS_C); repeated_field_init(TSRMLS_C); repeated_field_iter_init(TSRMLS_C); - gpb_type_init(TSRMLS_C); - message_init(TSRMLS_C); - descriptor_pool_init(TSRMLS_C); - descriptor_init(TSRMLS_C); - enum_descriptor_init(TSRMLS_C); util_init(TSRMLS_C); return 0; |