logo       

izpack-src/src/native/win/COIOSHelper COIOSHelper.cxx,1.2,1.3 COIOSHelper.d: msg#00019

Subject: izpack-src/src/native/win/COIOSHelper COIOSHelper.cxx,1.2,1.3 COIOSHelper.dsp,1.1,1.2 COIOSHelper.h,1.2,1.3 RegistryImpl.cxx,1.2,1.3 RegistryInternal.cxx,1.2,1.3 WinLibEnv.cxx,1.2,1.3 WinLibEnv.h,1.2,1.3
Update of /cvsroot/izpack/izpack-src/src/native/win/COIOSHelper
In directory sheep:/tmp/cvs-serv10466

Modified Files:
        COIOSHelper.cxx COIOSHelper.dsp COIOSHelper.h RegistryImpl.cxx 
        RegistryInternal.cxx WinLibEnv.cxx WinLibEnv.h 
Log Message:
Unicode support for registry stuff added.

Index: COIOSHelper.cxx
===================================================================
RCS file: 
/cvsroot/izpack/izpack-src/src/native/win/COIOSHelper/COIOSHelper.cxx,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- COIOSHelper.cxx     6 May 2005 20:09:12 -0000       1.2
+++ COIOSHelper.cxx     2 Sep 2005 10:51:35 -0000       1.3
@@ -19,7 +19,7 @@
  * limitations under the License.
  */
 
-
+#include "UnicodeHelper.h"
 #include <windows.h>
 #include <jni.h>
 #include "com_coi_tools_os_izpack_COIOSHelper.h"
