@@ -99,10 +99,10 @@ static ZEND_MINIT_FUNCTION(msgpack) /* {{{ */ {
9999#endif
100100
101101#if defined(HAVE_APCU_SUPPORT )
102- apc_register_serializer ("msgpack" ,
103- APC_SERIALIZER_NAME (msgpack ),
104- APC_UNSERIALIZER_NAME (msgpack ),
105- NULL TSRMLS_CC );
102+ apc_register_serializer ("msgpack" ,
103+ APC_SERIALIZER_NAME (msgpack ),
104+ APC_UNSERIALIZER_NAME (msgpack ),
105+ NULL );
106106#endif
107107
108108 msgpack_init_class ();
@@ -128,7 +128,9 @@ static ZEND_MINFO_FUNCTION(msgpack) /* {{{ */ {
128128 php_info_print_table_row (2 , "Session Support" , "enabled" );
129129#endif
130130#if defined(HAVE_APCU_SUPPORT )
131- php_info_print_table_row (2 , "APCu Serializer Support" , "enabled" );
131+ php_info_print_table_row (2 , "MessagePack APCu Serializer ABI" , APC_SERIALIZER_ABI );
132+ #else
133+ php_info_print_table_row (2 , "MessagePack APCu Serializer ABI" , "no" );
132134#endif
133135 php_info_print_table_row (2 , "extension Version" , PHP_MSGPACK_VERSION );
134136 php_info_print_table_row (2 , "header Version" , MSGPACK_VERSION );
@@ -321,49 +323,25 @@ static ZEND_FUNCTION(msgpack_unserialize) /* {{{ */ {
321323/* }}} */
322324
323325#if defined(HAVE_APCU_SUPPORT )
324- /* {{{ apc_serialize function */
325- static int APC_SERIALIZER_NAME (msgpack ) ( APC_SERIALIZER_ARGS ) {
326- (void )config ;
327-
328- smart_str res = {0 };
329- msgpack_serialize_data_t var_hash ;
330-
331- msgpack_serialize_var_init (& var_hash );
332- msgpack_serialize_zval (& res , (zval * ) value , var_hash );
333- msgpack_serialize_var_destroy (& var_hash );
334-
335- smart_str_0 (& res );
336-
337- * buf = (unsigned char * ) estrndup (ZSTR_VAL (res .s ), ZSTR_LEN (res .s ));
338- * buf_len = ZSTR_LEN (res .s );
339-
340- return 1 ;
326+ static int APC_SERIALIZER_NAME (msgpack ) ( APC_SERIALIZER_ARGS ) /* {{{ */ {
327+ smart_str res = {0 };
328+ php_msgpack_serialize (& res , (zval * ) value );
329+
330+ if (res .s ) {
331+ smart_str_0 (& res );
332+ * buf = (unsigned char * ) estrndup (ZSTR_VAL (res .s ), ZSTR_LEN (res .s ));
333+ * buf_len = ZSTR_LEN (res .s );
334+ return 1 ;
335+ }
336+ return 0 ;
341337}
342338/* }}} */
343- /* {{{ apc_unserialize function */
344- static int APC_UNSERIALIZER_NAME (msgpack ) ( APC_UNSERIALIZER_ARGS ) {
345- (void )config ;
346-
347- int ret ;
348- msgpack_unpack_t mp ;
349- msgpack_unserialize_data_t var_hash ;
350- size_t off = 0 ;
351339
352- template_init (& mp );
353-
354- msgpack_unserialize_var_init (& var_hash );
355-
356- mp .user .retval = value ;
357- mp .user .var_hash = & var_hash ;
358-
359- ret = template_execute (& mp , (char * ) buf , buf_len , & off );
360- if (Z_TYPE_P (mp .user .retval ) == IS_REFERENCE ) {
361- ZVAL_DEREF (mp .user .retval );
362- }
363-
364- msgpack_unserialize_var_destroy (& var_hash , 0 );
365-
366- return ret == MSGPACK_UNPACK_EXTRA_BYTES || ret == MSGPACK_UNPACK_SUCCESS ;
340+ static int APC_UNSERIALIZER_NAME (msgpack ) ( APC_UNSERIALIZER_ARGS ) /* {{{ */ {
341+ if (buf_len > 0 && php_msgpack_unserialize (value , buf , buf_len ) == SUCCESS ) {
342+ return 1 ;
343+ }
344+ return 0 ;
367345}
368346/* }}} */
369347#endif
0 commit comments