stringio 3.0.7 → 3.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/ext/stringio/stringio.c +94 -24
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c756222b86fbf0eb9e39360a3541b2877a85da13658be6119fa5582205a103e
|
4
|
+
data.tar.gz: 82da787881d2e0a49e134202f68ec0bba3e23976227bdfac04a58813dd20d7db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f49902b5785864fbd00c4e12b3f62b1ab0d4595943f256af7e7b4bf23647d4ef9e98d3637bd20eb89cd7030c1dcb8e1995d2b299904d4b33cb5b1d78326f5a18
|
7
|
+
data.tar.gz: '08a58465652dbdf23df245db28129c5d2416ae6fc91d00376894754a896b526736d964d466630e62427b4b56dc07e9ca9242e1f49b1648d2eb0e4f8df09a4b66'
|
data/README.md
CHANGED
@@ -34,7 +34,7 @@ Or install it yourself as:
|
|
34
34
|
|
35
35
|
Run `bundle install` to install dependencies and then `bundle exec rake test` to run the tests.
|
36
36
|
|
37
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
37
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, author a NEWS.md section, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
38
38
|
|
39
39
|
## Contributing
|
40
40
|
|
data/ext/stringio/stringio.c
CHANGED
@@ -12,7 +12,8 @@
|
|
12
12
|
|
13
13
|
**********************************************************************/
|
14
14
|
|
15
|
-
|
15
|
+
static const char *const
|
16
|
+
STRINGIO_VERSION = "3.0.9";
|
16
17
|
|
17
18
|
#include "ruby.h"
|
18
19
|
#include "ruby/io.h"
|
@@ -603,7 +604,7 @@ strio_to_read(VALUE self)
|
|
603
604
|
* eof? -> true or false
|
604
605
|
*
|
605
606
|
* Returns +true+ if positioned at end-of-stream, +false+ otherwise;
|
606
|
-
* see {Position}[rdoc-ref:
|
607
|
+
* see {Position}[rdoc-ref:IO@Position].
|
607
608
|
*
|
608
609
|
* Raises IOError if the stream is not opened for reading.
|
609
610
|
*/
|
@@ -1142,38 +1143,57 @@ struct getline_arg {
|
|
1142
1143
|
};
|
1143
1144
|
|
1144
1145
|
static struct getline_arg *
|
1145
|
-
prepare_getline_args(struct getline_arg *arg, int argc, VALUE *argv)
|
1146
|
+
prepare_getline_args(struct StringIO *ptr, struct getline_arg *arg, int argc, VALUE *argv)
|
1146
1147
|
{
|
1147
|
-
VALUE
|
1148
|
+
VALUE rs, lim, opts;
|
1148
1149
|
long limit = -1;
|
1149
1150
|
int respect_chomp;
|
1150
1151
|
|
1151
|
-
argc = rb_scan_args(argc, argv, "02:", &
|
1152
|
-
respect_chomp = argc == 0 || !NIL_P(
|
1152
|
+
argc = rb_scan_args(argc, argv, "02:", &rs, &lim, &opts);
|
1153
|
+
respect_chomp = argc == 0 || !NIL_P(rs);
|
1153
1154
|
switch (argc) {
|
1154
1155
|
case 0:
|
1155
|
-
|
1156
|
+
rs = rb_rs;
|
1156
1157
|
break;
|
1157
1158
|
|
1158
1159
|
case 1:
|
1159
|
-
|
1160
|
-
|
1160
|
+
if (!NIL_P(rs) && !RB_TYPE_P(rs, T_STRING)) {
|
1161
|
+
VALUE tmp = rb_check_string_type(rs);
|
1161
1162
|
if (NIL_P(tmp)) {
|
1162
|
-
|
1163
|
-
|
1163
|
+
limit = NUM2LONG(rs);
|
1164
|
+
rs = rb_rs;
|
1164
1165
|
}
|
1165
1166
|
else {
|
1166
|
-
|
1167
|
+
rs = tmp;
|
1167
1168
|
}
|
1168
1169
|
}
|
1169
1170
|
break;
|
1170
1171
|
|
1171
1172
|
case 2:
|
1172
|
-
|
1173
|
+
if (!NIL_P(rs)) StringValue(rs);
|
1173
1174
|
if (!NIL_P(lim)) limit = NUM2LONG(lim);
|
1174
1175
|
break;
|
1175
1176
|
}
|
1176
|
-
|
1177
|
+
if (!NIL_P(rs)) {
|
1178
|
+
rb_encoding *enc_rs, *enc_io;
|
1179
|
+
enc_rs = rb_enc_get(rs);
|
1180
|
+
enc_io = get_enc(ptr);
|
1181
|
+
if (enc_rs != enc_io &&
|
1182
|
+
(rb_enc_str_coderange(rs) != ENC_CODERANGE_7BIT ||
|
1183
|
+
(RSTRING_LEN(rs) > 0 && !rb_enc_asciicompat(enc_io)))) {
|
1184
|
+
if (rs == rb_rs) {
|
1185
|
+
rs = rb_enc_str_new(0, 0, enc_io);
|
1186
|
+
rb_str_buf_cat_ascii(rs, "\n");
|
1187
|
+
rs = rs;
|
1188
|
+
}
|
1189
|
+
else {
|
1190
|
+
rb_raise(rb_eArgError, "encoding mismatch: %s IO with %s RS",
|
1191
|
+
rb_enc_name(enc_io),
|
1192
|
+
rb_enc_name(enc_rs));
|
1193
|
+
}
|
1194
|
+
}
|
1195
|
+
}
|
1196
|
+
arg->rs = rs;
|
1177
1197
|
arg->limit = limit;
|
1178
1198
|
arg->chomp = 0;
|
1179
1199
|
if (!NIL_P(opts)) {
|
@@ -1301,15 +1321,15 @@ strio_getline(struct getline_arg *arg, struct StringIO *ptr)
|
|
1301
1321
|
static VALUE
|
1302
1322
|
strio_gets(int argc, VALUE *argv, VALUE self)
|
1303
1323
|
{
|
1324
|
+
struct StringIO *ptr = readable(self);
|
1304
1325
|
struct getline_arg arg;
|
1305
1326
|
VALUE str;
|
1306
1327
|
|
1307
|
-
if (prepare_getline_args(&arg, argc, argv)->limit == 0) {
|
1308
|
-
struct StringIO *ptr = readable(self);
|
1328
|
+
if (prepare_getline_args(ptr, &arg, argc, argv)->limit == 0) {
|
1309
1329
|
return rb_enc_str_new(0, 0, get_enc(ptr));
|
1310
1330
|
}
|
1311
1331
|
|
1312
|
-
str = strio_getline(&arg,
|
1332
|
+
str = strio_getline(&arg, ptr);
|
1313
1333
|
rb_lastline_set(str);
|
1314
1334
|
return str;
|
1315
1335
|
}
|
@@ -1346,16 +1366,16 @@ static VALUE
|
|
1346
1366
|
strio_each(int argc, VALUE *argv, VALUE self)
|
1347
1367
|
{
|
1348
1368
|
VALUE line;
|
1369
|
+
struct StringIO *ptr = readable(self);
|
1349
1370
|
struct getline_arg arg;
|
1350
1371
|
|
1351
|
-
StringIO(self);
|
1352
1372
|
RETURN_ENUMERATOR(self, argc, argv);
|
1353
1373
|
|
1354
|
-
if (prepare_getline_args(&arg, argc, argv)->limit == 0) {
|
1374
|
+
if (prepare_getline_args(ptr, &arg, argc, argv)->limit == 0) {
|
1355
1375
|
rb_raise(rb_eArgError, "invalid limit: 0 for each_line");
|
1356
1376
|
}
|
1357
1377
|
|
1358
|
-
while (!NIL_P(line = strio_getline(&arg,
|
1378
|
+
while (!NIL_P(line = strio_getline(&arg, ptr))) {
|
1359
1379
|
rb_yield(line);
|
1360
1380
|
}
|
1361
1381
|
return self;
|
@@ -1373,15 +1393,15 @@ static VALUE
|
|
1373
1393
|
strio_readlines(int argc, VALUE *argv, VALUE self)
|
1374
1394
|
{
|
1375
1395
|
VALUE ary, line;
|
1396
|
+
struct StringIO *ptr = readable(self);
|
1376
1397
|
struct getline_arg arg;
|
1377
1398
|
|
1378
|
-
|
1379
|
-
ary = rb_ary_new();
|
1380
|
-
if (prepare_getline_args(&arg, argc, argv)->limit == 0) {
|
1399
|
+
if (prepare_getline_args(ptr, &arg, argc, argv)->limit == 0) {
|
1381
1400
|
rb_raise(rb_eArgError, "invalid limit: 0 for readlines");
|
1382
1401
|
}
|
1383
1402
|
|
1384
|
-
|
1403
|
+
ary = rb_ary_new();
|
1404
|
+
while (!NIL_P(line = strio_getline(&arg, ptr))) {
|
1385
1405
|
rb_ary_push(ary, line);
|
1386
1406
|
}
|
1387
1407
|
return ary;
|
@@ -1583,6 +1603,55 @@ strio_read(int argc, VALUE *argv, VALUE self)
|
|
1583
1603
|
return str;
|
1584
1604
|
}
|
1585
1605
|
|
1606
|
+
/*
|
1607
|
+
* call-seq:
|
1608
|
+
* pread(maxlen, offset) -> string
|
1609
|
+
* pread(maxlen, offset, out_string) -> string
|
1610
|
+
*
|
1611
|
+
* See IO#pread.
|
1612
|
+
*/
|
1613
|
+
static VALUE
|
1614
|
+
strio_pread(int argc, VALUE *argv, VALUE self)
|
1615
|
+
{
|
1616
|
+
VALUE rb_len, rb_offset, rb_buf;
|
1617
|
+
rb_scan_args(argc, argv, "21", &rb_len, &rb_offset, &rb_buf);
|
1618
|
+
long len = NUM2LONG(rb_len);
|
1619
|
+
long offset = NUM2LONG(rb_offset);
|
1620
|
+
|
1621
|
+
if (len < 0) {
|
1622
|
+
rb_raise(rb_eArgError, "negative string size (or size too big): %" PRIsVALUE, rb_len);
|
1623
|
+
}
|
1624
|
+
|
1625
|
+
if (len == 0) {
|
1626
|
+
if (NIL_P(rb_buf)) {
|
1627
|
+
return rb_str_new("", 0);
|
1628
|
+
}
|
1629
|
+
return rb_buf;
|
1630
|
+
}
|
1631
|
+
|
1632
|
+
if (offset < 0) {
|
1633
|
+
rb_syserr_fail_str(EINVAL, rb_sprintf("pread: Invalid offset argument: %" PRIsVALUE, rb_offset));
|
1634
|
+
}
|
1635
|
+
|
1636
|
+
struct StringIO *ptr = readable(self);
|
1637
|
+
|
1638
|
+
if (offset >= RSTRING_LEN(ptr->string)) {
|
1639
|
+
rb_eof_error();
|
1640
|
+
}
|
1641
|
+
|
1642
|
+
if (NIL_P(rb_buf)) {
|
1643
|
+
return strio_substr(ptr, offset, len, rb_ascii8bit_encoding());
|
1644
|
+
}
|
1645
|
+
|
1646
|
+
long rest = RSTRING_LEN(ptr->string) - offset;
|
1647
|
+
if (len > rest) len = rest;
|
1648
|
+
rb_str_resize(rb_buf, len);
|
1649
|
+
rb_enc_associate(rb_buf, rb_ascii8bit_encoding());
|
1650
|
+
MEMCPY(RSTRING_PTR(rb_buf), RSTRING_PTR(ptr->string) + offset, char, len);
|
1651
|
+
return rb_buf;
|
1652
|
+
}
|
1653
|
+
|
1654
|
+
|
1586
1655
|
/*
|
1587
1656
|
* call-seq:
|
1588
1657
|
* strio.sysread(integer[, outbuf]) -> string
|
@@ -1843,6 +1912,7 @@ Init_stringio(void)
|
|
1843
1912
|
rb_define_method(StringIO, "gets", strio_gets, -1);
|
1844
1913
|
rb_define_method(StringIO, "readlines", strio_readlines, -1);
|
1845
1914
|
rb_define_method(StringIO, "read", strio_read, -1);
|
1915
|
+
rb_define_method(StringIO, "pread", strio_pread, -1);
|
1846
1916
|
|
1847
1917
|
rb_define_method(StringIO, "write", strio_write_m, -1);
|
1848
1918
|
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.
|
4
|
+
version: 3.0.9
|
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-
|
12
|
+
date: 2023-11-08 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.
|
46
|
+
rubygems_version: 3.4.10
|
47
47
|
signing_key:
|
48
48
|
specification_version: 4
|
49
49
|
summary: Pseudo IO on String
|