Author: mturk
Date: Sun Mar 18 07:24:49 2007
New Revision: 519615

URL: http://svn.apache.org/viewvc?view=rev&rev=519615
Log:
Fix JIRA DAEMON-87.  Implement UTF8 encoding and build UNICODE binaries.

Modified:
    
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.amd64
    
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.ia64
    
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.x86
    
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.amd64
    
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.c
    
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.ia64
    
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.x86
    jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/include/apxwin.h
    jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/src/javajni.c
    jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/src/utils.c

Modified: 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.amd64
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.amd64?view=diff&rev=519615&r1=519614&r2=519615
==============================================================================
--- 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.amd64
 (original)
+++ 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.amd64
 Sun Mar 18 07:24:49 2007
@@ -34,7 +34,7 @@
     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 
 CPP=cl.exe
-CPP_PROJ=/nologo /MD /W3 /EHsc /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" 
/D "_WINDOWS" /D "_AMD64_=1" -DWIN64 /D "_WIN64" /Wp64 /FIPRE64PRA.H /D "_MBCS" 
/Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+CPP_PROJ=/nologo /MD /W3 /EHsc /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" 
/D "_WINDOWS" /D "_AMD64_=1" -DWIN64 /D "_WIN64" /Wp64 /FIPRE64PRA.H  /D 
"_UNICODE" /D "UNICODE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
 
 .c{$(INTDIR)}.obj::
    $(CPP) @<<
@@ -94,7 +94,7 @@
 SOURCE=.\prunmgr.rc
 
 "$(INTDIR)\prunmgr.res" : $(SOURCE) "$(INTDIR)"
-       $(RSC) /l 0x409 /fo"$(INTDIR)\prunmgr.res" /i "..\..\include" /d 
"NDEBUG" /d "USE_MANIFEST" $(SOURCE)
+       $(RSC) /l 0x409 /fo"$(INTDIR)\prunmgr.res" /i "..\..\include" /d 
"NDEBUG" /d "_UNICODE" /d "UNICODE" /d "USE_MANIFEST" $(SOURCE)
 
 
 "libprocrun MAKE" : 

Modified: 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.ia64
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.ia64?view=diff&rev=519615&r1=519614&r2=519615
==============================================================================
--- 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.ia64
 (original)
+++ 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.ia64
 Sun Mar 18 07:24:49 2007
@@ -34,7 +34,7 @@
     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 
 CPP=cl.exe
-CPP_PROJ=/nologo /MD /W3 /EHsc /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" 
/D "_WINDOWS" /D "_IA64_=1" -DWIN64 /D "_WIN64" /Wp64 /FIPRE64PRA.H /D "_MBCS" 
/Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+CPP_PROJ=/nologo /MD /W3 /EHsc /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" 
/D "_WINDOWS" /D "_IA64_=1" -DWIN64 /D "_WIN64" /Wp64 /FIPRE64PRA.H  /D 
"_UNICODE" /D "UNICODE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
 
 .c{$(INTDIR)}.obj::
    $(CPP) @<<
@@ -94,7 +94,7 @@
 SOURCE=.\prunmgr.rc
 
 "$(INTDIR)\prunmgr.res" : $(SOURCE) "$(INTDIR)"
-       $(RSC) /l 0x409 /fo"$(INTDIR)\prunmgr.res" /i "..\..\include" /d 
"NDEBUG" /d "USE_MANIFEST" $(SOURCE)
+       $(RSC) /l 0x409 /fo"$(INTDIR)\prunmgr.res" /i "..\..\include" /d 
"NDEBUG" /d "_UNICODE" /d "UNICODE" /d "USE_MANIFEST" $(SOURCE)
 
 
 "libprocrun MAKE" : 

Modified: 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.x86
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.x86?view=diff&rev=519615&r1=519614&r2=519615
==============================================================================
--- 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.x86
 (original)
+++ 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunmgr/prunmgr.x86
 Sun Mar 18 07:24:49 2007
@@ -34,7 +34,7 @@
     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 
 CPP=cl.exe
-CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D 
"_WINDOWS" /D "_MBCS" /Fp"$(INTDIR)\prunmgr.pch" /YX /Fo"$(INTDIR)\\" 
/Fd"$(INTDIR)\\" /FD /c 
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D 
"_WINDOWS" /D "_UNICODE" /D "UNICODE" /Fp"$(INTDIR)\prunmgr.pch" /YX 
/Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
 
 .c{$(INTDIR)}.obj::
    $(CPP) @<<
@@ -95,7 +95,7 @@
 SOURCE=.\prunmgr.rc
 
 "$(INTDIR)\prunmgr.res" : $(SOURCE) "$(INTDIR)"
-       $(RSC) /l 0x409 /fo"$(INTDIR)\prunmgr.res" /i "..\..\include" /d 
"NDEBUG" /d "USE_MANIFEST" $(SOURCE)
+       $(RSC) /l 0x409 /fo"$(INTDIR)\prunmgr.res" /i "..\..\include" /d 
"NDEBUG" /d "_UNICODE" /d "UNICODE" /d "USE_MANIFEST" $(SOURCE)
 
 
 "libprocrun MAKE" : 

Modified: 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.amd64
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.amd64?view=diff&rev=519615&r1=519614&r2=519615
==============================================================================
--- 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.amd64
 (original)
+++ 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.amd64
 Sun Mar 18 07:24:49 2007
@@ -35,7 +35,7 @@
     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 
 CPP=cl.exe
-CPP_PROJ=/nologo /MD /W3 /EHsc /O2 /I "..\..\include" /I 
"$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /D "WIN32"  /D 
"_AMD64_=1" -DWIN64 /D "_WIN64" /Wp64 /FIPRE64PRA.H /D "NDEBUG" /D "_CONSOLE" 
/D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+CPP_PROJ=/nologo /MD /W3 /EHsc /O2 /I "..\..\include" /I 
"$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /D "WIN32"  /D 
"_AMD64_=1" -DWIN64 /D "_WIN64" /Wp64 /FIPRE64PRA.H /D "NDEBUG" /D "_CONSOLE" 
/D "_UNICODE" /D "UNICODE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
 
 .c{$(INTDIR)}.obj::
    $(CPP) @<<
@@ -93,7 +93,7 @@
 SOURCE=.\prunsrv.rc
 
 "$(INTDIR)\prunsrv.res" : $(SOURCE) "$(INTDIR)"
-       $(RSC) /l 0x409 /fo"$(INTDIR)\prunsrv.res" /i "..\..\include" /d 
"NDEBUG" $(SOURCE)
+       $(RSC) /l 0x409 /fo"$(INTDIR)\prunsrv.res" /i "..\..\include" /d 
"NDEBUG" /d "_UNICODE" /d "UNICODE" $(SOURCE)
 
 
 "libprocrun MAKE" : 

Modified: 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.c
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.c?view=diff&rev=519615&r1=519614&r2=519615
==============================================================================
--- 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.c
 (original)
+++ 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.c
 Sun Mar 18 07:24:49 2007
@@ -195,16 +195,16 @@
 static APXHANDLE    gWorker;
 static APX_STDWRAP  gStdwrap;           /* stdio/stderr redirection */
 
-static LPWSTR _jni_jvmpath              = NULL;   /* Path to jvm dll */
-static LPSTR  _jni_jvmoptions           = NULL;   /* Path to jvm options */
+static LPWSTR   _jni_jvmpath              = NULL;   /* Path to jvm dll */
+static LPSTR    _jni_jvmoptions           = NULL;   /* Path to jvm options */
 
-static LPSTR  _jni_classpath            = NULL;
-static LPSTR  _jni_rparam               = NULL;    /* Startup  arguments */
-static LPSTR  _jni_sparam               = NULL;    /* Shutdown arguments */
-static LPSTR  _jni_rmethod              = NULL;    /* Startup  arguments */
-static LPSTR  _jni_smethod              = NULL;    /* Shutdown arguments */
-static CHAR   _jni_rclass[SIZ_RESLEN]   = {'\0'};  /* Startup  class */
-static CHAR   _jni_sclass[SIZ_RESLEN]   = {'\0'};  /* Shutdown class */
+static LPSTR    _jni_classpath            = NULL;
+static LPCWSTR  _jni_rparam               = NULL;    /* Startup  arguments */
+static LPCWSTR  _jni_sparam               = NULL;    /* Shutdown arguments */
+static LPSTR    _jni_rmethod              = NULL;    /* Startup  arguments */
+static LPSTR    _jni_smethod              = NULL;    /* Shutdown arguments */
+static CHAR     _jni_rclass[SIZ_RESLEN]   = {'\0'};  /* Startup  class */
+static CHAR     _jni_sclass[SIZ_RESLEN]   = {'\0'};  /* Shutdown class */
 
 static HANDLE gShutdownEvent = NULL;
 static HANDLE gSignalEvent   = NULL;
