@@ -42,6 +42,7 @@ struct php_user_stream_wrapper {
42
42
};
43
43
44
44
static php_stream * user_wrapper_opener (php_stream_wrapper * wrapper , const char * filename , const char * mode , int options , zend_string * * opened_path , php_stream_context * context STREAMS_DC );
45
+ static int user_wrapper_close (php_stream_wrapper * wrapper , php_stream * stream );
45
46
static int user_wrapper_stat_url (php_stream_wrapper * wrapper , const char * url , int flags , php_stream_statbuf * ssb , php_stream_context * context );
46
47
static int user_wrapper_unlink (php_stream_wrapper * wrapper , const char * url , int options , php_stream_context * context );
47
48
static int user_wrapper_rename (php_stream_wrapper * wrapper , const char * url_from , const char * url_to , int options , php_stream_context * context );
@@ -53,7 +54,7 @@ static php_stream *user_wrapper_opendir(php_stream_wrapper *wrapper, const char
53
54
54
55
static const php_stream_wrapper_ops user_stream_wops = {
55
56
user_wrapper_opener ,
56
- NULL , /* close - the streams themselves know how */
57
+ user_wrapper_close ,
57
58
NULL , /* stat - the streams themselves know how */
58
59
user_wrapper_stat_url ,
59
60
user_wrapper_opendir ,
@@ -375,6 +376,8 @@ static php_stream *user_wrapper_opener(php_stream_wrapper *wrapper, const char *
375
376
376
377
/* set wrapper data to be a reference to our object */
377
378
ZVAL_COPY (& stream -> wrapperdata , & us -> object );
379
+
380
+ GC_ADDREF (us -> wrapper -> resource );
378
381
} else {
379
382
php_stream_wrapper_log_error (wrapper , options , "\"%s::" USERSTREAM_OPEN "\" call failed" ,
380
383
ZSTR_VAL (us -> wrapper -> ce -> name ));
@@ -399,6 +402,14 @@ static php_stream *user_wrapper_opener(php_stream_wrapper *wrapper, const char *
399
402
return stream ;
400
403
}
401
404
405
+ static int user_wrapper_close (php_stream_wrapper * wrapper , php_stream * stream )
406
+ {
407
+ struct php_user_stream_wrapper * uwrap = (struct php_user_stream_wrapper * )wrapper -> abstract ;
408
+ zend_list_delete (uwrap -> resource );
409
+ // FIXME: Unused?
410
+ return 0 ;
411
+ }
412
+
402
413
static php_stream * user_wrapper_opendir (php_stream_wrapper * wrapper , const char * filename , const char * mode ,
403
414
int options , zend_string * * opened_path , php_stream_context * context STREAMS_DC )
404
415
{
@@ -440,6 +451,8 @@ static php_stream *user_wrapper_opendir(php_stream_wrapper *wrapper, const char
440
451
441
452
/* set wrapper data to be a reference to our object */
442
453
ZVAL_COPY (& stream -> wrapperdata , & us -> object );
454
+
455
+ GC_ADDREF (us -> wrapper -> resource );
443
456
} else {
444
457
php_stream_wrapper_log_error (wrapper , options , "\"%s::" USERSTREAM_DIR_OPEN "\" call failed" ,
445
458
ZSTR_VAL (us -> wrapper -> ce -> name ));
0 commit comments