@@ -96,6 +96,7 @@ static void php_wddx_process_data(void *user_data, const char *s, int len);
96
96
*/
97
97
function_entry wddx_functions [] = {
98
98
PHP_FE (wddx_serialize_value , NULL )
99
+ PHP_FE (wddx_serialize_type , NULL )
99
100
PHP_FE (wddx_serialize_vars , NULL )
100
101
PHP_FE (wddx_packet_start , NULL )
101
102
PHP_FE (wddx_packet_end , NULL )
@@ -304,6 +305,15 @@ PS_SERIALIZER_DECODE_FUNC(wddx)
304
305
PHP_MINIT_FUNCTION (wddx )
305
306
{
306
307
le_wddx = zend_register_list_destructors_ex (release_wddx_packet_rsrc , NULL , "wddx" , module_number );
308
+ REGISTER_LONG_CONSTANT ("WDDX_BOOLEAN" , WDDX_BOOLEAN_T , CONST_CS | CONST_PERSISTENT );
309
+ REGISTER_LONG_CONSTANT ("WDDX_NUMBER" , WDDX_NUMBER_T , CONST_CS | CONST_PERSISTENT );
310
+ REGISTER_LONG_CONSTANT ("WDDX_NULL" , WDDX_NULL_T , CONST_CS | CONST_PERSISTENT );
311
+ REGISTER_LONG_CONSTANT ("WDDX_DATETIME" , WDDX_DATETIME_T , CONST_CS | CONST_PERSISTENT );
312
+ REGISTER_LONG_CONSTANT ("WDDX_ARRAY" , WDDX_ARRAY_T , CONST_CS | CONST_PERSISTENT );
313
+ REGISTER_LONG_CONSTANT ("WDDX_RECORDSET" , WDDX_RECORDSET_T , CONST_CS | CONST_PERSISTENT );
314
+ REGISTER_LONG_CONSTANT ("WDDX_STRUCT" , WDDX_STRUCT_T , CONST_CS | CONST_PERSISTENT );
315
+ REGISTER_LONG_CONSTANT ("WDDX_STRING" , WDDX_STRING_T , CONST_CS | CONST_PERSISTENT );
316
+ REGISTER_LONG_CONSTANT ("WDDX_BINARY" , WDDX_BINARY_T , CONST_CS | CONST_PERSISTENT );
307
317
308
318
#if HAVE_PHP_SESSION
309
319
php_session_register_serializer ("wddx" ,
@@ -432,6 +442,24 @@ static void php_wddx_serialize_number(wddx_packet *packet, zval *var)
432
442
}
433
443
/* }}} */
434
444
445
+ /* {{{ php_wddx_serialize_binary
446
+ */
447
+ static void php_wddx_serialize_binary (wddx_packet * packet , zval * var )
448
+ {
449
+ char tmp_buf [WDDX_BUF_LEN ];
450
+ zval tmp ;
451
+
452
+ tmp = * var ;
453
+ zval_copy_ctor (& tmp );
454
+ convert_to_string (& tmp );
455
+
456
+ sprintf (tmp_buf , WDDX_BINARY , Z_STRVAL (tmp ));
457
+ zval_dtor (& tmp );
458
+
459
+ php_wddx_add_chunk (packet , tmp_buf );
460
+ }
461
+ /* }}} */
462
+
435
463
/* {{{ php_wddx_serialize_boolean
436
464
*/
437
465
static void php_wddx_serialize_boolean (wddx_packet * packet , zval * var )
@@ -1123,6 +1151,64 @@ PHP_FUNCTION(wddx_serialize_value)
1123
1151
}
1124
1152
/* }}} */
1125
1153
1154
+ /* {{{ proto string wddx_serialize_type(mixed var, int type, [, string comment])
1155
+ Creates a new packet, serializes the given value and casts the type*/
1156
+ PHP_FUNCTION (wddx_serialize_type )
1157
+ {
1158
+ zval * var ;
1159
+ char * comment = NULL ;
1160
+ int comment_len = 0 , type = 0 ;
1161
+ wddx_packet * packet ;
1162
+
1163
+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "zl|s" ,
1164
+ & var , & type , & comment , & comment_len ) == FAILURE )
1165
+ return ;
1166
+
1167
+ packet = php_wddx_constructor ();
1168
+ if (!packet ) {
1169
+ RETURN_FALSE ;
1170
+ }
1171
+
1172
+ php_wddx_packet_start (packet , comment , comment_len );
1173
+
1174
+ switch (type ) {
1175
+ case WDDX_NULL_T :
1176
+ php_wddx_serialize_unset (packet );
1177
+ break ;
1178
+ case WDDX_BOOLEAN_T :
1179
+ convert_to_boolean (var );
1180
+ php_wddx_serialize_boolean (packet , var );
1181
+ break ;
1182
+ case WDDX_NUMBER_T :
1183
+ convert_to_long (var );
1184
+ php_wddx_serialize_number (packet , var );
1185
+ break ;
1186
+ case WDDX_DATETIME_T : /* break omitted intentionally! */
1187
+ case WDDX_STRING_T :
1188
+ convert_to_string (var );
1189
+ php_wddx_serialize_string (packet , var );
1190
+ break ;
1191
+ case WDDX_ARRAY_T :
1192
+ case WDDX_STRUCT_T : /* breaks omitted intentionally! */
1193
+ case WDDX_RECORDSET_T :
1194
+ convert_to_array (var );
1195
+ php_wddx_serialize_array (packet , var );
1196
+ break ;
1197
+ case WDDX_BINARY_T :
1198
+ php_wddx_serialize_binary (packet , var );
1199
+ break ;
1200
+ default :
1201
+ break ;
1202
+ }
1203
+
1204
+ php_wddx_packet_end (packet );
1205
+
1206
+ ZVAL_STRINGL (return_value , packet -> c , packet -> len , 1 );
1207
+ smart_str_free (packet );
1208
+ efree (packet );
1209
+ }
1210
+ /* }}} */
1211
+
1126
1212
/* {{{ proto string wddx_serialize_vars(mixed var_name [, mixed ...])
1127
1213
Creates a new packet and serializes given variables into a struct */
1128
1214
PHP_FUNCTION (wddx_serialize_vars )
0 commit comments