From 1bc6f594d3de8dbfb5c165835eaec99bd49327c8 Mon Sep 17 00:00:00 2001 From: matz Date: Thu, 11 Jun 1998 10:03:21 +0000 Subject: 1.1b9_25 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1r@238 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/Setup | 2 +- ext/extmk.rb.in | 2 ++ ext/kconv/kconv.c | 38 ++++++++++++++++++++++++++++---------- 3 files changed, 31 insertions(+), 11 deletions(-) (limited to 'ext') diff --git a/ext/Setup b/ext/Setup index 9e3a2474c3..2eb11c7ade 100644 --- a/ext/Setup +++ b/ext/Setup @@ -9,5 +9,5 @@ #md5 #socket #tkutil -#tcltklib +tcltklib #gtk diff --git a/ext/extmk.rb.in b/ext/extmk.rb.in index 847e34f87e..e4823edb85 100644 --- a/ext/extmk.rb.in +++ b/ext/extmk.rb.in @@ -413,6 +413,7 @@ def extmake(target) end end if $static + $extlibs = "" unless $extlibs $extlibs += " " + $LDFLAGS if $LDFLAGS $extlibs += " " + $local_libs if $local_libs $extlibs += " " + $libs if $libs @@ -481,6 +482,7 @@ if $extlist.size > 0 \tInit_%s();\n\ \trb_provide(\"%s.o\");\n\ ", t, t) + $extobjs = "" unless $extobjs $extobjs += "ext/" $extobjs += f $extobjs += " " diff --git a/ext/kconv/kconv.c b/ext/kconv/kconv.c index 5762e3531f..fb229c6ef6 100644 --- a/ext/kconv/kconv.c +++ b/ext/kconv/kconv.c @@ -1893,8 +1893,22 @@ kconv_guess(obj, src) { unsigned char *p = RSTRING(src)->ptr; unsigned char *pend = p + RSTRING(src)->len; - -#define INCR {p++;if (p==pend) return INT2FIX(_UNKNOWN);} + int sequence_counter = 0; + +#define INCR do {\ + p++;\ + if (p==pend) return INT2FIX(_UNKNOWN);\ + sequence_counter++;\ + if (sequence_counter % 2 == 1 && *p != 0xa4)\ + sequence_counter = 0;\ + if (6 <= sequence_counter) {\ + sequence_counter = 0;\ + return INT2FIX(_EUC);\ + }\ +} while (0) + + if (*p == 0xa4) + sequence_counter = 1; while (p= 0x40) { + while (p < pend && *p >= 0x40) { if (*p >= 0x81) { - if (0x8d <= *p || (0x8f <= *p && *p <= 0x9f)) { + if (*p <= 0x8d || (0x8f <= *p && *p <= 0x9f)) { return INT2FIX(_SJIS); } else if (0xfd <= *p && *p <= 0xfe) { return INT2FIX(_EUC); } } + INCR; } } - if (*p <= 0x9f) { + else if (*p <= 0x9f) { return INT2FIX(_SJIS); } } - if (0xf0 <= *p && *p <= 0xfe) { + else if (0xf0 <= *p && *p <= 0xfe) { return INT2FIX(_EUC); } - if (0xe0 <= *p && *p <= 0xef) { + else if (0xe0 <= *p && *p <= 0xef) { INCR; if ((0x40 <= *p && *p <= 0x7e) || (0x80 <= *p && *p <= 0xa0)) { @@ -1948,7 +1966,7 @@ kconv_guess(obj, src) return INT2FIX(_EUC); } } - p++; + INCR; } return INT2FIX(_UNKNOWN); } -- cgit v1.2.3