1 --- scim-1.4.7.orig/src/scim_iconv.cpp 2007�� 10�� 9�� �� 00:42:09 |
|
2 +++ scim-1.4.7/src/scim_iconv.cpp 2007�� 12�� 29�� �� 16:30:48 |
|
3 @@ -97,11 +97,11 @@ |
|
4 iconv_t new_iconv_to_unicode; |
|
5 |
|
6 if (scim_is_little_endian ()) { |
|
7 - new_iconv_from_unicode = iconv_open (encoding.c_str (), "UCS-4LE"); |
|
8 - new_iconv_to_unicode = iconv_open ("UCS-4LE", encoding.c_str ()); |
|
9 + new_iconv_from_unicode = iconv_open (encoding.c_str (), "UCS-2LE"); |
|
10 + new_iconv_to_unicode = iconv_open ("UCS-2LE", encoding.c_str ()); |
|
11 } else { |
|
12 - new_iconv_from_unicode = iconv_open (encoding.c_str (), "UCS-4BE"); |
|
13 - new_iconv_to_unicode = iconv_open ("UCS-4BE", encoding.c_str ()); |
|
14 + new_iconv_from_unicode = iconv_open (encoding.c_str (), "UCS-2BE"); |
|
15 + new_iconv_to_unicode = iconv_open ("UCS-2BE", encoding.c_str ()); |
|
16 } |
|
17 |
|
18 if (new_iconv_from_unicode == (iconv_t) -1 || |
|
19 @@ -144,17 +144,23 @@ |
|
20 size_t src_buf_size = 0; |
|
21 size_t ret; |
|
22 |
|
23 + ucs2_t *ucs2src = new ucs2_t[src_len]; |
|
24 + for (int i = 0; i < src_len; i++) { |
|
25 + ucs2src[i] = (ucs2_t)src[i]; |
|
26 + } |
|
27 + |
|
28 iconv (m_impl->m_iconv_from_unicode, 0, &src_buf_size, 0, &dest_buf_size); |
|
29 |
|
30 char *dest_buf_ptr = dest_buf; |
|
31 - ICONV_CONST char *src_buf_ptr = (ICONV_CONST char*) src; |
|
32 + ICONV_CONST char *src_buf_ptr = (ICONV_CONST char*) ucs2src; |
|
33 |
|
34 dest_buf_size = SCIM_MAX_BUFSIZE * MB_LEN_MAX; |
|
35 - src_buf_size = src_len * sizeof (ucs4_t); |
|
36 + src_buf_size = src_len * sizeof (ucs2_t); |
|
37 |
|
38 ret = iconv (m_impl->m_iconv_from_unicode, &src_buf_ptr, &src_buf_size, &dest_buf_ptr, &dest_buf_size); |
|
39 dest.assign (dest_buf, dest_buf_ptr); |
|
40 |
|
41 + delete[] ucs2src; |
|
42 return ret != (size_t) -1; |
|
43 } |
|
44 |
|
45 @@ -172,18 +178,24 @@ |
|
46 char dest_buf [SCIM_MAX_BUFSIZE * MB_LEN_MAX]; |
|
47 size_t src_buf_size = 0; |
|
48 size_t dest_buf_size = 0; |
|
49 + |
|
50 size_t ret; |
|
51 + ucs2_t *ucs2src = new ucs2_t[src_len]; |
|
52 + for (int i = 0; i < src_len; i++) { |
|
53 + ucs2src[i] = (ucs2_t)src[i]; |
|
54 + } |
|
55 |
|
56 iconv (m_impl->m_iconv_from_unicode, 0, &src_buf_size, 0, &dest_buf_size); |
|
57 |
|
58 char *dest_buf_ptr = dest_buf; |
|
59 - ICONV_CONST char *src_buf_ptr = (ICONV_CONST char*) src; |
|
60 + ICONV_CONST char *src_buf_ptr = (ICONV_CONST char*) ucs2src; |
|
61 |
|
62 - src_buf_size = src_len * sizeof (ucs4_t); |
|
63 + src_buf_size = src_len * sizeof (ucs2_t); |
|
64 dest_buf_size = SCIM_MAX_BUFSIZE * MB_LEN_MAX; |
|
65 |
|
66 ret = iconv (m_impl->m_iconv_from_unicode, &src_buf_ptr, &src_buf_size, &dest_buf_ptr, &dest_buf_size); |
|
67 |
|
68 + delete[] ucs2src; |
|
69 return ret != (size_t) -1; |
|
70 } |
|
71 |
|
72 @@ -199,20 +211,30 @@ |
|
73 if (m_impl->m_iconv_to_unicode == (iconv_t) -1) return false; |
|
74 |
|
75 ucs4_t dest_buf [SCIM_MAX_BUFSIZE]; |
|
76 + ucs2_t ucs2_dest_buf [SCIM_MAX_BUFSIZE]; |
|
77 |
|
78 size_t dest_buf_size = 0; |
|
79 size_t src_buf_size = 0; |
|
80 size_t ret; |
|
81 + int i; |
|
82 |
|
83 iconv (m_impl->m_iconv_to_unicode, 0, &src_buf_size, 0, &dest_buf_size); |
|
84 |
|
85 - char *dest_buf_ptr = (char*) dest_buf; |
|
86 + char *dest_buf_ptr = (char*) ucs2_dest_buf; |
|
87 ICONV_CONST char *src_buf_ptr = (ICONV_CONST char*) src; |
|
88 |
|
89 - dest_buf_size = SCIM_MAX_BUFSIZE * sizeof (ucs4_t); |
|
90 + dest_buf_size = SCIM_MAX_BUFSIZE * sizeof (ucs2_t); |
|
91 src_buf_size = src_len; |
|
92 |
|
93 ret = iconv (m_impl->m_iconv_to_unicode, &src_buf_ptr, &src_buf_size, &dest_buf_ptr, &dest_buf_size); |
|
94 + |
|
95 + size_t dest_cnt = (SCIM_MAX_BUFSIZE * sizeof (ucs2_t) - dest_buf_size) |
|
96 + / sizeof (ucs2_t); |
|
97 + |
|
98 + for (i = 0; i < dest_cnt; i++) { |
|
99 + dest_buf[i] = (ucs4_t)ucs2_dest_buf[i] & 0x0000ffff; |
|
100 + } |
|
101 + dest_buf_ptr = (char *)&dest_buf[i]; |
|
102 dest.assign (dest_buf, (ucs4_t*) dest_buf_ptr); |
|
103 |
|
104 return ret != (size_t) -1; |
|
105 @@ -235,16 +257,21 @@ |
|
106 size_t dest_buf_size = 0; |
|
107 size_t ret; |
|
108 |
|
109 - iconv (m_impl->m_iconv_from_unicode, 0, &src_buf_size, 0, &dest_buf_size); |
|
110 + ucs2_t *ucs2src = new ucs2_t[src_len]; |
|
111 + for (int i = 0; i < src_len; i++) { |
|
112 + ucs2src[i] = (ucs2_t)src[i]; |
|
113 + } |
|
114 + iconv (m_impl->m_iconv_to_unicode, 0, &src_buf_size, 0, &dest_buf_size); |
|
115 |
|
116 char *dest_buf_ptr = (char*) dest_buf; |
|
117 - ICONV_CONST char *src_buf_ptr = (ICONV_CONST char*) src; |
|
118 + ICONV_CONST char *src_buf_ptr = (ICONV_CONST char*) ucs2src; |
|
119 |
|
120 src_buf_size = src_len; |
|
121 - dest_buf_size = SCIM_MAX_BUFSIZE * sizeof (ucs4_t); |
|
122 + dest_buf_size = SCIM_MAX_BUFSIZE * sizeof (ucs2_t); |
|
123 |
|
124 ret = iconv (m_impl->m_iconv_to_unicode, &src_buf_ptr, &src_buf_size, &dest_buf_ptr, &dest_buf_size); |
|
125 |
|
126 + delete[] ucs2src; |
|
127 return ret != (size_t) -1; |
|
128 } |
|
129 |
|
130 --- scim-1.4.7.orig/src/scim_types.h.in 2007�� 10�� 9�� �� 00:42:09 |
|
131 +++ scim-1.4.7/src/scim_types.h.in 2007�� 12�� 29�� �� 16:30:48 |
|
132 @@ -50,6 +54,7 @@ |
|
133 #else |
|
134 typedef uint32 ucs4_t; |
|
135 #endif |
|
136 +typedef uint16 ucs2_t; |
|
137 |
|
138 typedef std::basic_string<char> String; |
|
139 typedef std::basic_string<ucs4_t> WideString; |
|