diff options
Diffstat (limited to 'transcode.c')
-rw-r--r-- | transcode.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/transcode.c b/transcode.c index 5f7f856a33..2c188b67f7 100644 --- a/transcode.c +++ b/transcode.c @@ -1935,20 +1935,22 @@ rb_econv_binmode(rb_econv_t *ec) int n, i, j; transcoder_entry_t *entry; int num_trans; + const char *dname = 0; n = 0; - if (ec->flags & ECONV_UNIVERSAL_NEWLINE_DECORATOR) { - entry = get_transcoder_entry("", "universal_newline"); - if (entry->transcoder) - trs[n++] = entry->transcoder; - } - if (ec->flags & ECONV_CRLF_NEWLINE_DECORATOR) { - entry = get_transcoder_entry("", "crlf_newline"); - if (entry->transcoder) - trs[n++] = entry->transcoder; + switch (ec->flags & ECONV_NEWLINE_DECORATOR_MASK) { + case ECONV_UNIVERSAL_NEWLINE_DECORATOR: + dname = "universal_newline"; + break; + case ECONV_CRLF_NEWLINE_DECORATOR: + dname = "crlf_newline"; + break; + case ECONV_CR_NEWLINE_DECORATOR: + dname = "cr_newline"; + break; } - if (ec->flags & ECONV_CR_NEWLINE_DECORATOR) { - entry = get_transcoder_entry("", "cr_newline"); + if (dname) { + entry = get_transcoder_entry("", dname); if (entry->transcoder) trs[n++] = entry->transcoder; } |