nsExec Unicode port by Jim Park (is this correct??)
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6092 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
d59234c852
commit
e097a25855
1 changed files with 35 additions and 0 deletions
|
@ -92,6 +92,32 @@ BOOL IsWOW64() {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the ansiStr if storing ANSI strings, otherwise, assume that the
|
||||||
|
* string is wide and don't convert, but straight copy.
|
||||||
|
* @param ansiStr [in] the suspected ANSI string.
|
||||||
|
* @param wideBuf [out] the buffer to write to.
|
||||||
|
* @param cnt [in] the size of widebuf in wchar_t's.
|
||||||
|
* @return true, if ASCII, false if suspected as wide.
|
||||||
|
*/
|
||||||
|
BOOL WideConvertIfASCII(const char* ansiStr, int strLen, WCHAR* wideBuf, int cnt)
|
||||||
|
{
|
||||||
|
BOOL rval = FALSE;
|
||||||
|
wideBuf[0] = 0;
|
||||||
|
if (lstrlenA(ansiStr) == strLen)
|
||||||
|
{
|
||||||
|
MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideBuf, cnt);
|
||||||
|
rval = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Going to assume that it's a wide char array.
|
||||||
|
lstrcpyW(wideBuf, (const WCHAR*) ansiStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
||||||
void ExecScript(int log) {
|
void ExecScript(int log) {
|
||||||
TCHAR szRet[128] = _T("");
|
TCHAR szRet[128] = _T("");
|
||||||
TCHAR meDLLPath[MAX_PATH];
|
TCHAR meDLLPath[MAX_PATH];
|
||||||
|
@ -220,6 +246,9 @@ params:
|
||||||
DWORD dwWait = WAIT_TIMEOUT;
|
DWORD dwWait = WAIT_TIMEOUT;
|
||||||
DWORD dwLastOutput;
|
DWORD dwLastOutput;
|
||||||
static TCHAR szBuf[1024];
|
static TCHAR szBuf[1024];
|
||||||
|
#ifdef _UNICODE
|
||||||
|
static char ansiBuf[1024];
|
||||||
|
#endif
|
||||||
HGLOBAL hUnusedBuf = NULL;
|
HGLOBAL hUnusedBuf = NULL;
|
||||||
TCHAR *szUnusedBuf = 0;
|
TCHAR *szUnusedBuf = 0;
|
||||||
|
|
||||||
|
@ -268,8 +297,14 @@ params:
|
||||||
PeekNamedPipe(read_stdout, 0, 0, 0, &dwRead, NULL);
|
PeekNamedPipe(read_stdout, 0, 0, 0, &dwRead, NULL);
|
||||||
if (dwRead) {
|
if (dwRead) {
|
||||||
dwLastOutput = GetTickCount();
|
dwLastOutput = GetTickCount();
|
||||||
|
#ifdef _UNICODE
|
||||||
|
ReadFile(read_stdout, ansiBuf, sizeof(ansiBuf)-1, &dwRead, NULL);
|
||||||
|
ansiBuf[dwRead] = 0;
|
||||||
|
WideConvertIfASCII(ansiBuf, dwRead, szBuf, sizeof(szBuf)/sizeof(szBuf[0]));
|
||||||
|
#else
|
||||||
ReadFile(read_stdout, szBuf, sizeof(szBuf)-1, &dwRead, NULL);
|
ReadFile(read_stdout, szBuf, sizeof(szBuf)-1, &dwRead, NULL);
|
||||||
szBuf[dwRead] = '\0';
|
szBuf[dwRead] = '\0';
|
||||||
|
#endif
|
||||||
if (log) {
|
if (log) {
|
||||||
if (log & 2) {
|
if (log & 2) {
|
||||||
lstrcpyn(szUnusedBuf + lstrlen(szUnusedBuf), szBuf, g_stringsize - lstrlen(szUnusedBuf));
|
lstrcpyn(szUnusedBuf + lstrlen(szUnusedBuf), szBuf, g_stringsize - lstrlen(szUnusedBuf));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue