aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--transcode.c24
2 files changed, 18 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 30b70b1858..ec90c7c329 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Sep 5 18:10:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (rb_econv_binmode): newline decorators are
+ exclusive.
+
Mon Sep 5 15:03:37 2011 NARUSE, Yui <naruse@ruby-lang.org>
* test/rubygems/test_gem_security.rb
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;
}