From 3b937bbdc4abc6ec1d3ec5d6b4e31714e0456e35 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 26 Apr 2011 15:54:14 +0000 Subject: * include/ruby/encoding.h (ECONV_NEWLINE_DECORATOR_MASK): add. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31354 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ include/ruby/encoding.h | 1 + transcode.c | 24 +++++++++++------------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index b417e8b76b..00707f673d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Wed Apr 27 00:54:12 2011 Nobuyoshi Nakada + + * include/ruby/encoding.h (ECONV_NEWLINE_DECORATOR_MASK): add. + Wed Apr 27 00:51:01 2011 Nobuyoshi Nakada * file.c (rb_file_truncate): fix function. diff --git a/include/ruby/encoding.h b/include/ruby/encoding.h index 80f310c6b2..5ccbbbdfd8 100644 --- a/include/ruby/encoding.h +++ b/include/ruby/encoding.h @@ -303,6 +303,7 @@ void rb_econv_binmode(rb_econv_t *ec); #define ECONV_UNDEF_HEX_CHARREF 0x00000030 #define ECONV_DECORATOR_MASK 0x0000ff00 +#define ECONV_NEWLINE_DECORATOR_MASK 0x00003f00 #define ECONV_UNIVERSAL_NEWLINE_DECORATOR 0x00000100 #define ECONV_CRLF_NEWLINE_DECORATOR 0x00001000 diff --git a/transcode.c b/transcode.c index 5106f012dd..9433e6a3df 100644 --- a/transcode.c +++ b/transcode.c @@ -1025,13 +1025,15 @@ decorator_names(int ecflags, const char **decorators_ret) { int num_decorators; - if ((ecflags & ECONV_CRLF_NEWLINE_DECORATOR) && - (ecflags & ECONV_CR_NEWLINE_DECORATOR)) - return -1; - - if ((ecflags & (ECONV_CRLF_NEWLINE_DECORATOR|ECONV_CR_NEWLINE_DECORATOR)) && - (ecflags & ECONV_UNIVERSAL_NEWLINE_DECORATOR)) + switch (ecflags & ECONV_NEWLINE_DECORATOR_MASK) { + case ECONV_UNIVERSAL_NEWLINE_DECORATOR: + case ECONV_CRLF_NEWLINE_DECORATOR: + case ECONV_CR_NEWLINE_DECORATOR: + case 0: + break; + default: return -1; + } if ((ecflags & ECONV_XML_TEXT_DECORATOR) && (ecflags & ECONV_XML_ATTR_CONTENT_DECORATOR)) @@ -1965,7 +1967,7 @@ rb_econv_binmode(rb_econv_t *ec) } } - ec->flags &= ~(ECONV_UNIVERSAL_NEWLINE_DECORATOR|ECONV_CRLF_NEWLINE_DECORATOR|ECONV_CR_NEWLINE_DECORATOR); + ec->flags &= ~ECONV_NEWLINE_DECORATOR_MASK; } @@ -1987,9 +1989,7 @@ econv_description(const char *sname, const char *dname, int ecflags, VALUE mesg) has_description = 1; } - if (ecflags & (ECONV_UNIVERSAL_NEWLINE_DECORATOR| - ECONV_CRLF_NEWLINE_DECORATOR| - ECONV_CR_NEWLINE_DECORATOR| + if (ecflags & (ECONV_NEWLINE_DECORATOR_MASK| ECONV_XML_TEXT_DECORATOR| ECONV_XML_ATTR_CONTENT_DECORATOR| ECONV_XML_ATTR_QUOTE_DECORATOR)) { @@ -2647,9 +2647,7 @@ str_transcode0(int argc, VALUE *argv, VALUE *self, int ecflags, VALUE ecopts) arg2 = argc<=1 ? Qnil : argv[1]; dencidx = str_transcode_enc_args(str, &arg1, &arg2, &sname, &senc, &dname, &denc); - if ((ecflags & (ECONV_UNIVERSAL_NEWLINE_DECORATOR| - ECONV_CRLF_NEWLINE_DECORATOR| - ECONV_CR_NEWLINE_DECORATOR| + if ((ecflags & (ECONV_NEWLINE_DECORATOR_MASK| ECONV_XML_TEXT_DECORATOR| ECONV_XML_ATTR_CONTENT_DECORATOR| ECONV_XML_ATTR_QUOTE_DECORATOR)) == 0) { -- cgit v1.2.3