@@ -528,9 +528,22 @@ static spl_filesystem_object *spl_filesystem_object_create_type(int num_args, sp
528
528
529
529
spl_filesystem_object_get_file_name (source );
530
530
531
+ char * open_mode = "r" ;
532
+ size_t open_mode_len = 1 ;
533
+ zval * resource = NULL ;
534
+
535
+ if (num_args && zend_parse_parameters (num_args , "|sbr" ,
536
+ & open_mode , & open_mode_len , & use_include_path , & resource ) == FAILURE
537
+ ) {
538
+ zend_restore_error_handling (& error_handling );
539
+ zval_ptr_dtor (return_value );
540
+ ZVAL_NULL (return_value );
541
+ return NULL ;
542
+ }
543
+
531
544
if (ce -> constructor -> common .scope != spl_ce_SplFileObject ) {
532
545
ZVAL_STRINGL (& arg1 , source -> file_name , source -> file_name_len );
533
- ZVAL_STRINGL (& arg2 , "r" , 1 );
546
+ ZVAL_STRINGL (& arg2 , open_mode , open_mode_len );
534
547
zend_call_method_with_2_params (Z_OBJ_P (return_value ), ce , & ce -> constructor , "__construct" , NULL , & arg1 , & arg2 );
535
548
zval_ptr_dtor (& arg1 );
536
549
zval_ptr_dtor (& arg2 );
@@ -540,19 +553,9 @@ static spl_filesystem_object *spl_filesystem_object_create_type(int num_args, sp
540
553
intern -> _path = spl_filesystem_object_get_path (source , & intern -> _path_len );
541
554
intern -> _path = estrndup (intern -> _path , intern -> _path_len );
542
555
543
- intern -> u .file .open_mode = "r" ;
544
- intern -> u .file .open_mode_len = 1 ;
545
-
546
- if (num_args && zend_parse_parameters (num_args , "|sbr" ,
547
- & intern -> u .file .open_mode , & intern -> u .file .open_mode_len ,
548
- & use_include_path , & intern -> u .file .zcontext ) == FAILURE ) {
549
- zend_restore_error_handling (& error_handling );
550
- intern -> u .file .open_mode = NULL ;
551
- intern -> file_name = NULL ;
552
- zval_ptr_dtor (return_value );
553
- ZVAL_NULL (return_value );
554
- return NULL ;
555
- }
556
+ intern -> u .file .open_mode = open_mode ;
557
+ intern -> u .file .open_mode_len = open_mode_len ;
558
+ intern -> u .file .zcontext = resource ;
556
559
557
560
if (spl_filesystem_file_open (intern , use_include_path , 0 ) == FAILURE ) {
558
561
zend_restore_error_handling (& error_handling );
0 commit comments