diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-13 04:03:01 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-13 04:03:01 +0000 |
commit | 44d8ab72037030aaa1017fa503b4dc7ee3cb11df (patch) | |
tree | 4bde9c8947872f8cf841d223151b52147a70a1dd /io.c | |
parent | 6f3791f46551729339d1bec3743959d5618ef753 (diff) | |
download | ruby-44d8ab72037030aaa1017fa503b4dc7ee3cb11df.tar.gz |
* io.c (swallow): small optimize.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27770 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 8 |
1 files changed, 4 insertions, 4 deletions
@@ -2294,23 +2294,23 @@ static inline int swallow(rb_io_t *fptr, int term) { if (NEED_READCONV(fptr)) { + rb_encoding *enc = io_read_encoding(fptr); + int needconv = rb_enc_mbminlen(enc) != 1; VALUE v; make_readconv(fptr, 0); do { size_t cnt; while ((cnt = READ_CHAR_PENDING_COUNT(fptr)) > 0) { const char *p = READ_CHAR_PENDING_PTR(fptr); - rb_encoding *enc = io_read_encoding(fptr); int i; - if (rb_enc_mbminlen(enc) == 1) { + if (needconv) { if (*p != term) return TRUE; while (--i && *++p == term); } else { const char *e = p + cnt; if (rb_enc_ascget(p, e, &i, enc) != term) return TRUE; - while ((p += i) < e && rb_enc_ascget(p, e, &i, enc) == term) - ; + while ((p += i) < e && rb_enc_ascget(p, e, &i, enc) == term); i = (int)(e - p); } io_shift_cbuf(fptr, (int)cnt - i, NULL); |