mirror of
https://github.com/ruby/ruby.git
synced 2025-08-23 04:55:21 +02:00
Fix size calcuation when offset is given + updated documentation.
This commit is contained in:
parent
2d62c5d3d9
commit
bc482e632c
1 changed files with 18 additions and 12 deletions
30
io_buffer.c
30
io_buffer.c
|
@ -2563,6 +2563,7 @@ rb_io_buffer_read(VALUE self, VALUE io, size_t length, size_t offset)
|
||||||
io_buffer_get_bytes_for_writing(buffer, &base, &size);
|
io_buffer_get_bytes_for_writing(buffer, &base, &size);
|
||||||
|
|
||||||
base = (unsigned char*)base + offset;
|
base = (unsigned char*)base + offset;
|
||||||
|
size = size - offset;
|
||||||
|
|
||||||
struct io_buffer_read_internal_argument argument = {
|
struct io_buffer_read_internal_argument argument = {
|
||||||
.descriptor = descriptor,
|
.descriptor = descriptor,
|
||||||
|
@ -2575,16 +2576,18 @@ rb_io_buffer_read(VALUE self, VALUE io, size_t length, size_t offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq: read(io, length, [offset]) -> read length or -errno
|
* call-seq: read(io, [length, [offset]]) -> read length or -errno
|
||||||
*
|
*
|
||||||
* Read at most +length+ bytes from +io+ into the buffer, starting at
|
* Read at least +length+ bytes from the +io+, into the buffer starting at
|
||||||
* +offset+. If an error occurs, return <tt>-errno</tt>.
|
* +offset+. If an error occurs, return <tt>-errno</tt>.
|
||||||
*
|
*
|
||||||
* If +offset+ is not given, read from the beginning of the buffer.
|
* If +length+ is not given or +nil+, it defaults to the size of the buffer
|
||||||
|
* minus the offset, i.e. the entire buffer.
|
||||||
*
|
*
|
||||||
* If +length+ is 0, read nothing.
|
* If +length+ is zero, exactly one <tt>read</tt> operation will occur.
|
||||||
*
|
*
|
||||||
* Example:
|
* If +offset+ is not given, it defaults to zero, i.e. the beginning of the
|
||||||
|
* buffer.
|
||||||
*
|
*
|
||||||
* IO::Buffer.for('test') do |buffer|
|
* IO::Buffer.for('test') do |buffer|
|
||||||
* p buffer
|
* p buffer
|
||||||
|
@ -2785,7 +2788,8 @@ rb_io_buffer_write(VALUE self, VALUE io, size_t length, size_t offset)
|
||||||
size_t size;
|
size_t size;
|
||||||
io_buffer_get_bytes_for_reading(buffer, &base, &size);
|
io_buffer_get_bytes_for_reading(buffer, &base, &size);
|
||||||
|
|
||||||
base = (unsigned char *)base + offset;
|
base = (unsigned char*)base + offset;
|
||||||
|
size = size - offset;
|
||||||
|
|
||||||
struct io_buffer_write_internal_argument argument = {
|
struct io_buffer_write_internal_argument argument = {
|
||||||
.descriptor = descriptor,
|
.descriptor = descriptor,
|
||||||
|
@ -2800,14 +2804,16 @@ rb_io_buffer_write(VALUE self, VALUE io, size_t length, size_t offset)
|
||||||
/*
|
/*
|
||||||
* call-seq: write(io, [length, [offset]]) -> written length or -errno
|
* call-seq: write(io, [length, [offset]]) -> written length or -errno
|
||||||
*
|
*
|
||||||
* Writes at least +length+ bytes from buffer into +io+, starting at
|
* Write at least +length+ bytes from the buffer starting at +offset+, into the +io+.
|
||||||
* +offset+ in the buffer. If an error occurs, return <tt>-errno</tt>.
|
* If an error occurs, return <tt>-errno</tt>.
|
||||||
*
|
*
|
||||||
* If +length+ is not given or nil, the whole buffer is written, minus
|
* If +length+ is not given or +nil+, it defaults to the size of the buffer
|
||||||
* the offset. If +length+ is zero, write will be called once.
|
* minus the offset, i.e. the entire buffer.
|
||||||
*
|
*
|
||||||
* If +offset+ is not given, the bytes are taken from the beginning
|
* If +length+ is zero, exactly one <tt>write</tt> operation will occur.
|
||||||
* of the buffer.
|
*
|
||||||
|
* If +offset+ is not given, it defaults to zero, i.e. the beginning of the
|
||||||
|
* buffer.
|
||||||
*
|
*
|
||||||
* out = File.open('output.txt', 'wb')
|
* out = File.open('output.txt', 'wb')
|
||||||
* IO::Buffer.for('1234567').write(out, 3)
|
* IO::Buffer.for('1234567').write(out, 3)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue