@@ -354,35 +354,35 @@ void phongo_writeconcern_init(zval *return_value, const mongoc_write_concern_t *
354
354
zend_bool phongo_writeconcernerror_init (zval * return_value , bson_t * bson TSRMLS_DC ) /* {{{ */
355
355
{
356
356
bson_iter_t iter ;
357
- php_phongo_writeconcernerror_t * writeconcernerror ;
357
+ php_phongo_writeconcernerror_t * intern ;
358
358
359
- writeconcernerror = Z_WRITECONCERNERROR_OBJ_P (return_value );
359
+ object_init_ex (return_value , php_phongo_writeconcernerror_ce );
360
+
361
+ intern = Z_WRITECONCERNERROR_OBJ_P (return_value );
360
362
361
363
if (bson_iter_init_find (& iter , bson , "code" ) && BSON_ITER_HOLDS_INT32 (& iter )) {
362
- writeconcernerror -> code = bson_iter_int32 (& iter );
364
+ intern -> code = bson_iter_int32 (& iter );
363
365
}
366
+
364
367
if (bson_iter_init_find (& iter , bson , "errmsg" ) && BSON_ITER_HOLDS_UTF8 (& iter )) {
365
368
uint32_t errmsg_len ;
366
369
const char * err_msg = bson_iter_utf8 (& iter , & errmsg_len );
367
370
368
- writeconcernerror -> message = estrndup (err_msg , errmsg_len );
371
+ intern -> message = estrndup (err_msg , errmsg_len );
369
372
}
373
+
370
374
if (bson_iter_init_find (& iter , bson , "errInfo" ) && BSON_ITER_HOLDS_DOCUMENT (& iter )) {
371
- uint32_t len ;
372
- const uint8_t * data ;
375
+ uint32_t len ;
376
+ const uint8_t * data = NULL ;
373
377
374
378
bson_iter_document (& iter , & len , & data );
375
379
376
- if (!data ) {
377
- return false;
378
- }
379
-
380
- if (!phongo_bson_to_zval (data , len , & writeconcernerror -> info )) {
381
- zval_ptr_dtor (& writeconcernerror -> info );
380
+ if (!phongo_bson_to_zval (data , len , & intern -> info )) {
381
+ zval_ptr_dtor (& intern -> info );
382
382
#if PHP_VERSION_ID >= 70000
383
- ZVAL_UNDEF (& writeconcernerror -> info );
383
+ ZVAL_UNDEF (& intern -> info );
384
384
#else
385
- writeconcernerror -> info = NULL ;
385
+ intern -> info = NULL ;
386
386
#endif
387
387
388
388
return false;
@@ -395,38 +395,43 @@ zend_bool phongo_writeconcernerror_init(zval *return_value, bson_t *bson TSRMLS_
395
395
zend_bool phongo_writeerror_init (zval * return_value , bson_t * bson TSRMLS_DC ) /* {{{ */
396
396
{
397
397
bson_iter_t iter ;
398
- php_phongo_writeerror_t * writeerror ;
398
+ php_phongo_writeerror_t * intern ;
399
399
400
- writeerror = Z_WRITEERROR_OBJ_P (return_value );
400
+ object_init_ex (return_value , php_phongo_writeerror_ce );
401
+
402
+ intern = Z_WRITEERROR_OBJ_P (return_value );
401
403
402
404
if (bson_iter_init_find (& iter , bson , "code" ) && BSON_ITER_HOLDS_INT32 (& iter )) {
403
- writeerror -> code = bson_iter_int32 (& iter );
405
+ intern -> code = bson_iter_int32 (& iter );
404
406
}
407
+
405
408
if (bson_iter_init_find (& iter , bson , "errmsg" ) && BSON_ITER_HOLDS_UTF8 (& iter )) {
406
409
uint32_t errmsg_len ;
407
410
const char * err_msg = bson_iter_utf8 (& iter , & errmsg_len );
408
411
409
- writeerror -> message = estrndup (err_msg , errmsg_len );
412
+ intern -> message = estrndup (err_msg , errmsg_len );
410
413
}
411
- if (bson_iter_init_find (& iter , bson , "errInfo" )) {
412
- bson_t info ;
413
414
414
- bson_init (& info );
415
- bson_append_iter (& info , NULL , 0 , & iter );
415
+ if (bson_iter_init_find (& iter , bson , "errInfo" ) && BSON_ITER_HOLDS_DOCUMENT (& iter )) {
416
+ uint32_t len ;
417
+ const uint8_t * data = NULL ;
418
+
419
+ bson_iter_document (& iter , & len , & data );
416
420
417
- if (!phongo_bson_to_zval (bson_get_data ( & info ), info . len , & writeerror -> info )) {
418
- zval_ptr_dtor (& writeerror -> info );
421
+ if (!phongo_bson_to_zval (data , len , & intern -> info )) {
422
+ zval_ptr_dtor (& intern -> info );
419
423
#if PHP_VERSION_ID >= 70000
420
- ZVAL_UNDEF (& writeerror -> info );
424
+ ZVAL_UNDEF (& intern -> info );
421
425
#else
422
- writeerror -> info = NULL ;
426
+ intern -> info = NULL ;
423
427
#endif
424
428
425
429
return false;
426
430
}
427
431
}
432
+
428
433
if (bson_iter_init_find (& iter , bson , "index" ) && BSON_ITER_HOLDS_INT32 (& iter )) {
429
- writeerror -> index = bson_iter_int32 (& iter );
434
+ intern -> index = bson_iter_int32 (& iter );
430
435
}
431
436
432
437
return true;
0 commit comments