From 2dadf555376fe52b8f0afe4de71a36eae201be9f Mon Sep 17 00:00:00 2001 From: aafemt Date: Tue, 18 Feb 2003 05:24:35 +0000 Subject: [PATCH] WCHAR --> UCS2_CHAR and some cleanup around it --- configure.in | 3 +- src/include/gen/autoconfig_msvc.h | 2 + src/intl/cs_jis.c | 2 +- src/intl/cs_unicode_fss.c | 2 +- src/intl/cs_unicode_ucs2.c | 2 +- src/intl/cv_big5.c | 33 ++++----- src/intl/cv_gb2312.c | 32 ++++----- src/intl/cv_jis.c | 94 +++++++++++--------------- src/intl/cv_ksc.c | 30 ++++----- src/intl/lc_big5.c | 12 ++-- src/intl/lc_dos.c | 2 +- src/intl/lc_jis.c | 12 ++-- src/intl/lc_unicode_ucs2.c | 8 +-- src/jrd/evl.cpp | 108 +++++++++++++++--------------- src/jrd/evl_like.cpp | 12 ++-- src/jrd/intl.cpp | 70 +++++++++---------- src/jrd/intl_builtin.cpp | 96 ++++++++++++++------------ src/jrd/intl_classes.h | 50 +++++++------- src/jrd/intlobj.h | 2 +- src/make.new/config/config.h.in | 4 +- 20 files changed, 280 insertions(+), 296 deletions(-) diff --git a/configure.in b/configure.in index 7f7a4c9c4b..48c9e6b7c0 100644 --- a/configure.in +++ b/configure.in @@ -1,4 +1,4 @@ -dnl $Id: configure.in,v 1.117 2003-02-13 22:49:17 bellardo Exp $ +dnl $Id: configure.in,v 1.118 2003-02-18 05:24:31 aafemt Exp $ dnl ############################# INITIALISATION ############################### @@ -345,6 +345,7 @@ AC_SEARCH_LIBS(dirname,gen) AC_CHECK_FUNCS(dirname) AC_CHECK_FUNCS(sigaction setitimer) AC_CHECK_FUNCS(snprintf) +AC_CHECK_FUNCS(swab _swab) AC_FUNC_MMAP AC_CHECK_FUNCS(atexit on_exit) AC_FUNC_FORK diff --git a/src/include/gen/autoconfig_msvc.h b/src/include/gen/autoconfig_msvc.h index 7cb106353c..062743120c 100644 --- a/src/include/gen/autoconfig_msvc.h +++ b/src/include/gen/autoconfig_msvc.h @@ -126,6 +126,8 @@ #undef HAVE_SIGACTION #undef HAVE_SETITIMER #define HAVE_SNPRINTF +#define HAVE_SWAB +#define HAVE__SWAB #undef HAVE_MMAP #undef HAVE_ATEXIT #undef HAVE_ON_EXIT diff --git a/src/intl/cs_jis.c b/src/intl/cs_jis.c index 9288db4efa..03ada3aa56 100644 --- a/src/intl/cs_jis.c +++ b/src/intl/cs_jis.c @@ -34,7 +34,7 @@ extern USHORT CVJIS_unicode_to_eucj(); CHARSET_ENTRY(CS_jis_0208_1990) { - static const WCHAR space = 0x0020; + static const UCS2_CHAR space = 0x0020; #include "../intl/charsets/cs_jis_0208_1990.h" diff --git a/src/intl/cs_unicode_fss.c b/src/intl/cs_unicode_fss.c index e5e25c0fb4..1d5ec25651 100644 --- a/src/intl/cs_unicode_fss.c +++ b/src/intl/cs_unicode_fss.c @@ -58,7 +58,7 @@ CHARSET_ENTRY(CS_unicode_fss) SSHORT CS_UTFFSS_fss_mbtowc(obj, wc, p, n) TEXTTYPE *obj; - WCHAR *wc; + UCS2_CHAR *wc; NCHAR *p; USHORT n; { diff --git a/src/intl/cs_unicode_ucs2.c b/src/intl/cs_unicode_ucs2.c index 7981686c7d..907f979869 100644 --- a/src/intl/cs_unicode_ucs2.c +++ b/src/intl/cs_unicode_ucs2.c @@ -31,7 +31,7 @@ extern USHORT CV_wc_copy(); CHARSET_ENTRY(CS_unicode_ucs2) { - static const WCHAR space = 0x0020; + static const UCS2_CHAR space = 0x0020; csptr->charset_version = 40; csptr->charset_id = CS_UNICODE_UCS2; diff --git a/src/intl/cv_big5.c b/src/intl/cv_big5.c index c59e1e6771..72383321f5 100644 --- a/src/intl/cv_big5.c +++ b/src/intl/cv_big5.c @@ -35,16 +35,16 @@ USHORT CVBIG5_big5_to_unicode(obj, dest_ptr, dest_len, src_ptr, src_len, err_code, err_position) CSCONVERT obj; - USHORT *dest_ptr; + UCS2_CHAR *dest_ptr; USHORT dest_len; UCHAR *src_ptr; USHORT src_len; SSHORT *err_code; USHORT *err_position; { - USHORT *start; - WCHAR ch; - WCHAR wide; + UCS2_CHAR *start; + UCS2_CHAR ch; + UCS2_CHAR wide; USHORT src_start = src_len; USHORT this_len; UCHAR c1, c2; @@ -61,10 +61,9 @@ USHORT CVBIG5_big5_to_unicode(obj, dest_ptr, dest_len, src_ptr, src_len, /* See if we're only after a length estimate */ if (dest_ptr == NULL) - return (src_len * 2); + return (src_len * sizeof(UCS2_CHAR)); start = dest_ptr; - src_start = src_len; while ((src_len) && (dest_len > 1)) { if (*src_ptr & 0x80) { c1 = *src_ptr++; @@ -104,7 +103,7 @@ USHORT CVBIG5_big5_to_unicode(obj, dest_ptr, dest_len, src_ptr, src_len, } *dest_ptr++ = ch; - dest_len -= 2; + dest_len -= sizeof(UCS2_CHAR); src_len -= this_len; }; if (src_len && !*err_code) { @@ -120,14 +119,14 @@ USHORT CVBIG5_unicode_to_big5(obj, big5_str, big5_len, unicode_str, CSCONVERT obj; UCHAR *big5_str; USHORT big5_len; - USHORT *unicode_str; + UCS2_CHAR *unicode_str; USHORT unicode_len; SSHORT *err_code; USHORT *err_position; { UCHAR *start; - WCHAR big5_ch; - WCHAR wide; + UCS2_CHAR big5_ch; + UCS2_CHAR wide; int tmp1, tmp2; USHORT src_start = unicode_len; @@ -150,14 +149,10 @@ USHORT CVBIG5_unicode_to_big5(obj, big5_str, big5_len, unicode_str, /* Convert from UNICODE to BIG5 code */ wide = *unicode_str++; - big5_ch = ((USHORT *) obj->csconvert_datatable)[ - ((USHORT *) obj-> - csconvert_misc)[ - (USHORT) - wide - / - 256] - + (wide % 256)]; + big5_ch = ((USHORT *) obj->csconvert_datatable) + [((USHORT *) obj->csconvert_misc) + [(USHORT)wide/256] + +(wide % 256)]; if ((big5_ch == CS_CANT_MAP) && !(wide == CS_CANT_MAP)) { *err_code = CS_CONVERT_ERROR; break; @@ -286,7 +281,7 @@ USHORT CVBIG5_big5_byte2short(obj, dst, dst_len, src, src_len, err_code, SSHORT CVBIG5_big5_mbtowc(obj, wc, src, src_len) CSCONVERT obj; - WCHAR *wc; + UCS2_CHAR *wc; UCHAR *src; USHORT src_len; { diff --git a/src/intl/cv_gb2312.c b/src/intl/cv_gb2312.c index 03a5b5876c..d9332a094d 100644 --- a/src/intl/cv_gb2312.c +++ b/src/intl/cv_gb2312.c @@ -35,16 +35,16 @@ USHORT CVGB_gb2312_to_unicode(obj, dest_ptr, dest_len, src_ptr, src_len, err_code, err_position) CSCONVERT obj; - USHORT *dest_ptr; + UCS2_CHAR *dest_ptr; USHORT dest_len; UCHAR *src_ptr; USHORT src_len; SSHORT *err_code; USHORT *err_position; { - USHORT *start; - WCHAR ch; - WCHAR wide; + UCS2_CHAR *start; + UCS2_CHAR ch; + UCS2_CHAR wide; USHORT src_start = src_len; USHORT this_len; UCHAR c1, c2; @@ -61,10 +61,9 @@ USHORT CVGB_gb2312_to_unicode(obj, dest_ptr, dest_len, src_ptr, src_len, /* See if we're only after a length estimate */ if (dest_ptr == NULL) - return (src_len * 2); + return (src_len * sizeof(UCS2_CHAR)); start = dest_ptr; - src_start = src_len; while ((src_len) && (dest_len > 1)) { if (*src_ptr & 0x80) { c1 = *src_ptr++; @@ -104,7 +103,7 @@ USHORT CVGB_gb2312_to_unicode(obj, dest_ptr, dest_len, src_ptr, src_len, } *dest_ptr++ = ch; - dest_len -= 2; + dest_len -= sizeof(*dest_ptr); src_len -= this_len; }; if (src_len && !*err_code) { @@ -120,14 +119,14 @@ USHORT CVGB_unicode_to_gb2312(obj, gb_str, gb_len, unicode_str, unicode_len, CSCONVERT obj; UCHAR *gb_str; USHORT gb_len; - USHORT *unicode_str; + UCS2_CHAR *unicode_str; USHORT unicode_len; SSHORT *err_code; USHORT *err_position; { UCHAR *start; - WCHAR gb_ch; - WCHAR wide; + UCS2_CHAR gb_ch; + UCS2_CHAR wide; int tmp1, tmp2; USHORT src_start = unicode_len; @@ -150,13 +149,10 @@ USHORT CVGB_unicode_to_gb2312(obj, gb_str, gb_len, unicode_str, unicode_len, /* Convert from UNICODE to GB2312 code */ wide = *unicode_str++; - gb_ch = ((USHORT *) obj->csconvert_datatable)[ - ((USHORT *) obj-> - csconvert_misc)[ - (USHORT) - wide / - 256] + - (wide % 256)]; + gb_ch = ((USHORT *) obj->csconvert_datatable) + [((USHORT *) obj->csconvert_misc) + [(USHORT)wide / 256] + + (wide % 256)]; if ((gb_ch == CS_CANT_MAP) && !(wide == CS_CANT_MAP)) { *err_code = CS_CONVERT_ERROR; break; @@ -285,7 +281,7 @@ USHORT CVGB_gb2312_byte2short(obj, dst, dst_len, src, src_len, err_code, SSHORT CVGB_gb2312_mbtowc(obj, wc, src, src_len) CSCONVERT obj; - WCHAR *wc; + UCS2_CHAR *wc; UCHAR *src; USHORT src_len; { diff --git a/src/intl/cv_jis.c b/src/intl/cv_jis.c index a4204a8c77..a3a97fbc7b 100644 --- a/src/intl/cv_jis.c +++ b/src/intl/cv_jis.c @@ -30,16 +30,16 @@ USHORT CVJIS_eucj_to_unicode(obj, dest_ptr, dest_len, src_ptr, src_len, err_code, err_position) CSCONVERT obj; - USHORT *dest_ptr; + UCS2_CHAR *dest_ptr; USHORT dest_len; UCHAR *src_ptr; USHORT src_len; SSHORT *err_code; USHORT *err_position; { - USHORT *start; - WCHAR ch; - WCHAR wide; + UCS2_CHAR *start; + UCS2_CHAR ch; + UCS2_CHAR wide; UCHAR ch1; USHORT src_start = src_len; USHORT this_len; @@ -59,7 +59,6 @@ USHORT CVJIS_eucj_to_unicode(obj, dest_ptr, dest_len, src_ptr, src_len, return (src_len); start = dest_ptr; - src_start = src_len; while ((src_len) && (dest_len > 1)) { ch1 = *src_ptr++; @@ -83,13 +82,10 @@ USHORT CVJIS_eucj_to_unicode(obj, dest_ptr, dest_len, src_ptr, src_len, this_len = 2; /* Step 2: Convert from JIS to UNICODE */ - ch = ((USHORT *) obj->csconvert_datatable)[ - ((USHORT *) obj-> - csconvert_misc)[ - (USHORT) - wide / - 256] + - (wide % 256)]; + ch = ((USHORT *) obj->csconvert_datatable) + [((USHORT *) obj->csconvert_misc) + [(USHORT)wide / 256] + + (wide % 256)]; }; @@ -98,7 +94,7 @@ USHORT CVJIS_eucj_to_unicode(obj, dest_ptr, dest_len, src_ptr, src_len, */ *dest_ptr++ = ch; - dest_len -= 2; + dest_len -= sizeof(*dest_ptr); src_len -= this_len; }; if (src_len && !*err_code) { @@ -127,16 +123,16 @@ USHORT CVJIS_eucj_to_unicode(obj, dest_ptr, dest_len, src_ptr, src_len, USHORT CVJIS_sjis_to_unicode(obj, dest_ptr, dest_len, sjis_str, sjis_len, err_code, err_position) CSCONVERT obj; - USHORT *dest_ptr; + UCS2_CHAR *dest_ptr; USHORT dest_len; UCHAR *sjis_str; USHORT sjis_len; SSHORT *err_code; USHORT *err_position; { - USHORT *start; - WCHAR ch; - WCHAR wide; + UCS2_CHAR *start; + UCS2_CHAR ch; + UCS2_CHAR wide; UCHAR c1, c2; UCHAR tmp1, tmp2; USHORT src_start = sjis_len; @@ -201,20 +197,15 @@ USHORT CVJIS_sjis_to_unicode(obj, dest_ptr, dest_len, sjis_str, sjis_len, /* Step 2: Convert from JIS code (in wide) to UNICODE */ if (table == 1) - ch = ((USHORT *) obj->csconvert_datatable)[ - ((USHORT *) obj-> - csconvert_misc)[ - (USHORT) - wide / - 256] + - (wide % 256)]; + ch = ((USHORT *) obj->csconvert_datatable) + [((USHORT *) obj->csconvert_misc) + [(USHORT)wide / 256] + + (wide % 256)]; else { assert(table == 2); assert(wide <= 255); - ch = - sjis_to_unicode_mapping_array[sjis_to_unicode_map - [(USHORT) wide / 256] - + (wide % 256)]; + ch = sjis_to_unicode_mapping_array + [sjis_to_unicode_map[(USHORT) wide / 256] + (wide % 256)]; }; /* This is only important for bad-SJIS in input stream */ @@ -223,7 +214,7 @@ USHORT CVJIS_sjis_to_unicode(obj, dest_ptr, dest_len, sjis_str, sjis_len, break; }; *dest_ptr++ = ch; - dest_len -= 2; + dest_len -= sizeof(*dest_ptr); sjis_len -= this_len; } if (sjis_len && !*err_code) { @@ -396,14 +387,14 @@ USHORT CVJIS_unicode_to_sjis(obj, sjis_str, sjis_len, unicode_str, CSCONVERT obj; UCHAR *sjis_str; USHORT sjis_len; - USHORT *unicode_str; + UCS2_CHAR *unicode_str; USHORT unicode_len; SSHORT *err_code; USHORT *err_position; { UCHAR *start; - WCHAR jis_ch; - WCHAR wide; + UCS2_CHAR jis_ch; + UCS2_CHAR wide; USHORT tmp1, tmp2; USHORT src_start = unicode_len; @@ -426,21 +417,16 @@ USHORT CVJIS_unicode_to_sjis(obj, sjis_str, sjis_len, unicode_str, /* Step 1: Convert from UNICODE to JIS code */ wide = *unicode_str++; - jis_ch = ((USHORT *) obj->csconvert_datatable)[ - ((USHORT *) obj-> - csconvert_misc)[ - (USHORT) - wide / - 256] + - (wide % 256)]; + jis_ch = ((USHORT *) obj->csconvert_datatable) + [((USHORT *) obj->csconvert_misc) + [(USHORT)wide / 256] + + (wide % 256)]; if ((jis_ch == CS_CANT_MAP) && !(wide == CS_CANT_MAP)) { /* Handle the non-JIS codes in SJIS (ASCII & half-width Kana) */ - jis_ch = - sjis_from_unicode_mapping_array[sjis_from_unicode_map - [(USHORT) wide / 256] - + (wide % 256)]; + jis_ch = sjis_from_unicode_mapping_array + [sjis_from_unicode_map[(USHORT) wide / 256] + (wide % 256)]; if ((jis_ch == CS_CANT_MAP) && !(wide == CS_CANT_MAP)) { *err_code = CS_CONVERT_ERROR; break; @@ -489,14 +475,14 @@ USHORT CVJIS_unicode_to_eucj(obj, eucj_str, eucj_len, unicode_str, CSCONVERT obj; UCHAR *eucj_str; USHORT eucj_len; - USHORT *unicode_str; + UCS2_CHAR *unicode_str; USHORT unicode_len; SSHORT *err_code; USHORT *err_position; { UCHAR *start; - WCHAR jis_ch; - WCHAR wide; + UCS2_CHAR jis_ch; + UCS2_CHAR wide; USHORT tmp1, tmp2; USHORT src_start = unicode_len; @@ -523,14 +509,10 @@ USHORT CVJIS_unicode_to_eucj(obj, eucj_str, eucj_len, unicode_str, if (wide <= 0x007F) jis_ch = wide; else - jis_ch = ((USHORT *) obj->csconvert_datatable)[ - ((USHORT *) obj-> - csconvert_misc)[ - (USHORT) - wide - / - 256] - + (wide % 256)]; + jis_ch = ((USHORT *) obj->csconvert_datatable) + [((USHORT *) obj->csconvert_misc) + [(USHORT)wide / 256] + + (wide % 256)]; if ((jis_ch == CS_CANT_MAP) && !(wide == CS_CANT_MAP)) { *err_code = CS_CONVERT_ERROR; break; @@ -812,7 +794,7 @@ USHORT CVJIS_euc_byte2short(obj, dst, dst_len, src, src_len, err_code, SSHORT CVJIS_euc_mbtowc(obj, wc, src, src_len) CSCONVERT obj; - WCHAR *wc; + UCS2_CHAR *wc; UCHAR *src; USHORT src_len; { @@ -1002,7 +984,7 @@ USHORT CVJIS_sjis_byte2short(obj, dst, dst_len, src, src_len, err_code, SSHORT CVJIS_sjis_mbtowc(obj, wc, src, src_len) CSCONVERT obj; - WCHAR *wc; + UCS2_CHAR *wc; UCHAR *src; USHORT src_len; { diff --git a/src/intl/cv_ksc.c b/src/intl/cv_ksc.c index 28975bc70e..aaf8d7197e 100644 --- a/src/intl/cv_ksc.c +++ b/src/intl/cv_ksc.c @@ -41,16 +41,16 @@ USHORT CVKSC_ksc_to_unicode(obj, dest_ptr, dest_len, ksc_str, ksc_len, err_code, err_position) CSCONVERT obj; - USHORT *dest_ptr; + UCS2_CHAR *dest_ptr; USHORT dest_len; UCHAR *ksc_str; USHORT ksc_len; short *err_code; USHORT *err_position; { - USHORT *start; - WCHAR ch; - WCHAR wide; + UCS2_CHAR *start; + UCS2_CHAR ch; + UCS2_CHAR wide; UCHAR c1, c2; USHORT src_start = ksc_len; USHORT this_len; @@ -66,7 +66,7 @@ USHORT CVKSC_ksc_to_unicode(obj, dest_ptr, dest_len, ksc_str, ksc_len, *err_code = 0; if (dest_ptr == NULL) - return (ksc_len * 2); + return (ksc_len * sizeof(UCS2_CHAR)); start = dest_ptr; while (ksc_len && dest_len > 1) { @@ -106,7 +106,7 @@ USHORT CVKSC_ksc_to_unicode(obj, dest_ptr, dest_len, ksc_str, ksc_len, break; } *dest_ptr++ = ch; - dest_len -= 2; + dest_len -= sizeof(*dest_ptr); ksc_len -= this_len; } @@ -122,14 +122,14 @@ USHORT CVKSC_unicode_to_ksc(obj, ksc_str, ksc_len, unicode_str, unicode_len, CSCONVERT obj; UCHAR *ksc_str; USHORT ksc_len; - USHORT *unicode_str; + UCS2_CHAR *unicode_str; USHORT unicode_len; short *err_code; USHORT *err_position; { UCHAR *start; - WCHAR ksc_ch; - WCHAR wide; + UCS2_CHAR ksc_ch; + UCS2_CHAR wide; int tmp1, tmp2; USHORT src_start = unicode_len; @@ -150,13 +150,9 @@ USHORT CVKSC_unicode_to_ksc(obj, ksc_str, ksc_len, unicode_str, unicode_len, while (ksc_len && unicode_len > 1) { wide = *unicode_str++; - ksc_ch = ((USHORT *) obj->csconvert_datatable)[ - ((USHORT *) obj-> - csconvert_misc)[ - (USHORT) - wide / - 256] + - (wide % 256)]; + ksc_ch = ((USHORT *) obj->csconvert_datatable) + [((USHORT *) obj->csconvert_misc) + [wide / 256] + (wide % 256)]; if ((ksc_ch == CS_CANT_MAP) && !(wide == CS_CANT_MAP)) { *err_code = CS_CONVERT_ERROR; break; @@ -283,7 +279,7 @@ USHORT CVKSC_ksc_byte2short(obj, dst, dst_len, src, src_len, err_code, short CVKSC_ksc_mbtowc(obj, wc, src, src_len) CSCONVERT obj; - WCHAR *wc; + UCS2_CHAR *wc; UCHAR *src; USHORT src_len; { diff --git a/src/intl/lc_big5.c b/src/intl/lc_big5.c index 7256a6b27b..5546a1cbe7 100644 --- a/src/intl/lc_big5.c +++ b/src/intl/lc_big5.c @@ -93,10 +93,10 @@ TEXTTYPE_ENTRY(BIG5_init) */ STATIC USHORT big5_to_upper(obj, ch) TEXTTYPE obj; - WCHAR ch; + UCS2_CHAR ch; { - if (ch >= (WCHAR) ASCII_LOWER_A && ch <= (WCHAR) ASCII_LOWER_Z) - return (ch - (WCHAR) ASCII_LOWER_A + (WCHAR) ASCII_UPPER_A); + if (ch >= (UCS2_CHAR) ASCII_LOWER_A && ch <= (UCS2_CHAR) ASCII_LOWER_Z) + return (ch - (UCS2_CHAR) ASCII_LOWER_A + (UCS2_CHAR) ASCII_UPPER_A); return ch; } @@ -151,9 +151,9 @@ STATIC SSHORT big5_str_to_upper(obj, iLen, pStr, iOutLen, pOutStr) */ STATIC USHORT big5_to_lower(obj, ch) TEXTTYPE obj; - WCHAR ch; + UCS2_CHAR ch; { - if (ch >= (WCHAR) ASCII_UPPER_A && ch <= (WCHAR) ASCII_UPPER_Z) - return (ch - (WCHAR) ASCII_UPPER_A + (WCHAR) ASCII_LOWER_A); + if (ch >= (UCS2_CHAR) ASCII_UPPER_A && ch <= (UCS2_CHAR) ASCII_UPPER_Z) + return (ch - (UCS2_CHAR) ASCII_UPPER_A + (UCS2_CHAR) ASCII_LOWER_A); return ch; } diff --git a/src/intl/lc_dos.c b/src/intl/lc_dos.c index 795fcd6c13..798f101f0f 100644 --- a/src/intl/lc_dos.c +++ b/src/intl/lc_dos.c @@ -657,7 +657,7 @@ STATIC USHORT fam1_to_lower(obj, ch) SSHORT LC_DOS_nc_mbtowc(obj, wc, ptr, count) TEXTTYPE obj; - WCHAR *wc; + UCS2_CHAR *wc; UCHAR *ptr; USHORT count; { diff --git a/src/intl/lc_jis.c b/src/intl/lc_jis.c index bc5bc3b661..288625c844 100644 --- a/src/intl/lc_jis.c +++ b/src/intl/lc_jis.c @@ -112,10 +112,10 @@ TEXTTYPE_ENTRY(JIS230_init) */ STATIC USHORT sjis_to_upper(obj, ch) TEXTTYPE obj; - WCHAR ch; + UCS2_CHAR ch; { - if (ch >= (WCHAR) ASCII_LOWER_A && ch <= (WCHAR) ASCII_LOWER_Z) - return (ch - (WCHAR) ASCII_LOWER_A + (WCHAR) ASCII_UPPER_A); + if (ch >= (UCS2_CHAR) ASCII_LOWER_A && ch <= (UCS2_CHAR) ASCII_LOWER_Z) + return (ch - (UCS2_CHAR) ASCII_LOWER_A + (UCS2_CHAR) ASCII_UPPER_A); return ch; } @@ -170,9 +170,9 @@ STATIC SSHORT sjis_str_to_upper(obj, iLen, pStr, iOutLen, pOutStr) */ STATIC USHORT sjis_to_lower(obj, ch) TEXTTYPE obj; - WCHAR ch; + UCS2_CHAR ch; { - if (ch >= (WCHAR) ASCII_UPPER_A && ch <= (WCHAR) ASCII_UPPER_Z) - return (ch - (WCHAR) ASCII_UPPER_A + (WCHAR) ASCII_LOWER_A); + if (ch >= (UCS2_CHAR) ASCII_UPPER_A && ch <= (UCS2_CHAR) ASCII_UPPER_Z) + return (ch - (UCS2_CHAR) ASCII_UPPER_A + (UCS2_CHAR) ASCII_LOWER_A); return ch; } diff --git a/src/intl/lc_unicode_ucs2.c b/src/intl/lc_unicode_ucs2.c index 888b2f2fb5..bdd4820944 100644 --- a/src/intl/lc_unicode_ucs2.c +++ b/src/intl/lc_unicode_ucs2.c @@ -105,7 +105,7 @@ TEXTTYPE_ENTRY(UNI201_init) static SSHORT wc_mbtowc(obj, wc, p, n) TEXTTYPE *obj; - WCHAR *wc; + UCS2_CHAR *wc; NCHAR *p; USHORT n; { @@ -113,10 +113,10 @@ static SSHORT wc_mbtowc(obj, wc, p, n) assert(wc); assert(p); - if (n < sizeof(WCHAR)) + if (n < sizeof(UCS2_CHAR)) return -1; - *wc = *(WCHAR *) p; - return sizeof(WCHAR); + *wc = *(UCS2_CHAR *) p; + return sizeof(UCS2_CHAR); } diff --git a/src/jrd/evl.cpp b/src/jrd/evl.cpp index 2059e8b1aa..42309295fe 100644 --- a/src/jrd/evl.cpp +++ b/src/jrd/evl.cpp @@ -19,7 +19,7 @@ * * All Rights Reserved. * Contributor(s): ______________________________________. - * $Id: evl.cpp,v 1.31 2003-02-16 16:55:57 alexpeshkoff Exp $ + * $Id: evl.cpp,v 1.32 2003-02-18 05:24:34 aafemt Exp $ */ /* @@ -160,12 +160,12 @@ static SSHORT sleuth(TDBB, JRD_NOD, DSC *, DSC *); static BOOLEAN nc_sleuth_check(class TextType*, USHORT, UCHAR *, UCHAR *, UCHAR *, UCHAR *); static BOOLEAN nc_sleuth_class(class TextType*, USHORT, UCHAR *, UCHAR *, UCHAR); -static BOOLEAN wc_sleuth_check(class TextType*, USHORT, WCHAR *, WCHAR *, WCHAR *, - WCHAR *); -static BOOLEAN wc_sleuth_class(class TextType*, USHORT, WCHAR *, WCHAR *, WCHAR); +static BOOLEAN wc_sleuth_check(class TextType*, USHORT, UCS2_CHAR *, UCS2_CHAR *, + UCS2_CHAR *, UCS2_CHAR *); +static BOOLEAN wc_sleuth_class(class TextType*, USHORT, UCS2_CHAR *, UCS2_CHAR *, + UCS2_CHAR); static SSHORT string_boolean(TDBB, JRD_NOD, DSC *, DSC *); -static SSHORT string_function(TDBB, JRD_NOD, SSHORT, UCHAR *, - SSHORT, UCHAR *, USHORT); +static SSHORT string_function(TDBB, JRD_NOD, SSHORT, UCHAR *, SSHORT, UCHAR *, USHORT); static DSC *substring(TDBB, VLU, DSC *, USHORT, USHORT); static DSC *upcase(TDBB, DSC *, VLU); static DSC *internal_info(TDBB, DSC *, VLU); @@ -1869,9 +1869,9 @@ USHORT DLL_EXPORT EVL_mb_contains(TDBB tdbb, * Functional description * **************************************/ - USHORT buffer1[100], buffer2[100]; /* arbitrary size for optimization */ - USHORT *pp1 = buffer1; - USHORT *pp2 = buffer2; + UCS2_CHAR buffer1[100], buffer2[100]; /* arbitrary size for optimization */ + UCS2_CHAR *pp1 = buffer1; + UCS2_CHAR *pp2 = buffer2; USHORT len1, len2; /* byte counts */ STR buf1, buf2; USHORT ret_val; @@ -1885,15 +1885,15 @@ USHORT DLL_EXPORT EVL_mb_contains(TDBB tdbb, if (len1 > sizeof(buffer1)) { buf1 = FB_NEW_RPT(*tdbb->tdbb_default, len1) str(); - pp1 = (USHORT *) buf1->str_data; + pp1 = (UCS2_CHAR *) buf1->str_data; } if (len2 > sizeof(buffer2)) { buf2 = FB_NEW_RPT(*tdbb->tdbb_default, len2) str(); - pp2 = (USHORT *) buf2->str_data; + pp2 = (UCS2_CHAR *) buf2->str_data; } - len1 = obj->to_wc((unsigned char*)pp1, len1, p1, l1, &err_code, &err_pos); - len2 = obj->to_wc((unsigned char*)pp2, len2, p2, l2, &err_code, &err_pos); + len1 = obj->to_wc(pp1, len1, p1, l1, &err_code, &err_pos); + len2 = obj->to_wc(pp2, len2, p2, l2, &err_code, &err_pos); ret_val = EVL_wc_contains(tdbb, obj, pp1, len1, pp2, len2); @@ -1910,7 +1910,7 @@ USHORT DLL_EXPORT EVL_mb_like(TDBB tdbb, class TextType* obj, UCHAR * p1, SSHORT l1, - UCHAR * p2, SSHORT l2, WCHAR escape_char) + UCHAR * p2, SSHORT l2, UCS2_CHAR escape_char) { /************************************** * @@ -1923,13 +1923,13 @@ USHORT DLL_EXPORT EVL_mb_like(TDBB tdbb, * Front-end of like() in Japanese version. * * Prepare buffer of short, then "copy" char-based data - * into the new short-based buffer. Use the new buffer for + * into the new ucs2-based buffer. Use the new buffer for * later processing with wc_like(). * **************************************/ - USHORT buffer1[100], buffer2[100]; /* arbitrary size for optimization */ - USHORT *pp1 = buffer1; - USHORT *pp2 = buffer2; + UCS2_CHAR buffer1[100], buffer2[100]; /* arbitrary size for optimization */ + UCS2_CHAR *pp1 = buffer1; + UCS2_CHAR *pp2 = buffer2; USHORT len1, len2; STR buf1, buf2; USHORT ret_val; @@ -1942,15 +1942,16 @@ USHORT DLL_EXPORT EVL_mb_like(TDBB tdbb, len2 = obj->to_wc(NULL, 0, p2, l2, &err_code, &err_pos); if (len1 > sizeof(buffer1)) { buf1 = FB_NEW_RPT(*tdbb->tdbb_default, len1) str(); - pp1 = (USHORT *) buf1->str_data; + pp1 = (UCS2_CHAR *) buf1->str_data; } if (len2 > sizeof(buffer2)) { buf2 = FB_NEW_RPT(*tdbb->tdbb_default, len2) str(); - pp2 = (USHORT *) buf2->str_data; + pp2 = (UCS2_CHAR *) buf2->str_data; } - len1 = obj->to_wc((unsigned char*)pp1, len1, p1, l1, &err_code, &err_pos); - len2 = obj->to_wc((unsigned char*)pp2, len2, p2, l2, &err_code, &err_pos); + len1 = obj->to_wc(pp1, len1, p1, l1, &err_code, &err_pos); + len2 = obj->to_wc(pp2, len2, p2, l2, &err_code, &err_pos); +// CHECK ME: Shouldn't errors to be handled? ret_val = EVL_wc_like(tdbb, obj, pp1, len1, pp2, len2, escape_char); @@ -1980,9 +1981,9 @@ USHORT DLL_EXPORT EVL_mb_matches(TDBB tdbb, * later processing with EVL_wc_matches(). * **************************************/ - USHORT buffer1[100], buffer2[100]; /* arbitrary size for optimization */ - USHORT *pp1 = buffer1; - USHORT *pp2 = buffer2; + UCS2_CHAR buffer1[100], buffer2[100]; /* arbitrary size for optimization */ + UCS2_CHAR *pp1 = buffer1; + UCS2_CHAR *pp2 = buffer2; USHORT len1, len2; STR buf1, buf2; USHORT ret_val; @@ -1995,15 +1996,15 @@ USHORT DLL_EXPORT EVL_mb_matches(TDBB tdbb, len2 = obj->to_wc(NULL, 0, p2, l2, &err_code, &err_pos); if (len1 > sizeof(buffer1)) { buf1 = FB_NEW_RPT(*tdbb->tdbb_default, len1) str(); - pp1 = (USHORT *) buf1->str_data; + pp1 = (UCS2_CHAR *) buf1->str_data; } if (len2 > sizeof(buffer2)) { buf2 = FB_NEW_RPT(*tdbb->tdbb_default, len2) str(); - pp2 = (USHORT *) buf2->str_data; + pp2 = (UCS2_CHAR *) buf2->str_data; } - len1 = obj->to_wc((unsigned char*)pp1, len1, p1, l1, &err_code, &err_pos); - len2 = obj->to_wc((unsigned char*)pp2, len2, p2, l2, &err_code, &err_pos); + len1 = obj->to_wc(pp1, len1, p1, l1, &err_code, &err_pos); + len2 = obj->to_wc(pp2, len2, p2, l2, &err_code, &err_pos); ret_val = EVL_wc_matches(tdbb, obj, pp1, len1, pp2, len2); @@ -2036,8 +2037,8 @@ USHORT DLL_EXPORT EVL_mb_sleuth_check(TDBB tdbb, * later processing with sleuth_check(). * **************************************/ - USHORT buffer1[100]; /* arbitrary size for optimization */ - USHORT *pp1 = buffer1; + UCS2_CHAR buffer1[100]; /* arbitrary size for optimization */ + UCS2_CHAR *pp1 = buffer1; USHORT len1; STR buf1; USHORT ret_val; @@ -2055,14 +2056,14 @@ USHORT DLL_EXPORT EVL_mb_sleuth_check(TDBB tdbb, len1 = obj->to_wc(NULL, 0, search, search_bytes, &err_code, &err_pos); if (len1 > sizeof(buffer1)) { buf1 = FB_NEW_RPT(*tdbb->tdbb_default, len1) str(); - pp1 = (USHORT *) buf1->str_data; + pp1 = (UCS2_CHAR *) buf1->str_data; } - len1 = obj->to_wc((unsigned char*)pp1, len1, search, search_bytes, &err_code, &err_pos); + len1 = obj->to_wc(pp1, len1, search, search_bytes, &err_code, &err_pos); ret_val = EVL_wc_sleuth_check(tdbb, obj, 0, pp1, len1, - reinterpret_cast < USHORT * >(match), + reinterpret_cast < UCS2_CHAR * >(match), match_bytes); if (pp1 != buffer1) @@ -2090,9 +2091,9 @@ USHORT DLL_EXPORT EVL_mb_sleuth_merge(TDBB tdbb, * Front-end of sleuth_merge() in Japanese version. * **************************************/ - USHORT buffer1[100], buffer2[100]; /* arbitrary size for optimization */ - USHORT *pp1 = buffer1; - USHORT *pp2 = buffer2; + UCS2_CHAR buffer1[100], buffer2[100]; /* arbitrary size for optimization */ + UCS2_CHAR *pp1 = buffer1; + UCS2_CHAR *pp2 = buffer2; USHORT len1, len2; STR buf1, buf2; USHORT ret_val; @@ -2109,22 +2110,19 @@ USHORT DLL_EXPORT EVL_mb_sleuth_merge(TDBB tdbb, len2 = obj->to_wc(NULL, 0, control, control_bytes, &err_code, &err_pos); if (len1 > sizeof(buffer1)) { buf1 = FB_NEW_RPT(*tdbb->tdbb_default, len1) str(); - pp1 = (USHORT *) buf1->str_data; + pp1 = (UCS2_CHAR *) buf1->str_data; } if (len2 > sizeof(buffer2)) { buf2 = FB_NEW_RPT(*tdbb->tdbb_default, len2) str(); - pp2 = (USHORT *) buf2->str_data; + pp2 = (UCS2_CHAR *) buf2->str_data; } - len1 = obj->to_wc((unsigned char*)pp1, len1, match, match_bytes, - &err_code, &err_pos); - len2 = obj->to_wc((unsigned char*)pp2, len2, control, control_bytes, - &err_code, &err_pos); + len1 = obj->to_wc(pp1, len1, match, match_bytes, &err_code, &err_pos); + len2 = obj->to_wc(pp2, len2, control, control_bytes, &err_code, &err_pos); - ret_val = EVL_wc_sleuth_merge(tdbb, obj, pp1, len1, pp2, - len2, - reinterpret_cast < USHORT * >(combined), - combined_bytes); + ret_val = EVL_wc_sleuth_merge(tdbb, obj, pp1, len1, pp2, len2, + reinterpret_cast < UCS2_CHAR * >(combined), + combined_bytes); if (pp1 != buffer1) delete buf1; @@ -2214,8 +2212,8 @@ USHORT DLL_EXPORT EVL_nc_contains(TDBB tdbb_dummy, USHORT DLL_EXPORT EVL_wc_contains(TDBB tdbb_dumm, - class TextType* obj, WCHAR * p1, USHORT l1, /* byte count */ - WCHAR * p2, USHORT l2) + class TextType* obj, UCS2_CHAR * p1, USHORT l1, /* byte count */ + UCS2_CHAR * p2, USHORT l2) { /************************************** * @@ -2226,7 +2224,7 @@ USHORT DLL_EXPORT EVL_wc_contains(TDBB tdbb_dumm, * Functional description * **************************************/ - WCHAR *q1, *q2, c1, c2; + UCS2_CHAR *q1, *q2, c1, c2; SSHORT l; while (l1 >= l2) { @@ -2265,14 +2263,14 @@ USHORT DLL_EXPORT EVL_wc_contains(TDBB tdbb_dumm, ************************************** */ #define LIKENAME EVL_wc_like -#define LIKETYPE WCHAR +#define LIKETYPE UCS2_CHAR #define MATCHESNAME EVL_wc_matches -#define MATCHESTYPE WCHAR +#define MATCHESTYPE UCS2_CHAR #define SLEUTHNAME EVL_wc_sleuth_check #define SLEUTH_MERGE_NAME EVL_wc_sleuth_merge #define SLEUTH_AUX wc_sleuth_check #define SLEUTH_CLASS_NAME wc_sleuth_class -#define SLEUTHTYPE WCHAR +#define SLEUTHTYPE UCS2_CHAR #define EVL_LIKE_INCLUDED_BY_EVL_CPP #include "../jrd/evl_like.cpp" @@ -4557,7 +4555,7 @@ static SSHORT sleuth(TDBB tdbb, JRD_NOD node, DSC * desc1, DSC * desc2) /* l2 is result's byte-count */ -/* Note: resulting string from sleuth_merge is either WCHAR or NCHAR +/* Note: resulting string from sleuth_merge is either UCS2_CHAR or NCHAR and never Multibyte (see note in EVL_mb_sleuth_check) */ if (desc1->dsc_dtype != dtype_blob) { @@ -4741,7 +4739,7 @@ static SSHORT string_function( /* Handle LIKE and MATCHES*/ if (node->nod_type == nod_like) { - WCHAR escape; + UCS2_CHAR escape; escape = 0; /* ensure 3rd argument (escape char) is in operation text type */ diff --git a/src/jrd/evl_like.cpp b/src/jrd/evl_like.cpp index 50e0ced348..4ee5134523 100644 --- a/src/jrd/evl_like.cpp +++ b/src/jrd/evl_like.cpp @@ -52,7 +52,7 @@ USHORT LIKENAME(TDBB tdbb, class TextType* obj, LIKETYPE * p1, SSHORT l1_bytes, /* byte count */ LIKETYPE * p2, SSHORT l2_bytes, /* byte count */ - WCHAR escape_char) + UCS2_CHAR escape_char) { /************************************** * @@ -72,7 +72,7 @@ USHORT LIKENAME(TDBB tdbb, class TextType* obj, LIKETYPE * p1, SSHORT l1_bytes, * instead of UCHAR-based. * * Note Bene: LIKETYPE is defined by including file (evl.c) to either - * WCHAR or NCHAR, depending on the varient being compiled here. + * UCS2_CHAR or NCHAR, depending on the varient being compiled here. * * (escape_char == 0) means no escape character is specified. * @@ -93,13 +93,13 @@ USHORT LIKENAME(TDBB tdbb, class TextType* obj, LIKETYPE * p1, SSHORT l1_bytes, while (l2-- > 0) { c = *p2++; - if (escape_char && ((WCHAR) c == escape_char)) { + if (escape_char && ((UCS2_CHAR) c == escape_char)) { if (l2-- > 0) { c = *p2++; /* Note: SQL II says is error condition */ - if (((WCHAR) c == escape_char) || - ((WCHAR) c == (WCHAR) SQL_MATCH_ANY) || - ((WCHAR) c == (WCHAR) SQL_MATCH_ONE)) + if (((UCS2_CHAR) c == escape_char) || + ((UCS2_CHAR) c == (UCS2_CHAR) SQL_MATCH_ANY) || + ((UCS2_CHAR) c == (UCS2_CHAR) SQL_MATCH_ONE)) escape = TRUE; } if (!escape) diff --git a/src/jrd/intl.cpp b/src/jrd/intl.cpp index 3c7e27e898..a365a5a47f 100644 --- a/src/jrd/intl.cpp +++ b/src/jrd/intl.cpp @@ -143,7 +143,6 @@ typedef unsigned char FILECHAR; -typedef USHORT UNICODE; typedef USHORT fss_wchar_t; typedef int fss_size_t; @@ -161,16 +160,16 @@ static SSHORT internal_str_to_upper(TextType*, USHORT, UCHAR *, USHORT, UCHAR *); static USHORT internal_string_to_key(TextType*, USHORT, UCHAR *, USHORT, UCHAR *, USHORT); -static USHORT mb_to_wc(CsConvert*, WCHAR *, USHORT, MBCHAR *, USHORT, SSHORT *, +static USHORT mb_to_wc(CsConvert*, UCS2_CHAR *, USHORT, MBCHAR *, USHORT, SSHORT *, USHORT *); -static USHORT nc_to_wc(CsConvert*, WCHAR *, USHORT, UCHAR *, USHORT, SSHORT *, +static USHORT nc_to_wc(CsConvert*, UCS2_CHAR *, USHORT, UCHAR *, USHORT, SSHORT *, USHORT *); static void pad_spaces(TDBB, CHARSET_ID, BYTE *, USHORT); -static USHORT wc_to_mb(CsConvert*, MBCHAR *, USHORT, WCHAR *, USHORT, SSHORT *, +static USHORT wc_to_mb(CsConvert*, MBCHAR *, USHORT, UCS2_CHAR *, USHORT, SSHORT *, USHORT *); -static USHORT wc_to_nc(CsConvert*, NCHAR *, USHORT, WCHAR *, USHORT, SSHORT *, +static USHORT wc_to_nc(CsConvert*, NCHAR *, USHORT, UCS2_CHAR *, USHORT, SSHORT *, USHORT *); -static USHORT wc_to_wc(CsConvert*, WCHAR *, USHORT, WCHAR *, USHORT, SSHORT *, +static USHORT wc_to_wc(CsConvert*, UCS2_CHAR *, USHORT, UCS2_CHAR *, USHORT, SSHORT *, USHORT *); static CharSetContainer *internal_charset_container_lookup(TDBB, SSHORT, STATUS *); @@ -482,9 +481,9 @@ CHARSET_ID src_type, BYTE * src_ptr, USHORT src_len, FPTR_VOID err) (SLONG) src_type, 0); /* - ** allocate a temporary buffer that is large enough. 2 = sizeof WCHAR + ** allocate a temporary buffer that is large enough. */ - tmp_buffer = (BYTE *) FB_NEW(*getDefaultMemoryPool()) char[(SLONG) src_len * 2]; + tmp_buffer = (BYTE *) FB_NEW(*getDefaultMemoryPool()) char[(SLONG) src_len * sizeof(UCS2_CHAR)]; cs_obj = from_cs->getConvToUnicode(); assert(cs_obj != NULL); @@ -836,7 +835,7 @@ int DLL_EXPORT INTL_defined_type(TDBB tdbb, STATUS * status, SSHORT t_type) } -WCHAR DLL_EXPORT INTL_getch(TDBB tdbb, +UCS2_CHAR DLL_EXPORT INTL_getch(TDBB tdbb, TextType* * obj, SSHORT t_type, UCHAR ** ptr, USHORT * count) { @@ -851,7 +850,7 @@ WCHAR DLL_EXPORT INTL_getch(TDBB tdbb, * **************************************/ SSHORT used; - USHORT wc; + UCS2_CHAR wc; SET_TDBB(tdbb); @@ -1401,7 +1400,7 @@ static USHORT internal_keylength(TextType* obj, USHORT iLength) return (iLength); } -static USHORT nc_to_wc(CsConvert* obj, WCHAR * pWide, USHORT nWide, /* byte count */ +static USHORT nc_to_wc(CsConvert* obj, UCS2_CHAR * pWide, USHORT nWide, /* byte count */ UCHAR * pNarrow, USHORT nNarrow, /* byte count */ SSHORT * err_code, USHORT * err_position) { @@ -1412,9 +1411,10 @@ static USHORT nc_to_wc(CsConvert* obj, WCHAR * pWide, USHORT nWide, /* byte coun ************************************** * * Functional description + * Copies narrow chars buffer into wide chars buffer for charset NONE * **************************************/ - WCHAR *pStart; + UCS2_CHAR *pStart; UCHAR *pNarrowStart; assert(obj != NULL); @@ -1424,12 +1424,12 @@ static USHORT nc_to_wc(CsConvert* obj, WCHAR * pWide, USHORT nWide, /* byte coun *err_code = 0; if (pWide == NULL) - return (2 * nNarrow); /* all cases */ + return (sizeof(UCS2_CHAR) * nNarrow); /* all cases */ pStart = pWide; pNarrowStart = pNarrow; while (nWide-- > 1 && nNarrow) { /* YYY - Byte order issues here */ - *pWide++ = (WCHAR) * pNarrow++; + *pWide++ = (UCS2_CHAR) * pNarrow++; nWide--; nNarrow--; } @@ -1535,7 +1535,7 @@ static void dump_latin(UCHAR * p, USHORT len) } #endif -unsigned short TextTypeNC::to_wc(unsigned char *pWideUC, +unsigned short TextTypeNC::to_wc(UCS2_CHAR *pWideUC, unsigned short nWide, unsigned char *pNarrow, unsigned short nNarrow, @@ -1551,7 +1551,7 @@ unsigned short TextTypeNC::to_wc(unsigned char *pWideUC, * **************************************/ { - WCHAR *pStart, *pWide = (WCHAR*)pWideUC; + UCS2_CHAR *pStart, *pWide = pWideUC; UCHAR *pNarrowStart; assert((pNarrow != NULL) || (pWide == NULL)); @@ -1560,12 +1560,12 @@ unsigned short TextTypeNC::to_wc(unsigned char *pWideUC, *err_code = 0; if (pWide == NULL) - return (2 * nNarrow); /* all cases */ + return (sizeof(UCS2_CHAR) * nNarrow); /* all cases */ pStart = pWide; pNarrowStart = pNarrow; while (nWide-- > 1 && nNarrow) { /* YYY - Byte order issues here */ - *pWide++ = (WCHAR) * pNarrow++; + *pWide++ = (UCS2_CHAR) * pNarrow++; nWide--; nNarrow--; } @@ -1619,7 +1619,7 @@ unsigned short TextTypeNC::sleuth_merge(TDBB a, unsigned char *b, return EVL_nc_sleuth_merge(a,this,b,c,d,e,f,g); } -unsigned short TextTypeNC::mbtowc(WCHAR *wc, unsigned char *ptr, unsigned short count) +unsigned short TextTypeNC::mbtowc(UCS2_CHAR *wc, unsigned char *ptr, unsigned short count) /************************************** * * i n t e r n a l _ n c _ m b t o w c @@ -1689,7 +1689,7 @@ unsigned short TextTypeMB::sleuth_merge(TDBB a, unsigned char *b, return EVL_mb_sleuth_merge(a,this,b,c,d,e,f,g); } -unsigned short TextTypeMB::mbtowc(WCHAR *wc, unsigned char *ptr, unsigned short count) +unsigned short TextTypeMB::mbtowc(UCS2_CHAR *wc, unsigned char *ptr, unsigned short count) { /************************************** * @@ -1710,7 +1710,7 @@ unsigned short TextTypeMB::mbtowc(WCHAR *wc, unsigned char *ptr, unsigned short if (count >= 2) { if (wc) - *wc = *(WCHAR *) ptr; + *wc = *(UCS2_CHAR *) ptr; return 2; } if (wc) @@ -1718,7 +1718,7 @@ unsigned short TextTypeMB::mbtowc(WCHAR *wc, unsigned char *ptr, unsigned short return (unsigned short)-1; /* No more characters */ } -unsigned short TextTypeWC::to_wc(unsigned char *pDestUC, +unsigned short TextTypeWC::to_wc(UCS2_CHAR *pDestUC, unsigned short nDest, unsigned char *pSrcUC, unsigned short nSrc, @@ -1734,8 +1734,8 @@ unsigned short TextTypeWC::to_wc(unsigned char *pDestUC, * Functional description * *************************************/ - WCHAR *pStart, *pDest = (WCHAR*)pDestUC; - WCHAR *pStart_src, *pSrc = (WCHAR*)pSrcUC; + UCS2_CHAR *pStart, *pDest = pDestUC; + UCS2_CHAR *pStart_src, *pSrc = (UCS2_CHAR*)pSrcUC; assert((pSrc != NULL) || (pDest == NULL)); assert(err_code != NULL); @@ -1765,7 +1765,7 @@ unsigned short TextTypeWC::contains(TDBB a, unsigned char *b, unsigned char *d, unsigned short e) { - return EVL_wc_contains(a,this,(WCHAR*)b,c,(WCHAR*)d,e); + return EVL_wc_contains(a,this,(UCS2_CHAR*)b,c,(UCS2_CHAR*)d,e); } unsigned short TextTypeWC::like(TDBB a, unsigned char *b, @@ -1774,13 +1774,13 @@ unsigned short TextTypeWC::like(TDBB a, unsigned char *b, short e, short f) { - return EVL_wc_like(a,this,(WCHAR*)b,c,(WCHAR*)d,e,f); + return EVL_wc_like(a,this,(UCS2_CHAR*)b,c,(UCS2_CHAR*)d,e,f); } unsigned short TextTypeWC::matches(TDBB a, unsigned char *b, short c, unsigned char *d, short e) { - return EVL_wc_matches(a,this,(WCHAR*)b,c,(WCHAR*)d,e); + return EVL_wc_matches(a,this,(UCS2_CHAR*)b,c,(UCS2_CHAR*)d,e); } unsigned short TextTypeWC::sleuth_check(TDBB a, unsigned short b, @@ -1789,7 +1789,7 @@ unsigned short TextTypeWC::sleuth_check(TDBB a, unsigned short b, unsigned char *e, unsigned short f) { - return EVL_wc_sleuth_check(a,this,b,(WCHAR*)c,d,(WCHAR*)e,f); + return EVL_wc_sleuth_check(a,this,b,(UCS2_CHAR*)c,d,(UCS2_CHAR*)e,f); } unsigned short TextTypeWC::sleuth_merge(TDBB a, unsigned char *b, @@ -1799,10 +1799,10 @@ unsigned short TextTypeWC::sleuth_merge(TDBB a, unsigned char *b, unsigned char *f, unsigned short g) { - return EVL_wc_sleuth_merge(a,this,(WCHAR*)b,c,(WCHAR*)d,e,(WCHAR*)f,g); + return EVL_wc_sleuth_merge(a,this,(UCS2_CHAR*)b,c,(UCS2_CHAR*)d,e,(UCS2_CHAR*)f,g); } -unsigned short TextTypeWC::mbtowc(WCHAR *wc, unsigned char *ptr, unsigned short count) +unsigned short TextTypeWC::mbtowc(UCS2_CHAR *wc, unsigned char *ptr, unsigned short count) { /************************************** * @@ -1823,7 +1823,7 @@ unsigned short TextTypeWC::mbtowc(WCHAR *wc, unsigned char *ptr, unsigned short if (count >= 2) { if (wc) - *wc = *(WCHAR *) ptr; + *wc = *(UCS2_CHAR *) ptr; return 2; } if (wc) @@ -2017,7 +2017,7 @@ public: (tt,a,b,c,d); } - unsigned short to_wc(unsigned char *a, + unsigned short to_wc(UCS2_CHAR *a, unsigned short b, unsigned char *c, unsigned short d, @@ -2027,18 +2027,18 @@ public: assert(tt); assert(tt->texttype_fn_to_wc); return (*(reinterpret_cast - + (tt->texttype_fn_to_wc))) (tt,a,b,c,d,e,f); } - unsigned short mbtowc(WCHAR *a, unsigned char *b, unsigned short c) + unsigned short mbtowc(UCS2_CHAR *a, unsigned char *b, unsigned short c) { assert(tt); if (!tt->texttype_fn_mbtowc) return T::mbtowc(a,b,c); return (*(reinterpret_cast< - USHORT (*)(TEXTTYPE, WCHAR*, UCHAR*, USHORT)> + USHORT (*)(TEXTTYPE, UCS2_CHAR*, UCHAR*, USHORT)> (tt->texttype_fn_mbtowc)))(tt,a,b,c); } diff --git a/src/jrd/intl_builtin.cpp b/src/jrd/intl_builtin.cpp index feef97ecf5..a96374da5a 100644 --- a/src/jrd/intl_builtin.cpp +++ b/src/jrd/intl_builtin.cpp @@ -9,7 +9,6 @@ typedef USHORT fss_wchar_t; typedef int fss_size_t; typedef unsigned char FILECHAR; -typedef USHORT UNICODE; // internal functions static fss_size_t fss_wctomb(UCHAR *, fss_wchar_t); @@ -29,7 +28,7 @@ static unsigned short internal_unicode_to_fss( short *, unsigned short *); static USHORT internal_fss_to_unicode ( - UNICODE*, + UCS2_CHAR*, USHORT, NCHAR*, USHORT, @@ -112,15 +111,15 @@ public: unsigned char *d) { return internal_str_to_upper(a,b,c,d); } - unsigned short to_wc(unsigned char *a, + unsigned short to_wc(UCS2_CHAR *a, unsigned short b, unsigned char *c, unsigned short d, short *e, unsigned short *f) - { return internal_fss_to_unicode((UNICODE*)a,b,c,d,e,f); } + { return internal_fss_to_unicode(a,b,c,d,e,f); } - unsigned short mbtowc(WCHAR *wc, unsigned char *p, unsigned short n) + unsigned short mbtowc(UCS2_CHAR *wc, unsigned char *p, unsigned short n) { return fss_mbtowc(wc, p, n); } }; @@ -409,7 +408,7 @@ public: { return FB_NEW(p) CharSet_Unicode(p); } CharSet_Unicode(MemoryPool &p) : CharSet(CS_UNICODE_UCS2, "UNICODE_UCS2", 2, 2, 2, 0) { - static const WCHAR space = 0x0020; + static const UCS2_CHAR space = 0x0020; charset_space_character = (const char *) & space; /* 0x0020 */ } }; @@ -428,6 +427,21 @@ public: /********************************************************************************/ +#ifndef HAVE_SWAB +#ifdef HAVE__SWAB +#define swab _swab +#else // use generic swab(). Slow (but faster than previous implementation) and buggy +void swab(char * a, char * b, int n) +{ + while(--n>0) + { + *b++ = a[1]; + *b++ = *a++; + a++; n--; + } +} +#endif +#endif unsigned short CsConvert_Unicode_Binary::convert( unsigned char *pDest, @@ -448,30 +462,26 @@ unsigned short CsConvert_Unicode_Binary::convert( * byte stream. * *************************************/ - MBCHAR *pStart; - WCHAR *pStart_src, *pSrc = (WCHAR*)pSrcUC; + unsigned short res; - assert((pSrc != NULL) || (pDest == NULL)); + assert((pSrcUC != NULL) || (pDest == NULL)); assert(err_code != NULL); assert(err_position != NULL); *err_code = 0; if (pDest == NULL) /* length estimate needed? */ return (nSrc); - pStart = pDest; - pStart_src = pSrc; - while (nDest > 1 && nSrc > 1) { - *pDest++ = *pSrc / 256; - *pDest++ = *pSrc++ % 256; - nDest -= 2; - nSrc -= 2; - } - if (!*err_code && nSrc) { + + assert(nSrc&1 == 0); // check for even length + + if (nSrc>nDest) { *err_code = CS_TRUNCATION_ERROR; } - *err_position = (pSrc - pStart_src) * sizeof(*pSrc); + res = nSrc>nDest?nDest:nSrc; + swab((char *)pSrcUC,(char *)pDest,res); + *err_position = res; - return ((pDest - pStart) * sizeof(*pDest)); + return res; } @@ -492,32 +502,30 @@ unsigned short CsConvert_Binary_Unicode::convert( * Functional description * Convert a wc string from network form - high-endian * byte stream. + * Symmetrical with CsConvert_Unicode_Binary::convert + * but really the same * *************************************/ - WCHAR *pStart, *pDest = (WCHAR*)pDestUC; - MBCHAR *pStart_src; + unsigned short res; - assert((pSrc != NULL) || (pDest == NULL)); + assert((pSrc != NULL) || (pDestUC == NULL)); assert(err_code != NULL); assert(err_position != NULL); *err_code = 0; - if (pDest == NULL) /* length estimate needed? */ + if (pDestUC == NULL) /* length estimate needed? */ return (nSrc); - pStart = pDest; - pStart_src = pSrc; - while (nDest > 1 && nSrc > 1) { - *pDest++ = *pSrc * 256 + *(pSrc + 1); - pSrc += 2; - nDest -= 2; - nSrc -= 2; - } - if (!*err_code && nSrc) { + + assert(nSrc&1 == 0); + + if (nSrc>nDest) { *err_code = CS_TRUNCATION_ERROR; } - *err_position = (pSrc - pStart_src) * sizeof(*pSrc); + res = nSrc>nDest?nDest:nSrc; + swab((char *)pSrc,(char *)pDestUC,res); + *err_position = res; - return ((pDest - pStart) * sizeof(*pDest)); + return res; } unsigned short CsConvert_UFSS_Unicode::convert( @@ -528,7 +536,7 @@ unsigned short CsConvert_UFSS_Unicode::convert( short *err_code, unsigned short *err_position) { - UNICODE *start, *dest_ptr = (UNICODE*)dest_ptrUC; + UCS2_CHAR *start, *dest_ptr = (UCS2_CHAR*)dest_ptrUC; USHORT src_start = src_len; fss_size_t res; @@ -584,7 +592,7 @@ unsigned short CsConvert_Unicode_ASCII::convert( * *************************************/ NCHAR *pStart; - WCHAR *pStart_src, *pSrc = (WCHAR*)pSrcUC; + UCS2_CHAR *pStart_src, *pSrc = (UCS2_CHAR*)pSrcUC; assert((pSrc != NULL) || (pDest == NULL)); assert(err_code != NULL); @@ -631,7 +639,7 @@ unsigned short CsConvert_ASCII_Unicode::convert( * Byte values >= 128 create BAD_INPUT * *************************************/ - WCHAR *pStart, *pDest = (WCHAR*)pDestUC; + UCS2_CHAR *pStart, *pDest = (UCS2_CHAR*)pDestUC; UCHAR *pStart_src; assert((pSrc != NULL) || (pDest == NULL)); @@ -677,7 +685,7 @@ unsigned short CsConvert_Unicode_None::convert( * **************************************/ NCHAR *pStart; - WCHAR *pStart_src, *pSrc = (WCHAR*)pSrcUC; + UCS2_CHAR *pStart_src, *pSrc = (UCS2_CHAR*)pSrcUC; assert((pSrc != NULL) || (pDest == NULL)); assert(err_code != NULL); @@ -725,7 +733,7 @@ unsigned short CsConvert_None_Unicode::convert( * Byte values >= 128 create CONVERT ERROR * *************************************/ - WCHAR *pStart, *pDest = (WCHAR*)pDestUC; + UCS2_CHAR *pStart, *pDest = (UCS2_CHAR*)pDestUC; UCHAR *pStart_src; assert((pSrc != NULL) || (pDest == NULL)); @@ -1148,7 +1156,7 @@ unsigned short internal_unicode_to_fss( unsigned short *err_position) { MBCHAR *fss_str = (MBCHAR*)fss_strUC; - UNICODE *unicode_str = (UNICODE*)unicode_strUC; + UCS2_CHAR *unicode_str = (UCS2_CHAR*)unicode_strUC; UCHAR *start; USHORT src_start = unicode_len; UCHAR tmp_buffer[6]; @@ -1193,14 +1201,14 @@ unsigned short internal_unicode_to_fss( } static USHORT internal_fss_to_unicode ( - UNICODE *dest_ptr, + UCS2_CHAR *dest_ptr, USHORT dest_len, /* BYTE count */ NCHAR *src_ptr, USHORT src_len, SSHORT *err_code, USHORT *err_position) { - UNICODE *start; + UCS2_CHAR *start; USHORT src_start = src_len; fss_size_t res; @@ -1522,7 +1530,7 @@ static USHORT cs_unicode_ucs2_init(CHARSET csptr, USHORT cs_id, USHORT dummy) * Functional description * *************************************/ - static const WCHAR space = 0x0020; + static const UCS2_CHAR space = 0x0020; csptr->charset_version = 40; csptr->charset_id = CS_UNICODE; diff --git a/src/jrd/intl_classes.h b/src/jrd/intl_classes.h index db2397f9a4..e94b150944 100644 --- a/src/jrd/intl_classes.h +++ b/src/jrd/intl_classes.h @@ -29,7 +29,7 @@ typedef unsigned short CHARSET_ID; typedef unsigned short COLLATE_ID; typedef unsigned short TTYPE_ID; -typedef unsigned short WCHAR; +typedef unsigned short UCS2_CHAR; typedef unsigned char NCHAR; typedef unsigned char MBCHAR; typedef class tdbb *TDBB; @@ -74,12 +74,14 @@ public: unsigned char*, unsigned short, unsigned char*) = 0; - virtual unsigned short to_wc(unsigned char*, - unsigned short, - unsigned char*, - unsigned short, - short*, - unsigned short*) = 0; + /* SD: to_wc returns estimated or real length of the result string in bytes that is rather strange */ + virtual unsigned short to_wc(UCS2_CHAR*, // destination buffer + unsigned short, // length of the destination buffer in bytes + unsigned char*, // source buffer + unsigned short, // length of source buffer in bytes + short*, // variable to return error code + unsigned short*) = 0; // variable to return offset of the first + // unprocessed char virtual unsigned short contains(TDBB, unsigned char*, unsigned short, unsigned char*, @@ -102,7 +104,7 @@ public: unsigned short, unsigned char*, unsigned short) = 0; - virtual unsigned short mbtowc(WCHAR*, unsigned char*, unsigned short) = 0; + virtual unsigned short mbtowc(UCS2_CHAR*, unsigned char*, unsigned short) = 0; //virtual short get_wchar(unsigned short*, unsigned char*, unsigned short) = 0; //unsigned short getVersion() { return texttype_version; } @@ -129,12 +131,13 @@ public: TextType(type, name, cs_id, country, bpc) {} - unsigned short to_wc(unsigned char*, - unsigned short, - unsigned char*, - unsigned short, - short*, - unsigned short*); + unsigned short to_wc(UCS2_CHAR*, // destination buffer + unsigned short, // length of the destination buffer in bytes + unsigned char*, // source buffer + unsigned short, // length of source buffer in bytes + short*, // variable to return error code + unsigned short*); // variable to return offset of the first + // unprocessed char unsigned short contains(TDBB, unsigned char*, unsigned short, unsigned char*, @@ -157,7 +160,7 @@ public: unsigned short, unsigned char*, unsigned short); - unsigned short mbtowc(WCHAR*, unsigned char*, unsigned short); + unsigned short mbtowc(UCS2_CHAR*, unsigned char*, unsigned short); }; class TextTypeWC : public TextType @@ -168,12 +171,13 @@ public: TextType(type, name, cs_id, country, bpc) {} - unsigned short to_wc(unsigned char*, - unsigned short, - unsigned char*, - unsigned short, - short*, - unsigned short*); + unsigned short to_wc(UCS2_CHAR*, // destination buffer + unsigned short, // length of the destination buffer in bytes + unsigned char*, // source buffer + unsigned short, // length of source buffer in bytes + short*, // variable to return error code + unsigned short*); // variable to return offset of the first + // unprocessed char unsigned short contains(TDBB, unsigned char*, unsigned short, unsigned char*, @@ -196,7 +200,7 @@ public: unsigned short, unsigned char*, unsigned short); - unsigned short mbtowc(WCHAR*, unsigned char*, unsigned short); + unsigned short mbtowc(UCS2_CHAR*, unsigned char*, unsigned short); }; class TextTypeMB : public TextType @@ -229,7 +233,7 @@ public: unsigned short, unsigned char*, unsigned short); - unsigned short mbtowc(WCHAR*, unsigned char*, unsigned short); + unsigned short mbtowc(UCS2_CHAR*, unsigned char*, unsigned short); }; #define TEXTTYPE_init 1 /* object has been init'ed */ diff --git a/src/jrd/intlobj.h b/src/jrd/intlobj.h index cdbcb3e475..0c8e508616 100644 --- a/src/jrd/intlobj.h +++ b/src/jrd/intlobj.h @@ -53,7 +53,7 @@ typedef SSHORT COLLATE_ID; typedef USHORT TTYPE_ID; typedef SCHAR ASCII; typedef unsigned char NCHAR; /* Narrow Char */ -typedef unsigned short WCHAR; /* Wide Char */ +typedef unsigned short UCS2_CHAR; /* Not very Wide Char */ typedef unsigned char MBCHAR; /* Multibyte Char */ #define type_texttype 54 diff --git a/src/make.new/config/config.h.in b/src/make.new/config/config.h.in index 4a0e6f2b35..a7b9a29c54 100644 --- a/src/make.new/config/config.h.in +++ b/src/make.new/config/config.h.in @@ -1,4 +1,4 @@ -#ident "$Id: config.h.in,v 1.69 2003-02-13 22:49:16 bellardo Exp $" +#ident "$Id: config.h.in,v 1.70 2003-02-18 05:24:35 aafemt Exp $" /* * 2002.02.15 Sean Leyne - Code Cleanup, removed obsolete ports: @@ -77,6 +77,8 @@ #undef HAVE_SIGACTION #undef HAVE_SETITIMER #undef HAVE_SNPRINTF +#undef HAVE_SWAB +#undef HAVE__SWAB #undef HAVE_MMAP #undef HAVE_ATEXIT #undef HAVE_ON_EXIT