@@ -1151,7 +1151,7 @@
             WideToAscii(SO_STARTCLASS, _jni_rclass);
             /* Exchange all dots with slashes */
             apxStrCharReplaceA(_jni_rclass, '.', '/');
-            _jni_rparam = MzWideToAscii(SO_STARTPARAMS, (LPSTR)SO_STARTPARAMS);
+            _jni_rparam = SO_STARTPARAMS;
         }
         else if (!lstrcmpiW(SO_STARTMODE, PRSRV_JAVA)) {
             LPWSTR jx = NULL, szJH = apxGetJavaSoftHome(gPool, FALSE);
@@ -1171,7 +1171,7 @@
             _jni_shutdown = TRUE;
             WideToAscii(SO_STOPCLASS, _jni_sclass);
             apxStrCharReplaceA(_jni_sclass, '.', '/');
-            _jni_sparam = MzWideToAscii(SO_STOPPARAMS, (LPSTR)SO_STOPPARAMS);
+            _jni_sparam = SO_STOPPARAMS;
         }
         else if (!lstrcmpiW(SO_STOPMODE, PRSRV_JAVA)) {
             LPWSTR jx = NULL, szJH = apxGetJavaSoftHome(gPool, FALSE);
@@ -1192,14 +1192,12 @@
                 _jni_jvmpath = SO_JVM;
         }
         if (SO_CLASSPATH)
-            _jni_classpath = WideToAscii(SO_CLASSPATH, (LPSTR)SO_CLASSPATH);
+            _jni_classpath = WideToUTF8(SO_CLASSPATH);
         if (SO_STARTMETHOD)
-            _jni_rmethod = WideToAscii(SO_STARTMETHOD, (LPSTR)SO_STARTMETHOD);
+            _jni_rmethod   = WideToAscii(SO_STARTMETHOD, 
(LPSTR)SO_STARTMETHOD);
         if (SO_STOPMETHOD)
