Fixes a latent bug in SwtOleGlue.extractStringFromOleCharPtr(). We were treating the incoming value as a BSTR, but it's really just a naked OLECHAR*.
Patch by: me, bruce, jat (trio prog)
Review by: me, bruce, jat
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1991 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/windows/src/com/google/gwt/dev/shell/ie/SwtOleGlue.java b/dev/windows/src/com/google/gwt/dev/shell/ie/SwtOleGlue.java
index 5f09e9a..a0afad8 100644
--- a/dev/windows/src/com/google/gwt/dev/shell/ie/SwtOleGlue.java
+++ b/dev/windows/src/com/google/gwt/dev/shell/ie/SwtOleGlue.java
@@ -85,20 +85,10 @@
* Extracts a string from an (OLECHAR*) type.
*/
public static String extractStringFromOleCharPtr(int pOleChar) {
- // TODO: double-check the encoding (is it UTF-16?, what)
- int size = COM.SysStringByteLen(pOleChar);
- if (size > 8192) {
- size = 8192;
- }
- char[] buffer = new char[(size + 1) / 2];
- OS.MoveMemory(buffer, pOleChar, size);
-
- String s = new String(buffer);
- if (s.indexOf('\0') != -1) {
- return s.substring(0, s.indexOf('\0'));
- } else {
- return s;
- }
+ int length = OS.wcslen(pOleChar);
+ char[] buffer = new char[length];
+ OS.MoveMemory(buffer, pOleChar, length);
+ return String.valueOf(buffer);
}
/**