diff options
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 10 |
1 files changed, 3 insertions, 7 deletions
@@ -4893,10 +4893,6 @@ io_encname_bom_p(const char *name, long len) { static const char bom_prefix[] = "bom|utf-"; enum {bom_prefix_len = (int)sizeof(bom_prefix) - 1}; - if (!len) { - const char *p = strchr(name, ':'); - len = p ? (long)(p - name) : (long)strlen(name); - } return len > bom_prefix_len && STRNCASECMP(name, bom_prefix, bom_prefix_len) == 0; } @@ -4935,7 +4931,9 @@ rb_io_modestr_fmode(const char *modestr) default: goto error; case ':': - p = m; + p = strchr(m, ':'); + if (io_encname_bom_p(m, p ? (long)(p - m) : (long)strlen(m))) + fmode |= FMODE_SETENC_BY_BOM; goto finished; } } @@ -4943,8 +4941,6 @@ rb_io_modestr_fmode(const char *modestr) finished: if ((fmode & FMODE_BINMODE) && (fmode & FMODE_TEXTMODE)) goto error; - if (p && io_encname_bom_p(p, 0)) - fmode |= FMODE_SETENC_BY_BOM; return fmode; } |