-            _jni_smethod = WideToAscii(SO_STOPMETHOD, (LPSTR)SO_STOPMETHOD);
-        if (SO_JVMOPTIONS) {
-            _jni_jvmoptions = MzWideToAscii(SO_JVMOPTIONS, 
(LPSTR)SO_JVMOPTIONS);
-        }
+            _jni_smethod   = WideToAscii(SO_STOPMETHOD, (LPSTR)SO_STOPMETHOD);
+        _jni_jvmoptions    = MzWideToUTF8(SO_JVMOPTIONS);
     }
     if (_service_mode) {
         /* Register Service Control handler */

Modified: 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.ia64
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.ia64?view=diff&rev=519615&r1=519614&r2=519615
==============================================================================
--- 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.ia64
 (original)
+++ 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.ia64
 Sun Mar 18 07:24:49 2007
@@ -35,7 +35,7 @@
     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 
 CPP=cl.exe
-CPP_PROJ=/nologo /MD /W3 /EHsc /O2 /I "..\..\include" /I 
"$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /D "WIN32"  /D 
"_IA64_=1" -DWIN64 /D "_WIN64" /Wp64 /FIPRE64PRA.H /D "NDEBUG" /D "_CONSOLE" /D 
"_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+CPP_PROJ=/nologo /MD /W3 /EHsc /O2 /I "..\..\include" /I 
"$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\win32" /D "WIN32"  /D 
"_IA64_=1" -DWIN64 /D "_WIN64" /Wp64 /FIPRE64PRA.H /D "NDEBUG" /D "_CONSOLE" /D 
"_UNICODE" /D "UNICODE" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
 
 .c{$(INTDIR)}.obj::
    $(CPP) @<<
@@ -93,7 +93,7 @@
 SOURCE=.\prunsrv.rc
 
 "$(INTDIR)\prunsrv.res" : $(SOURCE) "$(INTDIR)"
-       $(RSC) /l 0x409 /fo"$(INTDIR)\prunsrv.res" /i "..\..\include" /d 
"NDEBUG" $(SOURCE)
+       $(RSC) /l 0x409 /fo"$(INTDIR)\prunsrv.res" /i "..\..\include" /d 
"NDEBUG" /d "_UNICODE" /d "UNICODE" $(SOURCE)
 
 
 "libprocrun MAKE" : 

Modified: 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.x86
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.x86?view=diff&rev=519615&r1=519614&r2=519615
==============================================================================
--- 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.x86
 (original)
+++ 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/apps/prunsrv/prunsrv.x86
 Sun Mar 18 07:24:49 2007
@@ -35,7 +35,7 @@
     if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
 
 CPP=cl.exe
-CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\..\include" /I "$(JAVA_HOME)\include" 
/I "$(JAVA_HOME)\include\win32" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" 
/Fp"$(INTDIR)\prunsrv.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\..\include" /I "$(JAVA_HOME)\include" 
/I "$(JAVA_HOME)\include\win32" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D 
"_UNICODE" /D "UNICODE" /Fp"$(INTDIR)\prunsrv.pch" /YX /Fo"$(INTDIR)\\" 
/Fd"$(INTDIR)\\" /FD /c 
 
 .c{$(INTDIR)}.obj::
    $(CPP) @<<
@@ -93,7 +93,7 @@
 SOURCE=.\prunsrv.rc
 
 "$(INTDIR)\prunsrv.res" : $(SOURCE) "$(INTDIR)"
-       $(RSC) /l 0x409 /fo"$(INTDIR)\prunsrv.res" /i "..\..\include" /d 
"NDEBUG" $(SOURCE)
+       $(RSC) /l 0x409 /fo"$(INTDIR)\prunsrv.res" /i "..\..\include" /d 
"NDEBUG" /d "_UNICODE" /d "UNICODE" $(SOURCE)
 
 
 "libprocrun MAKE" : 

Modified: 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/include/apxwin.h
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/include/apxwin.h?view=diff&rev=519615&r1=519614&r2=519615
==============================================================================
--- jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/include/apxwin.h 
(original)
+++ jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/include/apxwin.h 
Sun Mar 18 07:24:49 2007
@@ -144,6 +144,8 @@
 LPWSTR      AsciiToWide(LPCSTR s, LPWSTR ws);
 LPSTR       WideToAscii(LPCWSTR ws, LPSTR s);
 LPSTR       MzWideToAscii(LPCWSTR ws, LPSTR s);
+LPSTR       WideToUTF8(LPCWSTR ws);
+LPSTR       MzWideToUTF8(LPCWSTR ws);
 
 typedef struct APXMULTISZ APXMULTISZ;
 typedef APXMULTISZ*       LPAPXMULTISZ;

Modified: 
jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/src/javajni.c
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/src/javajni.c?view=diff&rev=519615&r1=519614&r2=519615
==============================================================================
--- jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/src/javajni.c 
(original)
+++ jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/src/javajni.c Sun 
Mar 18 07:24:49 2007
@@ -424,7 +424,7 @@
                      LPCSTR szMethodName,
                      LPCVOID lpArguments)
 {
-    LPSTR       *lpArgs = NULL;
+    LPWSTR      *lpArgs = NULL;
     DWORD       nArgs;
     LPAPXJAVAVM lpJava;
     jclass      jClazz;
@@ -459,15 +459,15 @@
         apxLogWrite(APXLOG_MARK_ERROR "Static method 'void main(String[])' in 
Class %s not found", szClassName);
         return FALSE;
     }
-    nArgs = apxMultiSzToArrayA(hJava->hPool, lpArguments, &lpArgs);
+    nArgs = apxMultiSzToArrayW(hJava->hPool, lpArguments, &lpArgs);
     if (nArgs) {
         DWORD i;
         lpJava->clWorker.jArgs = JNICALL_3(NewObjectArray, nArgs,
                                            lpJava->clString.jClazz, NULL);
         for (i = 0; i < nArgs; i++) {
-            jstring arg = JNICALL_1(NewStringUTF, lpArgs[i]);
+            jstring arg = JNICALL_2(NewString, lpArgs[i], lstrlenW(lpArgs[i]));
             JNICALL_3(SetObjectArrayElement, lpJava->clWorker.jArgs, i, arg);
-            apxLogWrite(APXLOG_MARK_DEBUG "argv[%d] = %s", i, lpArgs[i]);
+            apxLogWrite(APXLOG_MARK_DEBUG "argv[%d] = %S", i, lpArgs[i]);
         }
     }
     apxFree(lpArgs);

Modified: jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/src/utils.c
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/src/utils.c?view=diff&rev=519615&r1=519614&r2=519615
==============================================================================
--- jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/src/utils.c 
(original)
+++ jakarta/commons/proper/daemon/trunk/src/native/nt/procrun/src/utils.c Sun 
Mar 18 07:24:49 2007
@@ -77,7 +77,7 @@
     rc = GetEnvironmentVariableW(wsName, NULL, 0);
     if (rc == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)
         return NULL;
-    
+
     if (!(wsRet = apxPoolAlloc(hPool, (rc + 1) * sizeof(WCHAR))))
         return NULL;
     if (!GetEnvironmentVariableW(wsName, wsRet, rc)) {
@@ -96,7 +96,7 @@
     rc = GetEnvironmentVariableA(szName, NULL, 0);
     if (rc == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)
         return NULL;
-    
+
     if (!(szRet = apxPoolAlloc(hPool, rc + 1)))
         return NULL;
     if (!GetEnvironmentVariableA(szName, szRet, rc)) {
@@ -136,6 +136,19 @@
     return pszSave;
 }
 
+LPSTR WideToUTF8(LPCWSTR ws)
+{
+
+    LPSTR s;
+    int cch = WideCharToMultiByte(CP_UTF8, 0, ws, -1, NULL, 0, NULL, NULL);
+    s = (LPSTR)apxAlloc(cch);
+    if (!WideCharToMultiByte(CP_UTF8, 0, ws, -1, s, cch, NULL, NULL)) {
+        apxFree(s);
+        return NULL;
+    }
+    return s;
+}
+
 LPSTR MzWideToAscii(LPCWSTR ws, LPSTR s)
 {
     LPSTR pszSave = s;
@@ -152,6 +165,38 @@
     return pszSave;
 }
 
+LPSTR MzWideToUTF8(LPCWSTR ws)
+{
+    LPSTR str;
+    LPSTR s;
+    LPCWSTR p = ws;
+    int cch = 0;
+
+    for ( ; p && *p; p++) {
+        int len = WideCharToMultiByte(CP_UTF8, 0, p, -1, NULL, 0, NULL, NULL);
+        if (len > 0)
+            cch += len;
+        while (*p)
+            p++;
+    }
+    cch ++;
+    str = s = (LPSTR)apxAlloc(cch + 1);
+
+    p = ws;
+    for ( ; p && *p; p++) {
+        int len = WideCharToMultiByte(CP_UTF8, 0, p, -1, s, cch, NULL, NULL);
+        if (len > 0) {
+            s = s + len;
+            cch -= len;
+        }
+        while (*p)
+            p++;
+    }
+    /* double terminate */
+    *s = '\0';
+    return str;
+}
+
 #ifdef _DEBUG
 
 void ErrorMessage(LPCTSTR szError, BOOL bFatal)
@@ -171,18 +216,18 @@
         FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                       FORMAT_MESSAGE_FROM_SYSTEM |
                       FORMAT_MESSAGE_IGNORE_INSERTS,
-                      NULL, 
-                      dwErr, 
+                      NULL,
+                      dwErr,
                       MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
                       (LPTSTR) &lpMsgBuf, 0, NULL);
-        nRet = MessageBox(NULL, (LPCTSTR)lpMsgBuf, 
+        nRet = MessageBox(NULL, (LPCTSTR)lpMsgBuf,
                           TEXT("Application System Error"), nType);
         LocalFree(lpMsgBuf);
     }
     if (bFatal && (nRet == IDCANCEL || nRet == IDABORT)) {
         ExitProcess(dwErr);
     }
-} 
+}
 #endif /* _DEBUG */
 
 DWORD __apxGetMultiSzLengthA(LPCSTR lpStr, LPDWORD lpdwCount)