@@ -57,13 +57,13 @@
        (JNIEnv *env, jobject obj, jstring name)
 {
        // convert the name from Java string type
-       const char *libraryName = env->GetStringUTFChars (name, 0);
+       const TCHAR *libraryName = env->GET_STRING_CHARS (name, 0);
 
        // get a module handle 
        HMODULE handle = GetModuleHandle (libraryName);
 
        // release the string object
-       env->ReleaseStringUTFChars (name, libraryName);
+       env->RELEASE_STRING_CHARS (name, libraryName);
        
        // destroy the acl factory
        // now we are rady to free the library

Index: COIOSHelper.dsp
===================================================================
RCS file: 
/cvsroot/izpack/izpack-src/src/native/win/COIOSHelper/COIOSHelper.dsp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- COIOSHelper.dsp     3 May 2005 13:36:15 -0000       1.1
+++ COIOSHelper.dsp     2 Sep 2005 10:51:36 -0000       1.2
@@ -4,7 +4,7 @@
 
 # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
 
-CFG=COIOSHelper - Win32 Debug
+CFG=COIOSHelper - Win32 Debug Unicode
 !MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit 
NMAKE
 !MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den 
Befehl
 !MESSAGE 
@@ -13,12 +13,14 @@
 !MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
 !MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
 !MESSAGE 
-!MESSAGE NMAKE /f "COIOSHelper.mak" CFG="COIOSHelper - Win32 Debug"
+!MESSAGE NMAKE /f "COIOSHelper.mak" CFG="COIOSHelper - Win32 Debug Unicode"
 !MESSAGE 
 !MESSAGE Für die Konfiguration stehen zur Auswahl:
 !MESSAGE 
 !MESSAGE "COIOSHelper - Win32 Release" (basierend auf  "Win32 (x86) 
Dynamic-Link Library")
 !MESSAGE "COIOSHelper - Win32 Debug" (basierend auf  "Win32 (x86) Dynamic-Link 
Library")
+!MESSAGE "COIOSHelper - Win32 Debug Unicode" (basierend auf  "Win32 (x86) 
Dynamic-Link Library")
+!MESSAGE "COIOSHelper - Win32 Release Unicode" (basierend auf  "Win32 (x86) 
Dynamic-Link Library")
 !MESSAGE 
 
 # Begin Project
@@ -66,8 +68,8 @@
 # PROP Output_Dir "Debug"
 # PROP Intermediate_Dir "Debug"
 # PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D 
"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COIOSHELPER_EXPORTS" /YX /FD /GZ  /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D 
"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COIOSHELPER_EXPORTS" /YX /FD /GZ  /c
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D 
"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COIOSHELPER_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D 
"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COIOSHELPER_EXPORTS" /YX /FD /GZ /c
 # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
 # ADD BASE RSC /l 0x407 /d "_DEBUG"
@@ -79,12 +81,65 @@
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
 
+!ELSEIF  "$(CFG)" == "COIOSHelper - Win32 Debug Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug_Unicode"
+# PROP BASE Intermediate_Dir "Debug_Unicode"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_Unicode"
+# PROP Intermediate_Dir "Debug_Unicode"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D 
"_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "COIOSHELPER_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D 
"_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "COIOSHELPER_EXPORTS" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+
+!ELSEIF  "$(CFG)" == "COIOSHelper - Win32 Release Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release_Unicode"
+# PROP BASE Intermediate_Dir "Release_Unicode"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_Unicode"
+# PROP Intermediate_Dir "Release_Unicode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D 
"_MBCS" /D "_USRDLL" /D "COIOSHELPER_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D 
"_UNICODE" /D "_USRDLL" /D "COIOSHELPER_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /dll /machine:I386
+
 !ENDIF 
 
 # Begin Target
 
 # Name "COIOSHelper - Win32 Release"
 # Name "COIOSHelper - Win32 Debug"
+# Name "COIOSHelper - Win32 Debug Unicode"
+# Name "COIOSHelper - Win32 Release Unicode"
 # Begin Group "Quellcodedateien"
 
 # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
@@ -111,6 +166,10 @@
 # Begin Source File
 
 SOURCE=.\COIOSHelper.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\UnicodeHelper.h
 # End Source File
 # Begin Source File
 

Index: COIOSHelper.h
===================================================================
RCS file: /cvsroot/izpack/izpack-src/src/native/win/COIOSHelper/COIOSHelper.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- COIOSHelper.h       6 May 2005 20:09:12 -0000       1.2
+++ COIOSHelper.h       2 Sep 2005 10:51:36 -0000       1.3
@@ -19,6 +19,7 @@
  * limitations under the License.
  */
 
+
 #include <jni.h>
 #include "WinLibEnv.h"
 
@@ -50,20 +51,20 @@
 
 // in RegistryInternal.c
 
-extern jboolean regKeyExist(WinLibEnv *libEnv, int root, const char *key );
-extern void setRegValue(WinLibEnv *libEnv, int root, const char *key, 
-       const char *value, jint type, LPBYTE contents, jint length );
-extern void createRegKey(WinLibEnv *libEnv, int root, const char *key );
-extern jint getRegValueType( WinLibEnv *libEnv, int root, const char *key , 
const char *value );
-extern LPBYTE getRegValue( WinLibEnv *libEnv, int root, const char *key , 
const char *value, DWORD *type, DWORD *length);
-extern void deleteRegValue(WinLibEnv *libEnv, int root, const char *key, const 
char *value );
-extern void deleteRegKey(WinLibEnv *libEnv, int root, const char *key );
-extern jboolean isKeyEmpty(WinLibEnv *libEnv, int root, const char *key );
-extern void determineCounts( WinLibEnv *libEnv, int root, const char *key, 
DWORD *subkeys, DWORD *values );
-extern char *getSubkeyName( WinLibEnv *libEnv, int root, const char *key , int 
valueId );
-extern char *getValueName( WinLibEnv *libEnv, int root, const char *key , int 
keyId );
-extern int getValueNames( WinLibEnv *libEnv, int root, const char *key , char 
***names  );
-extern int getSubkeyNames( WinLibEnv *libEnv, int root, const char *key , char 
***names  );
+extern jboolean regKeyExist(WinLibEnv *libEnv, int root, const TCHAR *key );
+extern void setRegValue(WinLibEnv *libEnv, int root, const TCHAR *key, 
+       const TCHAR *value, jint type, LPBYTE contents, jint length );
+extern void createRegKey(WinLibEnv *libEnv, int root, const TCHAR *key );
+extern jint getRegValueType( WinLibEnv *libEnv, int root, const TCHAR *key , 
const TCHAR *value );
+extern LPBYTE getRegValue( WinLibEnv *libEnv, int root, const TCHAR *key , 
const TCHAR *value, DWORD *type, DWORD *length);
+extern void deleteRegValue(WinLibEnv *libEnv, int root, const TCHAR *key, 
const TCHAR *value );
+extern void deleteRegKey(WinLibEnv *libEnv, int root, const TCHAR *key );
+extern jboolean isKeyEmpty(WinLibEnv *libEnv, int root, const TCHAR *key );
+extern void determineCounts( WinLibEnv *libEnv, int root, const TCHAR *key, 
DWORD *subkeys, DWORD *values );
+extern TCHAR *getSubkeyName( WinLibEnv *libEnv, int root, const TCHAR *key , 
int valueId );
+extern TCHAR *getValueName( WinLibEnv *libEnv, int root, const TCHAR *key , 
int keyId );
+extern int getValueNames( WinLibEnv *libEnv, int root, const TCHAR *key , 
TCHAR ***names  );
+extern int getSubkeyNames( WinLibEnv *libEnv, int root, const TCHAR *key , 
TCHAR ***names  );
 
 
 

Index: RegistryImpl.cxx
===================================================================
RCS file: 
/cvsroot/izpack/izpack-src/src/native/win/COIOSHelper/RegistryImpl.cxx,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- RegistryImpl.cxx    6 May 2005 20:09:12 -0000       1.2
+++ RegistryImpl.cxx    2 Sep 2005 10:51:36 -0000       1.3
@@ -19,6 +19,7 @@
  * limitations under the License.
  */
 
+#include "UnicodeHelper.h"
 #include "com_coi_tools_os_win_RegistryImpl.h"
 #include <windows.h>
 #include "COIOSHelper.h"
@@ -53,10 +54,10 @@
        jboolean  retval = false;
        if( libEnv.verifyNullObjects(jKey ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
                retval = regKeyExist(&libEnv,  jRoot, key );
 
-               env->ReleaseStringUTFChars( jKey, key);
+               env->RELEASE_STRING_CHARS( jKey, key);
        }
        libEnv.verifyAndThrowAtError();
        return( retval  );
@@ -75,9 +76,9 @@
        WinLibEnv libEnv( env, obj );
        if( libEnv.verifyNullObjects(jKey ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
                createRegKey(&libEnv,  jRoot, key );
-               env->ReleaseStringUTFChars( jKey, key);
+               env->RELEASE_STRING_CHARS( jKey, key);
        }
        libEnv.verifyAndThrowAtError();
 }
@@ -96,9 +97,9 @@
        WinLibEnv *plibEnv = &libEnv;
        if( libEnv.verifyNullObjects(jKey, jValue, jContents ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
-               const char *value = env->GetStringUTFChars( jValue , 0);
-               const char *buf = NULL;
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
+               const TCHAR *value = env->GET_STRING_CHARS( jValue , 0);
+               const TCHAR *buf = NULL;
                jint type       = 0;
                                int i;
                LPBYTE contents = NULL;
@@ -110,21 +111,21 @@
                jboolean isCopy = false;
                jstring *jMultiStr = NULL;
                jint multiSize = 0;
-               const char ** intermedMulti = NULL;;
+               const TCHAR ** intermedMulti = NULL;;
                while( 1 )
                {
                        jmethodID       mid = NULL;
                        jclass clazz    = env->GetObjectClass( jContents );
                        if( clazz == NULL )     // oops, class not bound ??
-                               ERROR_BREAK("registry.MissingRegDataContainer", 
plibEnv);
+                               
ERROR_BREAK(_T("registry.MissingRegDataContainer"), plibEnv);
                        if( (mid = env->GetMethodID( clazz, "getType", "()I" ) 
) == NULL )
-                               
ERROR_BREAK("registry.MalformedRegDataContainer", plibEnv);
+                               
ERROR_BREAK(_T("registry.MalformedRegDataContainer"), plibEnv);
                        type = env->CallIntMethod( jContents, mid );
                        switch( type )
                        {
                        case REG_DWORD:
                                if( (mid = env->GetMethodID( clazz, 
"getDwordData", "()J" ) ) == NULL )
-                                       
ERROR_BREAK("registry.MalformedRegDataContainer", plibEnv);
+                                       
ERROR_BREAK(_T("registry.MalformedRegDataContainer"), plibEnv);
                                ddata  = (DWORD) env->CallLongMethod( 
jContents, mid );
                                contents = (LPBYTE) &ddata;
                                length = 4;
@@ -132,51 +133,52 @@
                        case REG_SZ:
                        case REG_EXPAND_SZ:
                                if( (mid = env->GetMethodID( clazz, 
"getStringData", "()Ljava/lang/String;" ) ) == NULL )
-                                       
ERROR_BREAK("registry.MalformedRegDataContainer", plibEnv);
+                                       
ERROR_BREAK(_T("registry.MalformedRegDataContainer"), plibEnv);
                                if( (jStr = (jstring) env->CallObjectMethod( 
jContents, mid )) == NULL )
-                                       
ERROR_BREAK("registry.MalformedRegDataContainer", plibEnv);
-                               buf = env->GetStringUTFChars( jStr , 0);
+                                       
ERROR_BREAK(_T("registry.MalformedRegDataContainer"), plibEnv);
+                               buf = env->GET_STRING_CHARS( jStr , 0);
                                contents = (LPBYTE) buf;
-                               length  = strlen( buf) + 1;
+                               length  = (_tcslen( buf) + 1) * sizeof(TCHAR);
                                break;
                        case REG_BINARY:
                                if( (mid = env->GetMethodID( clazz, 
"getBinData", "()[B" ) ) == NULL )
-                                       
ERROR_BREAK("registry.MalformedRegDataContainer", plibEnv);
+                                       
ERROR_BREAK(_T("registry.MalformedRegDataContainer"), plibEnv);
                                if( (jBin = (jbyteArray) env->CallObjectMethod( 
jContents, mid )) == NULL )
-                                       
ERROR_BREAK("registry.MalformedRegDataContainer", plibEnv);
+                                       
ERROR_BREAK(_T("registry.MalformedRegDataContainer"), plibEnv);
                                contents = (LPBYTE) env->GetByteArrayElements( 
jBin, &isCopy );
                                length  = (DWORD) env->GetArrayLength( jBin );
                                break;
                        case REG_MULTI_SZ:
                                if( (mid = env->GetMethodID( clazz, 
"getMultiStringData", "()[Ljava/lang/String;" ) ) == NULL )
-                                       
ERROR_BREAK("registry.MalformedRegDataContainer", plibEnv);
+                                       
ERROR_BREAK(_T("registry.MalformedRegDataContainer"), plibEnv);
                                if( (jObj = (jobjectArray) 
env->CallObjectMethod( jContents, mid)) == NULL )
-                                       
ERROR_BREAK("registry.MalformedRegDataContainer", plibEnv);
+                                       
ERROR_BREAK(_T("registry.MalformedRegDataContainer"), plibEnv);
                                multiSize = env->GetArrayLength( jObj );
                                LPBYTE pos;
                                jMultiStr = new jstring[multiSize];
-                               intermedMulti = new const char *[multiSize];
-                               length = 2;
+                               intermedMulti = new const TCHAR *[multiSize];
+                               length = 2 ;
                                for( i = 0; i < multiSize; ++i )
                                {
                                        jMultiStr[i] = (jstring) 
env->GetObjectArrayElement( jObj, i );
-                                       intermedMulti[i] = 
env->GetStringUTFChars( jMultiStr[i], 0);
-                                       length += strlen( intermedMulti[i] ) + 
1;
+                                       intermedMulti[i] = 
env->GET_STRING_CHARS( jMultiStr[i], 0);
+                                       length += _tcslen( intermedMulti[i] ) + 
1 ;
                                }
-                               pos = contents = (LPBYTE) new char[length];
+                               pos = contents = (LPBYTE) new TCHAR[length];
                                int monoLength; 
                                for( i = 0; i < multiSize; ++i )
                                {
-                                       monoLength = strlen(intermedMulti[i] ) 
+ 1;
+                                       monoLength = (_tcslen(intermedMulti[i] 
) + 1) * sizeof(TCHAR);
                                        memcpy( pos, intermedMulti[i], 
monoLength);
                                        pos += monoLength;
                                }
                                *pos++  = 0;
                                *pos    = 0;
+                               length *= sizeof(TCHAR);
 
                                break;
                        default:
-                               ERROR_BREAK("registry.DataTypeNotSupported", 
plibEnv);
+                               
ERROR_BREAK(_T("registry.DataTypeNotSupported"), plibEnv);
 
                        }
                        if( ! libEnv.good() )   // Today not necessary, but may 
be someone add a line ...
@@ -187,7 +189,7 @@
                        setRegValue(plibEnv, jRoot, key, value, type, contents, 
length );
 
                if( buf )
-                       env->ReleaseStringUTFChars( jStr, buf);
+                       env->RELEASE_STRING_CHARS( jStr, buf);
                if( jBin )
                {
                        env->ReleaseByteArrayElements( jBin, (jbyte *) 
contents, JNI_ABORT  );
@@ -196,7 +198,7 @@
                {
                        for( i = 0; i < multiSize; ++i )
                        {
-                               env->ReleaseStringUTFChars(jMultiStr[i], 
intermedMulti[i]);
+                               env->RELEASE_STRING_CHARS(jMultiStr[i], 
intermedMulti[i]);
                                env->DeleteLocalRef( jMultiStr[i] );
                        }
                        delete [] jMultiStr;
@@ -204,8 +206,8 @@
                        delete contents;
 
                }
-               env->ReleaseStringUTFChars( jKey, key);
-               env->ReleaseStringUTFChars( jValue, value);
+               env->RELEASE_STRING_CHARS( jKey, key);
+               env->RELEASE_STRING_CHARS( jValue, value);
        }
        libEnv.verifyAndThrowAtError();
        return;
@@ -224,11 +226,11 @@
        jint  retval = 0;
        if( libEnv.verifyNullObjects(jKey, jValue ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
-               const char *value = env->GetStringUTFChars( jValue , 0);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
+               const TCHAR *value = env->GET_STRING_CHARS( jValue , 0);
                retval = getRegValueType(&libEnv,  jRoot, key, value );
-               env->ReleaseStringUTFChars( jKey, key);
-               env->ReleaseStringUTFChars( jValue, value);
+               env->RELEASE_STRING_CHARS( jKey, key);
+               env->RELEASE_STRING_CHARS( jValue, value);
        }
        libEnv.verifyAndThrowAtError();
        return( retval );
@@ -249,8 +251,8 @@
        jobject retval = NULL;
        if( libEnv.verifyNullObjects(jKey, jValue ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
-               const char *value = env->GetStringUTFChars( jValue , 0);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
+               const TCHAR *value = env->GET_STRING_CHARS( jValue , 0);
                DWORD type;
                DWORD length;
 
@@ -261,11 +263,11 @@
                        jmethodID       mid = NULL;
                        jclass          clazz = NULL;
                        if( (clazz = 
env->FindClass("com/coi/tools/os/win/RegDataContainer") ) == NULL )
-                               ERROR_BREAK("registry.MissingRegDataContainer", 
plibEnv);
+                               
ERROR_BREAK(_T("registry.MissingRegDataContainer"), plibEnv);
                        if( strlen( TYPE_INIT_SIGNATURE_TABLE[type] ) < 1 )
-                               ERROR_BREAK("registry.UnsupportedDataType", 
plibEnv);
+                               ERROR_BREAK(_T("registry.UnsupportedDataType"), 
plibEnv);
                        if( (mid = env->GetMethodID( clazz, "<init>", 
TYPE_INIT_SIGNATURE_TABLE[type]  ) ) == NULL )
-                               
ERROR_BREAK("registry.MalformedRegDataContainer", plibEnv);
+                               
ERROR_BREAK(_T("registry.MalformedRegDataContainer"), plibEnv);
 
                        switch( type )
                        {
@@ -277,7 +279,7 @@
                                break;
                        case REG_SZ:
                        case REG_EXPAND_SZ:
-                               retval = env->NewObject( clazz, mid,  
env->NewStringUTF( (char *) winData) ); 
+                               retval = env->NewObject( clazz, mid,  
env->NEW_STRING( (TCHAR *) winData) ); 
                                break;
                        case REG_BINARY:
                                {
@@ -288,22 +290,22 @@
                                break;
                        case REG_MULTI_SZ:
                                {
-                                       char *pos = (char *) winData;
+                                       TCHAR *pos = (TCHAR *) winData;
                                        int count = 0;
                                        jclass  claString;
                                        while( *pos )
                                        {
                                                count++;
-                                               pos += strlen(pos) + 1;
+                                               pos += _tcslen(pos) + 1;
                                        }
                                        if( (claString = 
env->FindClass("java/lang/String") ) == NULL )
-                                               
ERROR_BREAK("registry.StringClassNotFound", plibEnv);
+                                               
ERROR_BREAK(_T("registry.StringClassNotFound"), plibEnv);
                                        jobjectArray joa = env->NewObjectArray( 
count, claString, 0 );
-                                       pos = (char *) winData;
+                                       pos = (TCHAR *) winData;
                                        for( int i = 0; i < count; ++i )
                                        {
-                                               env->SetObjectArrayElement( 
joa, i, env->NewStringUTF( pos ) );
-                                               pos += strlen(pos) + 1;
+                                               env->SetObjectArrayElement( 
joa, i, env->NEW_STRING( pos ) );
+                                               pos += _tcslen(pos) + 1;
                                        }
                                        retval = env->NewObject( clazz, mid,  
joa ); 
                                }
@@ -315,8 +317,8 @@
                }
                if( winData )
                        delete [] winData;
-               env->ReleaseStringUTFChars( jKey, key);
-               env->ReleaseStringUTFChars( jValue, value);
+               env->RELEASE_STRING_CHARS( jKey, key);
+               env->RELEASE_STRING_CHARS( jValue, value);
        }
        libEnv.verifyAndThrowAtError();
        return( retval );
@@ -334,11 +336,11 @@
        WinLibEnv libEnv( env, obj );
        if( libEnv.verifyNullObjects(jKey, jValue ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
-               const char *value = env->GetStringUTFChars( jValue , 0);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
+               const TCHAR *value = env->GET_STRING_CHARS( jValue , 0);
                deleteRegValue(&libEnv,  jRoot, key, value );
-               env->ReleaseStringUTFChars( jKey, key);
-               env->ReleaseStringUTFChars( jValue, value);
+               env->RELEASE_STRING_CHARS( jKey, key);
+               env->RELEASE_STRING_CHARS( jValue, value);
        }
        libEnv.verifyAndThrowAtError();
 }
@@ -356,10 +358,10 @@
        WinLibEnv libEnv( env, obj );
        if( libEnv.verifyNullObjects(jKey ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
 
                deleteRegKey(&libEnv,  jRoot, key );
-               env->ReleaseStringUTFChars( jKey, key);
+               env->RELEASE_STRING_CHARS( jKey, key);
        }
        libEnv.verifyAndThrowAtError();
 }
@@ -378,10 +380,10 @@
        jboolean retval = false;
        if( libEnv.verifyNullObjects(jKey ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
 
                retval = isKeyEmpty(&libEnv,  jRoot, key );
-               env->ReleaseStringUTFChars( jKey, key);
+               env->RELEASE_STRING_CHARS( jKey, key);
        }
        libEnv.verifyAndThrowAtError();
        return( retval );
@@ -400,11 +402,11 @@
        DWORD   subkeys = 0;
        if( libEnv.verifyNullObjects(jKey ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
                DWORD   values = 1;
 
                determineCounts(&libEnv,  jRoot, key, &subkeys, &values  );
-               env->ReleaseStringUTFChars( jKey, key);
+               env->RELEASE_STRING_CHARS( jKey, key);
        }
        libEnv.verifyAndThrowAtError();
        return( subkeys );
@@ -423,11 +425,11 @@
        DWORD   values = 0;
        if( libEnv.verifyNullObjects(jKey ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
                DWORD   subkeys = 1;
 
                determineCounts(&libEnv,  jRoot, key, &subkeys, &values  );
-               env->ReleaseStringUTFChars( jKey, key);
+               env->RELEASE_STRING_CHARS( jKey, key);
        }
        libEnv.verifyAndThrowAtError();
        return( values );
@@ -447,12 +449,12 @@
        WinLibEnv libEnv( env, obj );
        if( libEnv.verifyNullObjects(jKey ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
-               char *name = getSubkeyName(&libEnv,  jRoot, key, jKeyId  );
-               env->ReleaseStringUTFChars( jKey, key);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
+               TCHAR *name = getSubkeyName(&libEnv,  jRoot, key, jKeyId  );
+               env->RELEASE_STRING_CHARS( jKey, key);
                libEnv.verifyAndThrowAtError();
                if( libEnv.good() )     
-                       retval = env->NewStringUTF( name );
+                       retval = env->NEW_STRING( name );
                if( name )
                        delete [] name;
        }
@@ -474,12 +476,12 @@
        WinLibEnv libEnv( env, obj );
        if( libEnv.verifyNullObjects(jKey ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
-               char *name = getValueName(&libEnv,  jRoot, key, jKeyId  );
-               env->ReleaseStringUTFChars( jKey, key);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
+               TCHAR *name = getValueName(&libEnv,  jRoot, key, jKeyId  );
+               env->RELEASE_STRING_CHARS( jKey, key);
                libEnv.verifyAndThrowAtError();
                if( libEnv.good() )     
-                       retval = env->NewStringUTF( name );
+                       retval = env->NEW_STRING( name );
                if( name )
                        delete [] name;
        }
@@ -502,9 +504,9 @@
        jobjectArray  newArr = NULL;
        if( libEnv.verifyNullObjects(jKey ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
                jclass clazz;
-               char **names;
+               TCHAR **names;
                LONG length = 0;
                jstring utf_str;
                int i;
@@ -514,7 +516,7 @@
                        newArr = env->NewObjectArray( length, clazz, NULL);
                        for( i = 0; i < length; ++i )
                        {
-                               utf_str = env->NewStringUTF( names[i] );
+                               utf_str = env->NEW_STRING( names[i] );
                                env->SetObjectArrayElement( newArr, i, utf_str);
                                env->DeleteLocalRef( utf_str );
                                delete [] names[i];
@@ -524,7 +526,7 @@
                        delete [] names;
                        //LocalFree( groups );
                }
-               env->ReleaseStringUTFChars( jKey, key);
+               env->RELEASE_STRING_CHARS( jKey, key);
        }
        libEnv.verifyAndThrowAtError();
        if( libEnv.good() )     
@@ -546,9 +548,9 @@
        jobjectArray  newArr = NULL;
        if( libEnv.verifyNullObjects(jKey ))
        {
-               const char *key = env->GetStringUTFChars( jKey , 0);
+               const TCHAR *key = env->GET_STRING_CHARS( jKey , 0);
                jclass clazz;
-               char **names;
+               TCHAR **names;
                LONG length = 0;
                jstring utf_str;
                int i;
@@ -558,7 +560,7 @@
                        newArr = env->NewObjectArray( length, clazz, NULL);
                        for( i = 0; i < length; ++i )
                        {
-                               utf_str = env->NewStringUTF( names[i] );
+                               utf_str = env->NEW_STRING( names[i] );
                                env->SetObjectArrayElement( newArr, i, utf_str);
                                env->DeleteLocalRef( utf_str );
                                delete [] names[i];
@@ -568,7 +570,7 @@
                        delete [] names;
                        //LocalFree( groups );
                }
-               env->ReleaseStringUTFChars( jKey, key);
+               env->RELEASE_STRING_CHARS( jKey, key);
        }
        libEnv.verifyAndThrowAtError();
        if( libEnv.good() )     

Index: RegistryInternal.cxx
===================================================================
RCS file: 
/cvsroot/izpack/izpack-src/src/native/win/COIOSHelper/RegistryInternal.cxx,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- RegistryInternal.cxx        6 May 2005 20:09:12 -0000       1.2
+++ RegistryInternal.cxx        2 Sep 2005 10:51:36 -0000       1.3
@@ -19,6 +19,7 @@
  * limitations under the License.
  */
 
+#include "UnicodeHelper.h"
 #include <windows.h>
 #include "COIOSHelper.h"
 
@@ -26,12 +27,12 @@
 // A "lookup table" to  get root names for error handling.
 //----------------------------------------------------------------//
 
-static char *HKEY_LOOKUP[] =
+static TCHAR *HKEY_LOOKUP[] =
 {
-       "HKEY_CLASSES_ROOT","HKEY_CURRENT_USER",
-       "HKEY_LOCAL_MACHINE","HKEY_USERS",
-       "HKEY_PERFORMANCE_DATA","HKEY_CURRENT_CONFIG",
-       "HKEY_DYN_DATA", "UNDEFINED"
+       _T("HKEY_CLASSES_ROOT"),_T("HKEY_CURRENT_USER"),
+       _T("HKEY_LOCAL_MACHINE"),_T("HKEY_USERS"),
+       _T("HKEY_PERFORMANCE_DATA"),_T("HKEY_CURRENT_CONFIG"),
+       _T("HKEY_DYN_DATA"),_T("UNDEFINED")
 };
 
 
@@ -49,7 +50,7 @@
  * @param key      - the registry key which should be used
  */
 
-jboolean regKeyExist(WinLibEnv *libEnv, int root, const char *key )
+jboolean regKeyExist(WinLibEnv *libEnv, int root, const TCHAR *key )
 {
        HKEY    hKey = 0;
        bool    ok = false;
@@ -69,7 +70,7 @@
  * @param key      - the registry key which should be used
  */
 
-jboolean isKeyEmpty(WinLibEnv *libEnv, int root, const char *key )
+jboolean isKeyEmpty(WinLibEnv *libEnv, int root, const TCHAR *key )
 {
        HKEY    hKey = 0;
        DWORD   subkeys = 1;
@@ -89,17 +90,17 @@
  * @param values   - [out] number of values
  */
 
-void determineCounts( WinLibEnv *libEnv, int root, const char *key, DWORD 
*subkeys, DWORD *values )
+void determineCounts( WinLibEnv *libEnv, int root, const TCHAR *key, DWORD 
*subkeys, DWORD *values )
 {
        HKEY    hKey = 0;
        LONG    retval;
        while(1)
        {
                if( (retval = RegOpenKeyEx( (HKEY) root, key, 0, 
KEY_QUERY_VALUE ,  &hKey)) != ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegOpenKeyEx", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegOpenKeyEx"), 
Root2Char(root) , key, libEnv,retval );
        if( hKey && (retval = RegQueryInfoKey( hKey, NULL, NULL, NULL, 
                subkeys, NULL, NULL, values, NULL, NULL, NULL, NULL )) != 
ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegQueryInfoKey", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegQueryInfoKey"), 
Root2Char(root) , key, libEnv,retval );
                break;
        }
        if( hKey )
@@ -118,7 +119,7 @@
  * @param contents - the data which should be set
  * @param length   - length of buffer contents
  */
-void setRegValue(WinLibEnv *libEnv, int root, const char *key, const char 
*value, jint type, LPBYTE contents, jint length )
+void setRegValue(WinLibEnv *libEnv, int root, const TCHAR *key, const TCHAR 
*value, jint type, LPBYTE contents, jint length )
 {
        HKEY    hKey = 0;
        LONG    retval;
@@ -126,9 +127,9 @@
        while(1)
        {
                if( (retval = RegOpenKeyEx( (HKEY) root, key, 0, KEY_SET_VALUE 
,  &hKey)) != ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegOpenKeyEx", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegOpenKeyEx"), 
Root2Char(root) , key, libEnv,retval );
                if( hKey && (retval = RegSetValueEx( hKey, value, 0, type, 
contents, length )) != ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A3( "functionFailed.RegSetValueEx", 
Root2Char(root) , key, value, libEnv,retval );
+               ERROR_BREAK_CODE_A3( _T("functionFailed.RegSetValueEx"), 
Root2Char(root) , key, value, libEnv,retval );
                break;
        }
        if( hKey )
@@ -145,7 +146,7 @@
  * @param root    - key for the registry root e.g. HKEY_LOCAL_MACHINE
  * @param key      - the registry key which should be used
  */
-void createRegKey(WinLibEnv *libEnv, int root, const char *key )
+void createRegKey(WinLibEnv *libEnv, int root, const TCHAR *key )
 {
        HKEY    hKey = 0;
        DWORD   disposition;
@@ -153,10 +154,10 @@
        while(1)
        {
                if( (retval = RegOpenKeyEx( (HKEY) root, key, 0, KEY_WRITE,  
&hKey)) == ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "registry.KeyExist", Root2Char(root) , 
key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("registry.KeyExist"), Root2Char(root) , 
key, libEnv,retval );
                if( (retval = RegCreateKeyEx((HKEY) root, key, 0,NULL, 
REG_OPTION_NON_VOLATILE, 
                        KEY_ALL_ACCESS, NULL, &hKey, &disposition)) != 
ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegCreateKeyEx", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegCreateKeyEx"), 
Root2Char(root) , key, libEnv,retval );
                break;
        }
        if( hKey )
@@ -172,19 +173,19 @@
  * @param root    - key for the registry root e.g. HKEY_LOCAL_MACHINE
  * @param key      - the registry key which should be deleted
  */
-void deleteRegKey(WinLibEnv *libEnv, int root, const char *key )
+void deleteRegKey(WinLibEnv *libEnv, int root, const TCHAR *key )
 {
        HKEY    hKey = 0;
        LONG    retval;
-       char    *keycopy = new char[ strlen( key ) + 1];
-       char    *pos;
-       char    *subPos;
+       TCHAR   *keycopy = new TCHAR[ _tcslen( key ) + 1];
+       TCHAR   *pos;
+       TCHAR   *subPos;
        while(1)
        {
                if( ! keycopy )
-                       ERROR_BREAK_VAR( "", libEnv , "OutOfMemoryError");
+                       ERROR_BREAK_VAR( _T(""), libEnv , "OutOfMemoryError");
        // Determine rootkey and subkey.
-       strcpy( keycopy, key ); // Because it is const ...
+       _tcscpy( keycopy, key );        // Because it is const ...
        for( pos = keycopy; *pos; ++pos )
                if( *pos == '\\' )
                        subPos = pos;
@@ -193,9 +194,9 @@
        subPos++;
                if( (retval = RegOpenKeyEx( (HKEY) root, keycopy, 0, DELETE,  
&hKey)) != ERROR_SUCCESS )
                        // Not found or no rights for delete.
-               ERROR_BREAK_CODE_A2( "functionFailed.RegOpenKeyEx", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegOpenKeyEx"), 
Root2Char(root) , key, libEnv,retval );
                if( (retval = RegDeleteKey(hKey, subPos)) != ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegDeleteKey", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegDeleteKey"), 
Root2Char(root) , key, libEnv,retval );
                break;
        }
        if( hKey )
@@ -214,7 +215,7 @@
  * @param key      - the registry key 
  * @param key      - value which should be deleted
  */
-void deleteRegValue(WinLibEnv *libEnv, int root, const char *key, const char 
*value )
+void deleteRegValue(WinLibEnv *libEnv, int root, const TCHAR *key, const TCHAR 
*value )
 {
        HKEY    hKey = 0;
        LONG    retval;
@@ -222,9 +223,9 @@
        {
                if( (retval = RegOpenKeyEx( (HKEY) root, key, 0, KEY_SET_VALUE 
,  &hKey)) != ERROR_SUCCESS )
                        // Not found or no rights for delete.
-               ERROR_BREAK_CODE_A2( "functionFailed.RegOpenKeyEx", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegOpenKeyEx"), 
Root2Char(root) , key, libEnv,retval );
                if( (retval = RegDeleteValue(hKey, value)) != ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A3( "functionFailed.RegDeleteValue", 
Root2Char(root) , key, value, libEnv,retval );
+               ERROR_BREAK_CODE_A3( _T("functionFailed.RegDeleteValue"), 
Root2Char(root) , key, value, libEnv,retval );
                break;
        }
        if( hKey )
@@ -240,7 +241,7 @@
  * @param value    - the registry value which should be used
  */
 
-jint getRegValueType( WinLibEnv *libEnv, int root, const char *key , const 
char *value )
+jint getRegValueType( WinLibEnv *libEnv, int root, const TCHAR *key , const 
TCHAR *value )
 {
        HKEY    hKey = 0;
        DWORD   type = 0;
@@ -249,10 +250,10 @@
        while(1)
        {
                if( (retval =  RegOpenKeyEx( (HKEY) root, key, 0, KEY_READ,  
&hKey) ) != ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegOpenKeyEx", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegOpenKeyEx"), 
Root2Char(root) , key, libEnv,retval );
                if( ( retval = RegQueryValueEx( hKey, value, 0, &type, 0, 
&length )) != ERROR_SUCCESS &&
                        retval != ERROR_MORE_DATA)
-               ERROR_BREAK_CODE_A3( "functionFailed.RegQueryValueEx", 
Root2Char(root) , key, value, libEnv,retval );
+               ERROR_BREAK_CODE_A3( _T("functionFailed.RegQueryValueEx"), 
Root2Char(root) , key, value, libEnv,retval );
        }
        if( hKey )
                RegCloseKey( hKey );
@@ -270,7 +271,7 @@
  * @param type     - [out] type of data
  */
 
-LPBYTE getRegValue( WinLibEnv *libEnv, int root, const char *key , const char 
*value, DWORD *type, DWORD *length)
+LPBYTE getRegValue( WinLibEnv *libEnv, int root, const TCHAR *key , const 
TCHAR *value, DWORD *type, DWORD *length)
 {
        HKEY    hKey = 0;
        LPBYTE  contents = NULL;
@@ -278,14 +279,14 @@
        while(1)
        {
                if( (retval =  RegOpenKeyEx( (HKEY) root, key, 0, KEY_READ,  
&hKey) ) != ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegOpenKeyEx", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegOpenKeyEx"), 
Root2Char(root) , key, libEnv,retval );
                if( ( retval = RegQueryValueEx( hKey, value, 0, type, 0, length 
)) != ERROR_SUCCESS &&
                        retval != ERROR_MORE_DATA)
-               ERROR_BREAK_CODE_A3( "functionFailed.RegQueryValueEx", 
Root2Char(root) , key, value, libEnv,retval );
+               ERROR_BREAK_CODE_A3( _T("functionFailed.RegQueryValueEx"), 
Root2Char(root) , key, value, libEnv,retval );
                if( ( contents = new unsigned char[ (int) *length + 1 ] ) == 
NULL )
-                       ERROR_BREAK_VAR( "", libEnv , "OutOfMemoryError");
+                       ERROR_BREAK_VAR( _T(""), libEnv , "OutOfMemoryError");
                if( ( retval = RegQueryValueEx( hKey, value, 0, type, (LPBYTE) 
contents, length )) != ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A3( "functionFailed.RegQueryValueEx", 
Root2Char(root) , key, value, libEnv,retval );
+               ERROR_BREAK_CODE_A3( _T("functionFailed.RegQueryValueEx"), 
Root2Char(root) , key, value, libEnv,retval );
                break;
        }
        if( hKey )
@@ -302,25 +303,25 @@
  * @param key      - the registry key which should be used
  * @param keyId    - id of the key for which the name should be returned
  */
-char *getSubkeyName( WinLibEnv *libEnv, int root, const char *key , int keyId )
+TCHAR *getSubkeyName( WinLibEnv *libEnv, int root, const TCHAR *key , int 
keyId )
 {
        HKEY    hKey = 0;
        LONG    retval;
        DWORD   length = 0;
-       char    *name = NULL;
+       TCHAR   *name = NULL;
        while(1)
        {
                if( (retval = RegOpenKeyEx( (HKEY) root, key, 0, 
KEY_ENUMERATE_SUB_KEYS,  &hKey)) != ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegOpenKeyEx", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegOpenKeyEx"), 
Root2Char(root) , key, libEnv,retval );
        if( hKey && (retval = RegEnumKeyEx( hKey, keyId, NULL, &length, 
                NULL, NULL, NULL, NULL )) != ERROR_SUCCESS && retval != 
ERROR_MORE_DATA)
-                       ERROR_BREAK_CODE_A2( "functionFailed.RegEnumKeyEx", 
Root2Char(root) , key, libEnv,retval );
+                       ERROR_BREAK_CODE_A2( _T("functionFailed.RegEnumKeyEx"), 
Root2Char(root) , key, libEnv,retval );
        length++;
-       if(( name = new char[ length]) == NULL )
-               ERROR_BREAK_VAR( "", libEnv , "OutOfMemoryError");
+       if(( name = new TCHAR[ length]) == NULL )
+               ERROR_BREAK_VAR( _T(""), libEnv , "OutOfMemoryError");
        if( hKey && (retval = RegEnumKeyEx( hKey, keyId, name, &length, 
                NULL, NULL, NULL, NULL )) != ERROR_SUCCESS )
-                       ERROR_BREAK_CODE_A2( "functionFailed.RegEnumKeyEx", 
Root2Char(root) , key, libEnv,retval );
+                       ERROR_BREAK_CODE_A2( _T("functionFailed.RegEnumKeyEx"), 
Root2Char(root) , key, libEnv,retval );
        
                break;
        }
@@ -337,7 +338,7 @@
  * @param key      - the registry key which should be used
  * @param names    - [out] the founded names
  */
-int getSubkeyNames( WinLibEnv *libEnv, int root, const char *key , char 
***names )
+int getSubkeyNames( WinLibEnv *libEnv, int root, const TCHAR *key , TCHAR 
***names )
 {
        HKEY    hKey = 0;
        LONG    retval;
@@ -348,21 +349,21 @@
        while(1)
        {
                if( (retval = RegOpenKeyEx( (HKEY) root, key, 0, 
KEY_QUERY_VALUE |  KEY_ENUMERATE_SUB_KEYS,  &hKey)) != ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegOpenKeyEx", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegOpenKeyEx"), 
Root2Char(root) , key, libEnv,retval );
        if( hKey && (retval = RegQueryInfoKey( hKey, NULL, NULL, NULL, 
                &subkeys, &maxLength, NULL, &values, NULL, NULL, NULL, NULL )) 
!= ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegQueryInfoKey", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegQueryInfoKey"), 
Root2Char(root) , key, libEnv,retval );
        maxLength++;
-               if (((*names)= new char *[subkeys])==NULL)
-                       ERROR_BREAK_VAR( "", libEnv , "OutOfMemoryError");
+               if (((*names)= new TCHAR *[subkeys])==NULL)
+                       ERROR_BREAK_VAR( _T(""), libEnv , "OutOfMemoryError");
                for( DWORD i = 0; i < subkeys; ++i )
                {
-                       if (((*names)[i]= new char [maxLength])==NULL)
-                               ERROR_BREAK_VAR( "", libEnv , 
"OutOfMemoryError");
+                       if (((*names)[i]= new TCHAR [maxLength])==NULL)
+                               ERROR_BREAK_VAR( _T(""), libEnv , 
"OutOfMemoryError");
                        length = maxLength;
                        if( hKey && (retval = RegEnumKeyEx( hKey, i, 
(*names)[i], &length, 
                                NULL, NULL, NULL, NULL )) != ERROR_SUCCESS )
-                               ERROR_BREAK_CODE_A2( 
"functionFailed.RegEnumKeyEx", Root2Char(root) , key, libEnv,retval );
+                               ERROR_BREAK_CODE_A2( 
_T("functionFailed.RegEnumKeyEx"), Root2Char(root) , key, libEnv,retval );
                }
        if( ! libEnv->good() )
                break;
@@ -381,27 +382,26 @@
  * @param key      - the registry key which should be used
  * @param valueId  - id of the value for which the name should be returned
  */
-char *getValueName( WinLibEnv *libEnv, int root, const char *key , int valueId 
)
+TCHAR *getValueName( WinLibEnv *libEnv, int root, const TCHAR *key , int 
valueId )
 {
        HKEY    hKey = 0;
        LONG    retval;
        DWORD   length = 0;
-       char    *name = NULL;
+       TCHAR   *name = NULL;
        while(1)
        {
                if( (retval = RegOpenKeyEx( (HKEY) root, key, 0, 
KEY_ENUMERATE_SUB_KEYS,  &hKey)) != ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegOpenKeyEx", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegOpenKeyEx"), 
Root2Char(root) , key, libEnv,retval );
        if( hKey && (retval = RegEnumValue( hKey, valueId, NULL, &length, 
                NULL, NULL, NULL, NULL )) != ERROR_SUCCESS && retval != 
ERROR_MORE_DATA)
-                       ERROR_BREAK_CODE_A2( "functionFailed.RegEnumValue", 
Root2Char(root) , key, libEnv,retval );
+                       ERROR_BREAK_CODE_A2( _T("functionFailed.RegEnumValue"), 
Root2Char(root) , key, libEnv,retval );
        length++;
-       if(( name = new char[ length]) == NULL )
-               ERROR_BREAK_VAR( "", libEnv , "OutOfMemoryError");
+       if(( name = new TCHAR[ length]) == NULL )
+               ERROR_BREAK_VAR( _T(""), libEnv , "OutOfMemoryError");
 
        if( hKey && (retval = RegEnumValue( hKey, valueId, name, &length, 
                NULL, NULL, NULL, NULL )) != ERROR_SUCCESS )
-                       ERROR_BREAK_CODE( "functionFailed.RegEnumValue", 
libEnv,retval );
-                               ERROR_BREAK_CODE_A2( 
"functionFailed.RegEnumValue", Root2Char(root) , key, libEnv,retval );
+                       ERROR_BREAK_CODE_A2( _T("functionFailed.RegEnumValue"), 
Root2Char(root) , key, libEnv,retval );
        
                break;
        }
@@ -418,7 +418,7 @@
  * @param key      - the registry key which should be used
  * @param names    - [out] the founded names
  */
-int getValueNames( WinLibEnv *libEnv, int root, const char *key , char 
***names  )
+int getValueNames( WinLibEnv *libEnv, int root, const TCHAR *key , TCHAR 
***names  )
 {
        HKEY    hKey = 0;
        LONG    retval;
@@ -429,21 +429,21 @@
        while(1)
        {
                if( (retval = RegOpenKeyEx( (HKEY) root, key, 0, 
KEY_QUERY_VALUE |  KEY_ENUMERATE_SUB_KEYS,  &hKey)) != ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegOpenKeyEx", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegOpenKeyEx"), 
Root2Char(root) , key, libEnv,retval );
        if( hKey && (retval = RegQueryInfoKey( hKey, NULL, NULL, NULL, 
                &subkeys, NULL, NULL, &values, &maxLength, NULL, NULL, NULL )) 
!= ERROR_SUCCESS )
-               ERROR_BREAK_CODE_A2( "functionFailed.RegQueryInfoKey", 
Root2Char(root) , key, libEnv,retval );
+               ERROR_BREAK_CODE_A2( _T("functionFailed.RegQueryInfoKey"), 
Root2Char(root) , key, libEnv,retval );
        maxLength++;
-               if (((*names)= new char *[values])==NULL)
-                       ERROR_BREAK_VAR( "", libEnv , "OutOfMemoryError");
+               if (((*names)= new TCHAR *[values])==NULL)
+                       ERROR_BREAK_VAR( _T(""), libEnv , "OutOfMemoryError");
                for( DWORD i = 0; i < values; ++i )
                {
-                       if (((*names)[i]= new char [maxLength])==NULL)
-                               ERROR_BREAK_VAR( "", libEnv , 
"OutOfMemoryError");
+                       if (((*names)[i]= new TCHAR [maxLength])==NULL)
+                               ERROR_BREAK_VAR( _T(""), libEnv , 
"OutOfMemoryError");
                        length = maxLength;
                        if( hKey && (retval = RegEnumValue( hKey, i, 
(*names)[i], &length, 
                                NULL, NULL, NULL, NULL )) != ERROR_SUCCESS )
-                               ERROR_BREAK_CODE_A2( 
"functionFailed.RegEnumValue", Root2Char(root) , key, libEnv,retval );
+                               ERROR_BREAK_CODE_A2( 
_T("functionFailed.RegEnumValue"), Root2Char(root) , key, libEnv,retval );
                }
        if( ! libEnv->good() )
                break;

Index: WinLibEnv.cxx
===================================================================
RCS file: /cvsroot/izpack/izpack-src/src/native/win/COIOSHelper/WinLibEnv.cxx,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- WinLibEnv.cxx       6 May 2005 20:09:12 -0000       1.2
+++ WinLibEnv.cxx       2 Sep 2005 10:51:36 -0000       1.3
@@ -20,6 +20,7 @@
  */
 
 
+#include "UnicodeHelper.h"
 #include "jni.h"
 #include <windows.h>
 #include "WinLibEnv.h"
@@ -117,15 +118,15 @@
                ret->setError( winLibErrorText, exceptionTypeName);
        if( win32ErrorText )
        {
-               ret->win32ErrorText = new char[ strlen(win32ErrorText) + 2];
-               strcpy( ret->win32ErrorText,win32ErrorText );
+               ret->win32ErrorText = new TCHAR[ _tcslen(win32ErrorText) + 2];
+               _tcscpy( ret->win32ErrorText,win32ErrorText );
        }
        for( int i = 0; i < STD_ARRAY_LENGTH; ++i)
        {
                if(  args[i] )
                {
-                       ret->args[i] = new char[ strlen(args[i]) + 2];
-                       strcpy( ret->args[i], args[i] );
+                       ret->args[i] = new TCHAR[ _tcslen(args[i]) + 2];
+                       _tcscpy( ret->args[i], args[i] );
                }
        }
        return( ret);
@@ -148,8 +149,8 @@
                winLibErrorText = NULL;
        if( from->win32ErrorText )
        {
-               win32ErrorText = new char[ strlen(from->win32ErrorText) + 2];
-               strcpy( win32ErrorText,from->win32ErrorText );
+               win32ErrorText = new TCHAR[ _tcslen(from->win32ErrorText) + 2];
+               _tcscpy( win32ErrorText,from->win32ErrorText );
        }
        else
                win32ErrorText = NULL;
@@ -157,8 +158,8 @@
        {
                if(  from->args[i] )
                {
-                       args[i] = new char[ strlen(from->args[i]) + 2];
-                       strcpy( args[i], from->args[i] );
+                       args[i] = new TCHAR[ _tcslen(from->args[i]) + 2];
+                       _tcscpy( args[i], from->args[i] );
                }
        }
 }
@@ -167,14 +168,14 @@
 // Sets an error. Previos existent string will be deleted.
 // The given messages will be copied.
 // --------------------------------------------------------------------------
-void WinLibEnv::setError( char *err, char *errType )
+void WinLibEnv::setError( TCHAR *err, char *errType )
 {
        status = WLES_ERROR;
        exceptionTypeName = errType;
        if( winLibErrorText )
                delete [] winLibErrorText;
-       winLibErrorText = new char[ strlen(err) + 2];
-       strcpy( winLibErrorText, err );
+       winLibErrorText = new TCHAR[ _tcslen(err) + 2];
+       _tcscpy( winLibErrorText, err );
 
 }
 
@@ -182,12 +183,12 @@
 // Adds a copy of the given string into the internal argument array.
 // Only 16 arguments are supported, more will be ignored.
 // --------------------------------------------------------------------------
-void WinLibEnv::addArg( const char *arg )
+void WinLibEnv::addArg( const TCHAR *arg )
 {
        if( currentArg > STD_ARRAY_LENGTH || ! arg)
                return;
-       args[currentArg] = new char[ strlen(arg) + 2];
-       strcpy( args[currentArg++], arg );
+       args[currentArg] = new TCHAR[ _tcslen(arg) + 2];
+       _tcscpy( args[currentArg++], arg );
 }
 
 
@@ -214,8 +215,8 @@
        }
        if( win32ErrorText )
                delete [] win32ErrorText;
-       win32ErrorText = new char[ strlen((LPTSTR) lpMsgBuf) + 2];
-       strcpy( win32ErrorText, (LPTSTR) lpMsgBuf );
+       win32ErrorText = new TCHAR[ _tcslen((LPTSTR) lpMsgBuf) + 2];
+       _tcscpy( win32ErrorText, (LPTSTR) lpMsgBuf );
        // Free the buffer.
        LocalFree( lpMsgBuf );  
        
@@ -230,7 +231,7 @@
 {
        if( obj1 == NULL || obj2 == NULL || obj3 == NULL || obj4 == NULL )
        {
-               setError( "", "NullPointerException" );
+               setError( _T(""), "NullPointerException" );
                return( false );
        }
        return( true );
@@ -271,9 +272,9 @@
                        break;
                // 4. Transform given error messages to Java.
                if( winLibErrorText )
-                       jliberr = jniEnv->NewStringUTF( winLibErrorText );
+                       jliberr = jniEnv->NEW_STRING( winLibErrorText );
                else
-                       jliberr = jniEnv->NewStringUTF( "" );
+                       jliberr = jniEnv->NEW_STRING( _T("") );
                // 5. Handle exception dependant to the type id. Create throw 
object.
                // This is the place to add more different exceptions. It is 
not necessary
                // to define a different type id for every exception, else only 
for one which has
@@ -297,7 +298,7 @@
                                if( win32Error )
                                        getOSMessage();
                                if( win32ErrorText )
-                                       jwin32 = jniEnv->NewStringUTF( 
win32ErrorText );
+                                       jwin32 = jniEnv->NEW_STRING( 
win32ErrorText );
                                throwObj = (jthrowable) jniEnv->NewObject( 
clazz, mid, winLibError, 
                                        win32Error, jliberr, jwin32 );
                                // Set additional arguments to the throw object 
if exist.
@@ -305,7 +306,7 @@
                                for( int i = 0; i < currentArg; ++i )
                                {
                                        if( args[i] )
-                                               jarg = jniEnv->NewStringUTF( 
args[i] );
+                                               jarg = jniEnv->NEW_STRING( 
args[i] );
                                        else
                                                jarg = NULL;
                                        if( jarg == NULL )

Index: WinLibEnv.h
===================================================================
RCS file: /cvsroot/izpack/izpack-src/src/native/win/COIOSHelper/WinLibEnv.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- WinLibEnv.h 6 May 2005 20:09:12 -0000       1.2
+++ WinLibEnv.h 2 Sep 2005 10:51:36 -0000       1.3
@@ -59,14 +59,14 @@
                static ExceptionNameRecord ExceptionNameMap[];
                unsigned long   win32Error;
                unsigned long   externCode;
-               char    *win32ErrorText;
+               TCHAR   *win32ErrorText;
                int             winLibError;
-               char    *winLibErrorText;
+               TCHAR   *winLibErrorText;
                JNIEnv  *jniEnv;
                jobject jniObj;
                WinLibEnvStatus_e       status;
                char    *exceptionTypeName;
-               char    *args[STD_ARRAY_LENGTH];
+               TCHAR    *args[STD_ARRAY_LENGTH];
                int             currentArg;
                void getOSMessage();
                ExceptionNameRecord *getExceptionNameRecord( char *exName );    
@@ -78,21 +78,21 @@
                jboolean        good() { return(status < WLES_WARNING ? true : 
false);};
                JNIEnv *getJNIEnv() { return(jniEnv);};
 
-               void    setError( char *err, char *errType);
-               void    setError( char *err) { setError(err, 
ExceptionNameMap[1].getShortName());};
-               void    setError( char *err,  unsigned long errCode) { 
setError( err ); win32Error = errCode;};
+               void    setError( TCHAR *err, char *errType);
+               void    setError( TCHAR *err) { setError(err, 
ExceptionNameMap[1].getShortName());};
+               void    setError( TCHAR *err,  unsigned long errCode) { 
setError( err ); win32Error = errCode;};
                void    setError( int err) 
                        { winLibError = err; status = 
WLES_ERROR;exceptionTypeName = ExceptionNameMap[1].getShortName();};
                
                void    setErrorWithOS( int err ) { setError(err); win32Error = 
GetLastError();};
-               void    setErrorWithOS( char *err) { setErrorWithOS( err, 
ExceptionNameMap[1].getShortName() );};
-               void    setErrorWithOS( char *err,  char *errType) 
+               void    setErrorWithOS( TCHAR *err) { setErrorWithOS( err, 
ExceptionNameMap[1].getShortName() );};
+               void    setErrorWithOS( TCHAR *err,  char *errType) 
                        { setError( err, errType );win32Error = 
GetLastError();};
 
-               void    addArg( const char *arg1 );
-               void    addArgs( const char *arg1, const char *arg2) { 
addArg(arg1); addArg(arg2); };
-               void    addArgs( const char *arg1, const char *arg2, const char 
*arg3) { addArgs(arg1, arg2); addArg(arg3); };
-               void    addArgs( const char *arg1, const char *arg2, const char 
*arg3, const char *arg4) 
+               void    addArg( const TCHAR *arg1 );
+               void    addArgs( const TCHAR *arg1, const TCHAR *arg2) { 
addArg(arg1); addArg(arg2); };
+               void    addArgs( const TCHAR *arg1, const TCHAR *arg2, const 
TCHAR *arg3) { addArgs(arg1, arg2); addArg(arg3); };
+               void    addArgs( const TCHAR *arg1, const TCHAR *arg2, const 
TCHAR *arg3, const TCHAR *arg4) 
                        { addArgs(arg1, arg2); addArgs(arg3, arg4); };
 
                void    reset();


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

Recently Viewed:
web.pylons.gene...    hurd.l4/2002-10...    kernel.commits....    user-groups.lin...    yellowdog.gener...    java.drools.use...    security.openva...    package-managem...    linux.debian.us...    qnx.openqnx.dev...    genealogy.gramp...    file-systems.if...    voip.wengophone...    tex.context/200...    ietf.smime/2003...    audio.csound.de...    culture.region....    xfree86.devel/2...    mobile.kannel.u...    distributed.con...    education.engli...    org.user-groups...    bug-tracking.gn...    recreation.bicy...   
Home | blog view | USPTO Patent Archive | advertise | OSDir is an inevitable website. super tiny logo

Free Magazines

Cisco News
Receive a free quarterly e-newsletter with exclusive articles on how Cisco IT uses its own products and solutions to enable the business.
subscribe

Systems Management News, the newspaper for IT systems administration and data center managers! Each issue of Systems Management News is chock-full of news and analysis to help you understand what's happening in your field.
subscribe

The Enterprise Newsweekly eWeek is the essential technology information source for builders of e-business.
subscribe

Oracle Magazine Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world's largest enterprise software company.
subscribe

Total Telecom Total Telecom is "The Economist of the communications industry".
subscribe