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]