@@ -220,10 +265,10 @@
     DWORD  la = 0, lb = 0;
     if (!lpStrA && !lpStrB)
         return NULL;    /* Nothing to do if both are NULL */
-    
+
     la = __apxGetMultiSzLengthW(lpStrA, NULL);
     lb = __apxGetMultiSzLengthW(lpStrB, NULL);
-    
+
     rv = apxPoolCalloc(hPool, (la + lb + 1) * sizeof(WCHAR));
     if (la) {
         AplMoveMemory(rv, lpStrA, la * sizeof(WCHAR));
@@ -290,7 +335,7 @@
         p++;
     }
     (*lppArray)[++i] = NULL;
-    
+
     return n;
 }
 
@@ -319,7 +364,7 @@
         p++;
     }
     (*lppArray)[++i] = NULL;
-    
+
     return n;
 }
 
@@ -357,7 +402,7 @@
 {
     DWORD l = lstrlen(szSrc);
     LPTSTR p;
-    
+
     if (lpmSz->dwInsert + l + 2 > lpmSz->dwAllocated) {
         if ((lpmSz = (LPAPXMULTISZ )apxRealloc(lpmSz, 
QSTR_ALIGN(lpmSz->dwInsert + l))) == NULL)
             return NULL;
@@ -387,7 +432,7 @@
 }
 #endif
 
-LPTSTR apxStrCharRemove(LPTSTR szString, TCHAR chSkip) 
+LPTSTR apxStrCharRemove(LPTSTR szString, TCHAR chSkip)
 {
   LPTSTR p = szString;
   LPTSTR q = szString;
@@ -399,9 +444,9 @@
   *q = TEXT('\0');
 
   return szString;
-} 
+}
 
-DWORD apxStrCharRemoveA(LPSTR szString, CHAR chSkip) 
+DWORD apxStrCharRemoveA(LPSTR szString, CHAR chSkip)
 {
   LPSTR p = szString;
   LPSTR q = szString;
@@ -416,9 +461,9 @@
   *q = '\0';
 
   return c;
-} 
+}
 
-DWORD apxStrCharRemoveW(LPWSTR szString, WCHAR chSkip) 
+DWORD apxStrCharRemoveW(LPWSTR szString, WCHAR chSkip)
 {
   LPWSTR p = szString;
   LPWSTR q = szString;
@@ -433,37 +478,37 @@
   *q = L'\0';
 
   return c;
-} 
+}
 
 void
-apxStrCharReplaceA(LPSTR szString, CHAR chReplace, CHAR chReplaceWith) 
+apxStrCharReplaceA(LPSTR szString, CHAR chReplace, CHAR chReplaceWith)
 {
   LPSTR p = szString;
   LPSTR q = szString;
   while (*p) {
     if(*p == chReplace)
       *q++ = chReplaceWith;
-    else 
+    else
       *q++ = *p;
     ++p;
   }
   *q = '\0';
-} 
+}
 
 void
-apxStrCharReplaceW(LPWSTR szString, WCHAR chReplace, WCHAR chReplaceWith) 
+apxStrCharReplaceW(LPWSTR szString, WCHAR chReplace, WCHAR chReplaceWith)
 {
   LPWSTR p = szString;
   LPWSTR q = szString;
   while (*p) {
     if(*p == chReplace)
       *q++ = chReplaceWith;
-    else 
+    else
       *q++ = *p;
     ++p;
   }
   *q = L'\0';
-} 
+}
 
 static const LPCTSTR _st_hex = TEXT("0123456789abcdef");
 #define XTOABUFFER_SIZE (sizeof(ULONG) * 2 + 2)
@@ -506,7 +551,7 @@
     return TRUE;
 }
 
