ruby-changes:69679
From: Nobuyoshi <ko1@a...>
Date: Wed, 10 Nov 2021 16:55:04 +0900 (JST)
Subject: [ruby-changes:69679] 46e46eafd4 (master): size_t is not for file size
https://git.ruby-lang.org/ruby.git/commit/?id=46e46eafd4 From 46e46eafd48c474ae8be0dd7d11bc43725de3d02 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada <nobu@r...> Date: Wed, 10 Nov 2021 16:41:26 +0900 Subject: size_t is not for file size --- file.c | 5 +- include/ruby/internal/intern/file.h | 2 +- include/ruby/io/buffer.h | 6 +- io.c | 6 +- io_buffer.c | 178 +++++++++++++++++++++++------------- 5 files changed, 129 insertions(+), 68 deletions(-) diff --git a/file.c b/file.c index 4629a9aee89..b073051944f 100644 --- a/file.c +++ b/file.c @@ -2515,7 +2515,8 @@ rb_file_birthtime(VALUE obj) https://github.com/ruby/ruby/blob/trunk/file.c#L2515 * */ -size_t rb_file_size(VALUE file) +off_t +rb_file_size(VALUE file) { rb_io_t *fptr; struct stat st; @@ -2535,7 +2536,7 @@ size_t rb_file_size(VALUE file) https://github.com/ruby/ruby/blob/trunk/file.c#L2536 static VALUE file_size(VALUE self) { - return RB_SIZE2NUM(rb_file_size(self)); + return OFFT2NUM(rb_file_size(self)); } static int diff --git a/include/ruby/internal/intern/file.h b/include/ruby/internal/intern/file.h index ce676bfd090..43f1fd7c602 100644 --- a/include/ruby/internal/intern/file.h +++ b/include/ruby/internal/intern/file.h @@ -187,7 +187,7 @@ RBIMPL_ATTR_PURE() https://github.com/ruby/ruby/blob/trunk/include/ruby/internal/intern/file.h#L187 */ int rb_is_absolute_path(const char *path); -size_t rb_file_size(VALUE file); +off_t rb_file_size(VALUE file); RBIMPL_SYMBOL_EXPORT_END() diff --git a/include/ruby/io/buffer.h b/include/ruby/io/buffer.h index 053e7e17f97..c6132c572a6 100644 --- a/include/ruby/io/buffer.h +++ b/include/ruby/io/buffer.h @@ -1,3 +1,5 @@ https://github.com/ruby/ruby/blob/trunk/include/ruby/io/buffer.h#L1 +#ifndef RUBY_IO_BUFFER_T +#define RUBY_IO_BUFFER_T 1 /** * @file * @author Samuel Williams @@ -54,7 +56,7 @@ enum rb_io_buffer_endian { https://github.com/ruby/ruby/blob/trunk/include/ruby/io/buffer.h#L56 RB_IO_BUFFER_HOST_ENDIAN = RB_IO_BUFFER_BIG_ENDIAN, #endif - RB_IO_BUFFER_NETWORK_ENDIAN = RB_IO_BUFFER_BIG_ENDIAN, + RB_IO_BUFFER_NETWORK_ENDIAN = RB_IO_BUFFER_BIG_ENDIAN }; VALUE rb_io_buffer_new(void *base, size_t size, enum rb_io_buffer_flags flags); @@ -72,3 +74,5 @@ void rb_io_buffer_resize(VALUE self, size_t size, size_t preserve); https://github.com/ruby/ruby/blob/trunk/include/ruby/io/buffer.h#L74 void rb_io_buffer_clear(VALUE self, uint8_t value, size_t offset, size_t length); RUBY_SYMBOL_EXPORT_END + +#endif /* RUBY_IO_BUFFER_T */ diff --git a/io.c b/io.c index 81f7d8ecb67..8a4df453ace 100644 --- a/io.c +++ b/io.c @@ -2584,13 +2584,15 @@ rb_io_fileno(VALUE io) https://github.com/ruby/ruby/blob/trunk/io.c#L2584 return INT2FIX(fd); } -int rb_io_descriptor(VALUE io) +int +rb_io_descriptor(VALUE io) { if (RB_TYPE_P(io, T_FILE)) { rb_io_t *fptr = RFILE(io)->fptr; rb_io_check_closed(fptr); return fptr->fd; - } else { + } + else { return RB_NUM2INT(rb_funcall(io, id_fileno, 0)); } } diff --git a/io_buffer.c b/io_buffer.c index 521d9d8ea95..f53b140130a 100644 --- a/io_buffer.c +++ b/io_buffer.c @@ -34,7 +34,8 @@ struct rb_io_buffer { https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L34 VALUE source; }; -static inline void* io_buffer_map_memory(size_t size) +static inline void * +io_buffer_map_memory(size_t size) { #if defined(_WIN32) void * base = VirtualAlloc(0, size, MEM_COMMIT, PAGE_READWRITE); @@ -53,8 +54,8 @@ static inline void* io_buffer_map_memory(size_t size) https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L54 return base; } -static -void io_buffer_map_file(struct rb_io_buffer *data, int descriptor, size_t size, off_t offset, enum rb_io_buffer_flags flags) +static void +io_buffer_map_file(struct rb_io_buffer *data, int descriptor, size_t size, off_t offset, enum rb_io_buffer_flags flags) { #if defined(_WIN32) HANDLE file = (HANDLE)_get_osfhandle(descriptor); @@ -64,7 +65,8 @@ void io_buffer_map_file(struct rb_io_buffer *data, int descriptor, size_t size, https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L65 if (flags & RB_IO_BUFFER_IMMUTABLE) { data->flags |= RB_IO_BUFFER_IMMUTABLE; - } else { + } + else { protect = PAGE_READWRITE; access = FILE_MAP_WRITE; } @@ -90,13 +92,15 @@ void io_buffer_map_file(struct rb_io_buffer *data, int descriptor, size_t size, https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L92 if (flags & RB_IO_BUFFER_IMMUTABLE) { data->flags |= RB_IO_BUFFER_IMMUTABLE; - } else { + } + else { protect |= PROT_WRITE; } if (flags & RB_IO_BUFFER_PRIVATE) { data->flags |= RB_IO_BUFFER_PRIVATE; - } else { + } + else { access |= MAP_SHARED; } @@ -113,7 +117,8 @@ void io_buffer_map_file(struct rb_io_buffer *data, int descriptor, size_t size, https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L117 data->flags |= RB_IO_BUFFER_MAPPED; } -static inline void io_buffer_unmap(void* base, size_t size) +static inline void +io_buffer_unmap(void* base, size_t size) { #ifdef _WIN32 VirtualFree(base, 0, MEM_RELEASE); @@ -122,7 +127,8 @@ static inline void io_buffer_unmap(void* base, size_t size) https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L127 #endif } -static void io_buffer_experimental(void) +static void +io_buffer_experimental(void) { static int warned = 0; @@ -137,7 +143,8 @@ static void io_buffer_experimental(void) https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L143 } } -static void io_buffer_initialize(struct rb_io_buffer *data, void *base, size_t size, enum rb_io_buffer_flags flags, VALUE source) +static void +io_buffer_initialize(struct rb_io_buffer *data, void *base, size_t size, enum rb_io_buffer_flags flags, VALUE source) { io_buffer_experimental(); @@ -146,10 +153,12 @@ static void io_buffer_initialize(struct rb_io_buffer *data, void *base, size_t s https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L153 if (base) { data->base = base; - } else { + } + else { if (data->flags & RB_IO_BUFFER_INTERNAL) { data->base = calloc(data->size, 1); - } else if (data->flags & RB_IO_BUFFER_MAPPED) { + } + else if (data->flags & RB_IO_BUFFER_MAPPED) { data->base = io_buffer_map_memory(data->size); } } @@ -161,7 +170,8 @@ static void io_buffer_initialize(struct rb_io_buffer *data, void *base, size_t s https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L170 data->source = source; } -static int io_buffer_free(struct rb_io_buffer *data) +static int +io_buffer_free(struct rb_io_buffer *data) { if (data->base) { if (data->flags & RB_IO_BUFFER_INTERNAL) { @@ -187,13 +197,15 @@ static int io_buffer_free(struct rb_io_buffer *data) https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L197 return 0; } -void rb_io_buffer_type_mark(void *_data) +void +rb_io_buffer_type_mark(void *_data) { struct rb_io_buffer *data = _data; rb_gc_mark(data->source); } -void rb_io_buffer_type_free(void *_data) +void +rb_io_buffer_type_free(void *_data) { struct rb_io_buffer *data = _data; @@ -202,7 +214,8 @@ void rb_io_buffer_type_free(void *_data) https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L214 free(data); } -size_t rb_io_buffer_type_size(const void *_data) +size_t +rb_io_buffer_type_size(const void *_data) { const struct rb_io_buffer *data = _data; size_t total = sizeof(struct rb_io_buffer); @@ -225,7 +238,8 @@ static const rb_data_type_t rb_io_buffer_type = { https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L238 .flags = RUBY_TYPED_FREE_IMMEDIATELY, }; -VALUE rb_io_buffer_type_allocate(VALUE self) +VALUE +rb_io_buffer_type_allocate(VALUE self) { struct rb_io_buffer *data = NULL; VALUE instance = TypedData_Make_Struct(self, struct rb_io_buffer, &rb_io_buffer_type, data); @@ -238,7 +252,8 @@ VALUE rb_io_buffer_type_allocate(VALUE self) https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L252 return instance; } -VALUE rb_io_buffer_new(void *base, size_t size, enum rb_io_buffer_flags flags) +VALUE +rb_io_buffer_new(void *base, size_t size, enum rb_io_buffer_flags flags) { VALUE instance = rb_io_buffer_type_allocate(rb_cIOBuffer); @@ -250,7 +265,8 @@ VALUE rb_io_buffer_new(void *base, size_t size, enum rb_io_buffer_flags flags) https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L265 return instance; } -VALUE rb_io_buffer_map(VALUE io, size_t size, off_t offset, enum rb_io_buffer_flags flags) +VALUE +rb_io_buffer_map(VALUE io, size_t size, off_t offset, enum rb_io_buffer_flags flags) { VALUE instance = rb_io_buffer_type_allocate(rb_cIOBuffer); @@ -264,8 +280,8 @@ VALUE rb_io_buffer_map(VALUE io, size_t size, off_t offset, enum rb_io_buffer_fl https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L280 return instance; } -static -VALUE io_buffer_map(int argc, VALUE *argv, VALUE klass) +static VALUE +io_buffer_map(int argc, VALUE *argv, VALUE klass) { if (argc < 1 || argc > 4) { rb_error_arity(argc, 2, 4); @@ -276,7 +292,8 @@ VALUE io_buffer_map(int argc, VALUE *argv, VALUE klass) https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L292 size_t size; if (argc >= 2) { size = RB_NUM2SIZE(argv[1]); - } else { + } + else { size = rb_file_size(io); } @@ -293,7 +310,8 @@ VALUE io_buffer_map(int argc, VALUE *argv, VALUE klass) https://github.com/ruby/ruby/blob/trunk/io_buffer.c#L310 return rb_io_buffer_map(io, size, offset, flags); } -VALUE rb_io_buffer_initialize(int argc, VALUE *argv, VALUE self) +VALUE +rb_io_buffer_initialize(int argc, VALUE *argv, VALUE self) { if (argc < 1 || argc > 2) { rb_error_arity(argc, 1, 2); @@ -307,10 +325,12 @@ V (... truncated) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/