9
9
10
10
typedef struct {
11
11
long php_only ;
12
+ zend_bool assoc ;
12
13
zend_object object ;
13
14
} php_msgpack_base_t ;
14
15
@@ -18,6 +19,7 @@ typedef struct {
18
19
long offset ;
19
20
msgpack_unpack_t mp ;
20
21
long php_only ;
22
+ zend_bool assoc ;
21
23
zend_bool finished ;
22
24
int error ;
23
25
zend_object object ;
@@ -175,13 +177,15 @@ static void php_msgpack_unpacker_free(zend_object *object) /* {{{ */ {
175
177
/* MessagePack */
176
178
static ZEND_METHOD (msgpack , __construct ) /* {{{ */ {
177
179
zend_bool php_only = MSGPACK_G (php_only );
180
+ zend_bool assoc = MSGPACK_G (assoc );
178
181
php_msgpack_base_t * base = Z_MSGPACK_BASE_P (getThis ());
179
182
180
183
if (zend_parse_parameters (ZEND_NUM_ARGS (), "|b" , & php_only ) == FAILURE ) {
181
184
return ;
182
185
}
183
186
184
187
base -> php_only = php_only ;
188
+ base -> assoc = assoc ;
185
189
}
186
190
/* }}} */
187
191
@@ -198,6 +202,9 @@ static ZEND_METHOD(msgpack, setOption) /* {{{ */ {
198
202
case MSGPACK_CLASS_OPT_PHPONLY :
199
203
base -> php_only = i_zend_is_true (value );
200
204
break ;
205
+ case MSGPACK_CLASS_OPT_ASSOC :
206
+ base -> assoc = i_zend_is_true (value );
207
+ break ;
201
208
default :
202
209
MSGPACK_WARNING ("[msgpack] (MessagePack::setOption) "
203
210
"error setting msgpack option" );
@@ -213,17 +220,20 @@ static ZEND_METHOD(msgpack, pack) /* {{{ */ {
213
220
zval * parameter ;
214
221
smart_str buf = {0 };
215
222
int php_only = MSGPACK_G (php_only );
223
+ zend_bool assoc = MSGPACK_G (assoc );
216
224
php_msgpack_base_t * base = Z_MSGPACK_BASE_P (getThis ());
217
225
218
226
if (zend_parse_parameters (ZEND_NUM_ARGS (), "z" , & parameter ) == FAILURE ) {
219
227
return ;
220
228
}
221
229
222
230
MSGPACK_G (php_only ) = base -> php_only ;
231
+ MSGPACK_G (assoc ) = base -> assoc ;
223
232
224
233
php_msgpack_serialize (& buf , parameter );
225
234
226
235
MSGPACK_G (php_only ) = php_only ;
236
+ MSGPACK_G (assoc ) = assoc ;
227
237
if (buf .s ) {
228
238
smart_str_0 (& buf );
229
239
ZVAL_STR (return_value , buf .s );
@@ -238,6 +248,7 @@ static ZEND_METHOD(msgpack, unpack) /* {{{ */ {
238
248
zend_string * str ;
239
249
zval * object = NULL ;
240
250
zend_bool php_only = MSGPACK_G (php_only );
251
+ zend_bool assoc = MSGPACK_G (assoc );
241
252
php_msgpack_base_t * base = Z_MSGPACK_BASE_P (getThis ());
242
253
243
254
if (zend_parse_parameters (ZEND_NUM_ARGS (), "S|z" , & str , & object ) == FAILURE ) {
@@ -249,6 +260,7 @@ static ZEND_METHOD(msgpack, unpack) /* {{{ */ {
249
260
}
250
261
251
262
MSGPACK_G (php_only ) = base -> php_only ;
263
+ MSGPACK_G (assoc ) = base -> assoc ;
252
264
253
265
if (object == NULL ) {
254
266
php_msgpack_unserialize (return_value , ZSTR_VAL (str ), ZSTR_LEN (str ));
@@ -263,6 +275,7 @@ static ZEND_METHOD(msgpack, unpack) /* {{{ */ {
263
275
}
264
276
265
277
MSGPACK_G (php_only ) = php_only ;
278
+ MSGPACK_G (assoc ) = assoc ;
266
279
}
267
280
/* }}} */
268
281
@@ -283,13 +296,15 @@ static ZEND_METHOD(msgpack, unpacker) /* {{{ */ {
283
296
/* MessagePackUnpacker */
284
297
static ZEND_METHOD (msgpack_unpacker , __construct ) /* {{{ */ {
285
298
zend_bool php_only = MSGPACK_G (php_only );
299
+ zend_bool assoc = MSGPACK_G (assoc );
286
300
php_msgpack_unpacker_t * unpacker = Z_MSGPACK_UNPACKER_P (getThis ());
287
301
288
302
if (zend_parse_parameters (ZEND_NUM_ARGS (), "|b" , & php_only ) == FAILURE ) {
289
303
return ;
290
304
}
291
305
292
306
unpacker -> php_only = php_only ;
307
+ unpacker -> assoc = assoc ;
293
308
294
309
unpacker -> buffer .s = NULL ;
295
310
unpacker -> buffer .a = 0 ;
@@ -322,6 +337,9 @@ static ZEND_METHOD(msgpack_unpacker, setOption) /* {{{ */ {
322
337
case MSGPACK_CLASS_OPT_PHPONLY :
323
338
unpacker -> php_only = i_zend_is_true (value );
324
339
break ;
340
+ case MSGPACK_CLASS_OPT_ASSOC :
341
+ unpacker -> assoc = i_zend_is_true (value );
342
+ break ;
325
343
default :
326
344
MSGPACK_WARNING ("[msgpack] (MessagePackUnpacker::setOption) "
327
345
"error setting msgpack option" );
@@ -356,6 +374,7 @@ static ZEND_METHOD(msgpack_unpacker, execute) /* {{{ */ {
356
374
size_t len , off ;
357
375
zend_string * str = NULL ;
358
376
int ret , error_display = MSGPACK_G (error_display ), php_only = MSGPACK_G (php_only );
377
+ zend_bool assoc = MSGPACK_G (assoc );
359
378
zval * offset = NULL ;
360
379
php_msgpack_unpacker_t * unpacker = Z_MSGPACK_UNPACKER_P (getThis ());
361
380
@@ -392,11 +411,13 @@ static ZEND_METHOD(msgpack_unpacker, execute) /* {{{ */ {
392
411
393
412
MSGPACK_G (error_display ) = 0 ;
394
413
MSGPACK_G (php_only ) = unpacker -> php_only ;
414
+ MSGPACK_G (assoc ) = unpacker -> assoc ;
395
415
396
416
ret = template_execute (& unpacker -> mp , data , len , & off );
397
417
398
418
MSGPACK_G (error_display ) = error_display ;
399
419
MSGPACK_G (php_only ) = php_only ;
420
+ MSGPACK_G (assoc ) = assoc ;
400
421
401
422
if (str != NULL ) {
402
423
if (offset != NULL ) {
@@ -490,6 +511,7 @@ void msgpack_init_class() /* {{{ */ {
490
511
msgpack_handlers .free_obj = php_msgpack_base_free ;
491
512
492
513
zend_declare_class_constant_long (msgpack_ce , ZEND_STRS ("OPT_PHPONLY" ) - 1 , MSGPACK_CLASS_OPT_PHPONLY );
514
+ zend_declare_class_constant_long (msgpack_ce , ZEND_STRS ("OPT_ASSOC" ) - 1 , MSGPACK_CLASS_OPT_ASSOC );
493
515
494
516
/* unpacker */
495
517
INIT_CLASS_ENTRY (ce , "MessagePackUnpacker" , msgpack_unpacker_methods );
0 commit comments