-ULONG apxStrToul(LPCTSTR szNum) 
+ULONG apxStrToul(LPCTSTR szNum)
 {
     ULONG rv = 0;
     DWORD sh = 0;
@@ -518,7 +563,7 @@
         return 0;
     /* go to the last digit */
     while (*(p + 1)) p++;
-    
+
     /* go back to 'x' */
     while (*p != TEXT('x')) {
         ULONG v = 0;
@@ -539,8 +584,8 @@
             case TEXT('d'): case TEXT('D'): v = 13UL; break;
             case TEXT('e'): case TEXT('E'): v = 14UL; break;
             case TEXT('f'): case TEXT('F'): v = 15UL; break;
-            default: 
-                return 0; 
+            default:
+                return 0;
             break;
         }
         rv |= rv + (v << sh);
@@ -549,7 +594,7 @@
     return rv;
 }
 
-ULONG apxStrToulW(LPCWSTR szNum) 
+ULONG apxStrToulW(LPCWSTR szNum)
 {
     ULONG rv = 0;
     DWORD sh = 0;
@@ -561,7 +606,7 @@
         return 0;
     /* go to the last digit */
     while (*(p + 1)) p++;
-    
+
     /* go back to 'x' */
     while (*p != L'x') {
         ULONG v = 0;
@@ -582,8 +627,8 @@
             case L'd': case L'D': v = 13UL; break;
             case L'e': case L'E': v = 14UL; break;
             case L'f': case L'F': v = 15UL; break;
-            default: 
-                return 0; 
+            default:
+                return 0;
             break;
         }
         rv |= rv + (v << sh);
@@ -592,7 +637,7 @@
     return rv;
 }
 
-ULONG apxAtoulW(LPCWSTR szNum) 
+ULONG apxAtoulW(LPCWSTR szNum)
 {
     ULONG rv = 0;
     DWORD sh = 1;
@@ -607,7 +652,7 @@
         ++p;
     }
     while (*(p + 1)) p++;
-    
+
     /* go back */
     while (p >= szNum) {
         ULONG v = 0;
@@ -622,8 +667,8 @@
             case L'7': v = 7UL; break;
             case L'8': v = 8UL; break;
             case L'9': v = 9UL; break;
-            default: 
-                return rv * s; 
+            default:
+                return rv * s;
             break;
         }
         rv = rv + (v * sh);
@@ -632,13 +677,13 @@
     return rv * s;
 }
 
-/* Make the unique system resource name from prefix and process id 
- * 
+/* Make the unique system resource name from prefix and process id
+ *
  */
 BOOL
 apxMakeResourceName(LPCTSTR szPrefix, LPTSTR lpBuff, DWORD dwBuffLength)
 {
-    DWORD pl = lstrlen(szPrefix);        
+    DWORD pl = lstrlen(szPrefix);
     if (dwBuffLength < (pl + 11))
         return FALSE;
     lstrcpy(lpBuff, szPrefix);
@@ -680,7 +725,7 @@
         }
     }
     return (szString[x] != '\0');
-} 
+}
 
 INT apxStrMatchW(LPCWSTR szString, LPCWSTR szPattern, BOOL bIgnoreCase)
 {
@@ -714,7 +759,7 @@
         }
     }
     return (szString[x] != L'\0');
-} 
+}
 
 INT apxMultiStrMatchW(LPCWSTR szString, LPCWSTR szPattern,
                       WCHAR chSeparator, BOOL bIgnoreCase)
@@ -848,7 +893,7 @@
     LPWSTR rv, b;
     LPCWSTR p = szStr;
 
-    l = __apxGetMultiSzLengthW(szStr, &c);    
+    l = __apxGetMultiSzLengthW(szStr, &c);
     b = rv = apxPoolCalloc(hPool, (l + c + 2) * sizeof(WCHAR));
 
     while (c > 0) {
@@ -870,7 +915,7 @@
     DWORD l, c, n = 0;
     LPWSTR rv, b;
 
-    l = lstrlenW(szStr);    
+    l = lstrlenW(szStr);
     b = rv = apxPoolCalloc(hPool, (l + 2) * sizeof(WCHAR));
     for (c = 0; c < l; c++) {
         if (szStr[c] == L'\r') {
@@ -983,7 +1028,7 @@
 }
 
 
-void CleanNullACL(void *sa) 
+void CleanNullACL(void *sa)
 {
     if (sa) {
         LocalFree(((PSECURITY_ATTRIBUTES)sa)->lpSecurityDescriptor);



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to