stringio 3.0.7 → 3.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/ext/stringio/stringio.c +44 -1
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f7f9c928c654ab73856e461f75e7f6171252633858472336a8900cb37c06d15
4
- data.tar.gz: eb1583a64b9d4f4fdd46e3bffba21edb124074b7f1ce8f6c9cf25e5c9c45ae64
3
+ metadata.gz: 1c0b0200f04117b73fd9c58628c8775de264092f0bf620e9275de965a9b5353d
4
+ data.tar.gz: 47864febb9b35c83ea281a4330222dbd73f9622d6218ec4ac208996b38a04efd
5
5
  SHA512:
6
- metadata.gz: f8a13e0f7352087b716f1516829275c1ca5765cd3587c49f0c8bcd7ec3ff718b4fd09b3280159bb2fd1b4ab487e960468b361eda6121c6b45ed78b868b897bc2
7
- data.tar.gz: 805c032b64a74d49c2583230a2116ea955e7be9ad52f635fbfcefdfaf7586b0ccc51463dbc3f7e7ece15db8abc069fb74d2616dd6e165bf6bf6ba4d6070a17da
6
+ metadata.gz: 3ee084ea64f8565fe66705103a9720f12fd6e0c23e3798705c5395157c0c04794e0b15c36c418e70a8ac3c0d95cb0bd3a0befee02d745b4c05d7938f7dcb28c8
7
+ data.tar.gz: 25bae0db02e6d737ab323f42c879e8b955ffc5fbf54c847f5cdb4b6fe6087932c8c63a34999fc72a9658acdaa0e53287459ea615fdbc16d169b247ace347827c
@@ -12,7 +12,7 @@
12
12
 
13
13
  **********************************************************************/
14
14
 
15
- #define STRINGIO_VERSION "3.0.7"
15
+ #define STRINGIO_VERSION "3.0.8"
16
16
 
17
17
  #include "ruby.h"
18
18
  #include "ruby/io.h"
@@ -1583,6 +1583,48 @@ strio_read(int argc, VALUE *argv, VALUE self)
1583
1583
  return str;
1584
1584
  }
1585
1585
 
1586
+ /*
1587
+ * call-seq:
1588
+ * pread(maxlen, offset) -> string
1589
+ * pread(maxlen, offset, out_string) -> string
1590
+ *
1591
+ * See IO#pread.
1592
+ */
1593
+ static VALUE
1594
+ strio_pread(int argc, VALUE *argv, VALUE self)
1595
+ {
1596
+ VALUE rb_len, rb_offset, rb_buf;
1597
+ rb_scan_args(argc, argv, "21", &rb_len, &rb_offset, &rb_buf);
1598
+ long len = NUM2LONG(rb_len);
1599
+ long offset = NUM2LONG(rb_offset);
1600
+
1601
+ if (len < 0) {
1602
+ rb_raise(rb_eArgError, "negative string size (or size too big): %" PRIsVALUE, rb_len);
1603
+ }
1604
+
1605
+ if (offset < 0) {
1606
+ rb_syserr_fail_str(EINVAL, rb_sprintf("pread: Invalid offset argument: %" PRIsVALUE, rb_offset));
1607
+ }
1608
+
1609
+ struct StringIO *ptr = readable(self);
1610
+
1611
+ if (offset >= RSTRING_LEN(ptr->string)) {
1612
+ rb_eof_error();
1613
+ }
1614
+
1615
+ if (NIL_P(rb_buf)) {
1616
+ return strio_substr(ptr, offset, len, rb_ascii8bit_encoding());
1617
+ }
1618
+
1619
+ long rest = RSTRING_LEN(ptr->string) - offset;
1620
+ if (len > rest) len = rest;
1621
+ rb_str_resize(rb_buf, len);
1622
+ rb_enc_associate(rb_buf, rb_ascii8bit_encoding());
1623
+ MEMCPY(RSTRING_PTR(rb_buf), RSTRING_PTR(ptr->string) + offset, char, len);
1624
+ return rb_buf;
1625
+ }
1626
+
1627
+
1586
1628
  /*
1587
1629
  * call-seq:
1588
1630
  * strio.sysread(integer[, outbuf]) -> string
@@ -1843,6 +1885,7 @@ Init_stringio(void)
1843
1885
  rb_define_method(StringIO, "gets", strio_gets, -1);
1844
1886
  rb_define_method(StringIO, "readlines", strio_readlines, -1);
1845
1887
  rb_define_method(StringIO, "read", strio_read, -1);
1888
+ rb_define_method(StringIO, "pread", strio_pread, -1);
1846
1889
 
1847
1890
  rb_define_method(StringIO, "write", strio_write_m, -1);
1848
1891
  rb_define_method(StringIO, "putc", strio_putc, 1);
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stringio
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.7
4
+ version: 3.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nobu Nakada
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-06-02 00:00:00.000000000 Z
12
+ date: 2023-08-10 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Pseudo `IO` class from/to `String`.
15
15
  email:
@@ -43,7 +43,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
43
43
  - !ruby/object:Gem::Version
44
44
  version: '0'
45
45
  requirements: []
46
- rubygems_version: 3.5.0.dev
46
+ rubygems_version: 3.4.10
47
47
  signing_key:
48
48
  specification_version: 4
49
49
  summary: Pseudo IO on String