diff --git a/internal.h b/internal.h index 85370ec0d7..6cab3d4ffd 100644 --- a/internal.h +++ b/internal.h @@ -1348,6 +1348,8 @@ VALUE rb_io_flush_raw(VALUE, int); size_t rb_io_memsize(const rb_io_t *); #endif int rb_stderr_tty_p(void); +void rb_io_fptr_finalize_internal(void *ptr); +#define rb_io_fptr_finalize rb_io_fptr_finalize_internal /* load.c */ VALUE rb_get_load_path(void); diff --git a/io.c b/io.c index 56332fe929..e5f3aef95d 100644 --- a/io.c +++ b/io.c @@ -4629,21 +4629,36 @@ clear_codeconv(rb_io_t *fptr) clear_writeconv(fptr); } -int -rb_io_fptr_finalize(rb_io_t *fptr) +void +rb_io_fptr_finalize_internal(void *ptr) { - if (!fptr) return 0; + rb_io_t *fptr = ptr; + + if (!ptr) return; fptr->pathv = Qnil; if (0 <= fptr->fd) - rb_io_fptr_cleanup(fptr, TRUE); + rb_io_fptr_cleanup(fptr, TRUE); fptr->write_lock = 0; free_io_buffer(&fptr->rbuf); free_io_buffer(&fptr->wbuf); clear_codeconv(fptr); free(fptr); - return 1; } +#undef rb_io_fptr_finalize +int +rb_io_fptr_finalize(rb_io_t *fptr) +{ + if (!fptr) { + return 0; + } + else { + rb_io_fptr_finalize_internal(fptr); + return 1; + } +} +#define rb_io_fptr_finalize(fptr) rb_io_fptr_finalize_internal(fptr) + RUBY_FUNC_EXPORTED size_t rb_io_memsize(const rb_io_t *fptr) {