From 7a63a01f7b209cd13979d701c5c15a83d18cc21b Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Wed, 16 May 2007 02:05:04 +0000 Subject: [PATCH] Bug 176353 - For cygwin apps started by the Spawner, use the cygwin kill utility to send it signals. Also wrote the makefile to use g++ for the spawner. Finally replace all VS projects with makefiles for MinGW. --- .../library/Makefile | 18 +- .../library/Win32ProcessEx.c | 183 +++---- .../library/iostream.c | 23 +- .../library/raise.c | 4 +- .../library/spawner.c | 12 +- .../library/spawner.dep | 18 - .../library/spawner.dsp | 181 ------- .../library/spawner.dsw | 29 -- .../library/spawner.mak | 301 ----------- .../library/starter/Makefile | 23 + .../library/starter/starter.cpp | 478 ++++++++++-------- .../library/starter/starter.dep | 5 - .../library/starter/starter.dsp | 90 ---- .../library/starter/starter.dsw | 29 -- .../library/starter/starter.mak | 193 ------- .../library/winreg/Makefile | 10 +- .../os/win32/x86/spawner.dll | Bin 61440 -> 40674 bytes .../os/win32/x86/starter.exe | Bin 16384 -> 30331 bytes .../cdt/utils/spawner/EnvironmentReader.java | 2 +- 19 files changed, 419 insertions(+), 1180 deletions(-) delete mode 100644 core/org.eclipse.cdt.core.win32/library/spawner.dep delete mode 100644 core/org.eclipse.cdt.core.win32/library/spawner.dsp delete mode 100644 core/org.eclipse.cdt.core.win32/library/spawner.dsw delete mode 100644 core/org.eclipse.cdt.core.win32/library/spawner.mak create mode 100644 core/org.eclipse.cdt.core.win32/library/starter/Makefile delete mode 100644 core/org.eclipse.cdt.core.win32/library/starter/starter.dep delete mode 100644 core/org.eclipse.cdt.core.win32/library/starter/starter.dsp delete mode 100644 core/org.eclipse.cdt.core.win32/library/starter/starter.dsw delete mode 100644 core/org.eclipse.cdt.core.win32/library/starter/starter.mak diff --git a/core/org.eclipse.cdt.core.win32/library/Makefile b/core/org.eclipse.cdt.core.win32/library/Makefile index c00aa7f93e6..176727fc01d 100644 --- a/core/org.eclipse.cdt.core.win32/library/Makefile +++ b/core/org.eclipse.cdt.core.win32/library/Makefile @@ -1,7 +1,7 @@ # makefile for libspawner.so ifeq ($(JAVA_HOME),) -$(warning JAVA_HOME not set in environment) +$(error JAVA_HOME not set in environment) endif # Defaults which can be overridden. @@ -11,8 +11,8 @@ ARCH = x86 JDK_INCLUDES= "$(JAVA_HOME)/include" JDK_OS_INCLUDES= "$(JAVA_HOME)/include/$(OS)" -CC=gcc -CFLAGS = -DUNICODE -I$(JDK_INCLUDES) -I$(JDK_OS_INCLUDES) +CC=g++ +CFLAGS = -DUNICODE -I$(JDK_INCLUDES) -I$(JDK_OS_INCLUDES) CXX=g++ CXXFLAGS=$(CFLAGS) @@ -22,18 +22,12 @@ LIB_NAME_SPAWNER = spawner.dll LIB_NAME_FULL_SPAWNER = $(INSTALL_DIR)/spawner.dll OBJS_SPAWNER=StdAfx.o Win32ProcessEx.o iostream.o raise.o spawner.o -WINREG = $(INSTALL_DIR)/winreg.dll -OBJS_WINREG = winreg.o - -all: $(LIB_NAME_FULL_SPAWNER) $(WINREG) +all: $(LIB_NAME_FULL_SPAWNER) rebuild: clean all $(LIB_NAME_FULL_SPAWNER) : $(OBJS_SPAWNER) - $(CC) -Wl,--kill-at -shared -o $(LIB_NAME_FULL_SPAWNER) $(OBJS_SPAWNER) + $(CC) -Wl,--kill-at -shared -o $(LIB_NAME_FULL_SPAWNER) $(OBJS_SPAWNER) -lpsapi clean : - $(RM) $(OBJS_SPAWNER) $(LIB_NAME_FULL_SPAWNER) $(OBJS_WINREG) $(WINREG) - -$(WINREG) : $(OBJS_WINREG) - $(CXX) -Wl,--kill-at -shared -o $(WINREG) $(OBJS_WINREG) + $(RM) $(OBJS_SPAWNER) diff --git a/core/org.eclipse.cdt.core.win32/library/Win32ProcessEx.c b/core/org.eclipse.cdt.core.win32/library/Win32ProcessEx.c index bd7d5836948..a88df2aa7f9 100644 --- a/core/org.eclipse.cdt.core.win32/library/Win32ProcessEx.c +++ b/core/org.eclipse.cdt.core.win32/library/Win32ProcessEx.c @@ -49,7 +49,7 @@ static int procCounter = 0; // Number of running processes // This is a VM helper -JNIEXPORT void JNICALL ThrowByName(JNIEnv *env, const char *name, const char *msg); +void ThrowByName(JNIEnv *env, const char *name, const char *msg); // Creates _procInfo block for every launched procss pProcInfo_t createProcInfo(); @@ -61,7 +61,7 @@ pProcInfo_t findProcInfo(int pid); unsigned int _stdcall waitProcTermination(void* pv) ; // This is a helper function to prevent losing of quotatin marks -static int copyTo(_TCHAR * target, const _TCHAR * source, int cpyLenght, int availSpace); +static int copyTo(wchar_t * target, const wchar_t * source, int cpyLenght, int availSpace); // Use this function to clean project descriptor and return it to the pool of available blocks. static void cleanUpProcBlock(pProcInfo_t pCurProcInfo); @@ -79,7 +79,7 @@ typedef enum { extern CRITICAL_SECTION cs; -extern _TCHAR path[MAX_PATH]; // Directory where spawner.dll is located +extern wchar_t path[MAX_PATH]; // Directory where spawner.dll is located static HMODULE hVM = NULL; // VM handler @@ -97,13 +97,14 @@ static int nCounter = 0; // We use it to build unique synchronisation object nam // [out] channels - streams handlers ///////////////////////////////////////////////////////////////////////////////////// +extern "C" JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec2 (JNIEnv * env, jobject process, jobjectArray cmdarray, jobjectArray envp, jstring dir, jintArray channels, jstring slaveName, jint fdm) { return -1; } -void ensureSize(_TCHAR** ptr, int* psize, int requiredLength) +void ensureSize(wchar_t** ptr, int* psize, int requiredLength) { int size= *psize; if (requiredLength > size) { @@ -111,7 +112,7 @@ void ensureSize(_TCHAR** ptr, int* psize, int requiredLength) if (size < requiredLength) { size= requiredLength; } - *ptr= (_TCHAR *)realloc(*ptr, size * sizeof(_TCHAR)); + *ptr= (wchar_t *)realloc(*ptr, size * sizeof(wchar_t)); if (NULL == *ptr) { *psize= 0; } @@ -121,6 +122,7 @@ void ensureSize(_TCHAR** ptr, int* psize, int requiredLength) } } +extern "C" JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 (JNIEnv * env, jobject process, jobjectArray cmdarray, jobjectArray envp, jstring dir, jintArray channels) { @@ -128,13 +130,13 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 PROCESS_INFORMATION pi = {0}; STARTUPINFOW si; DWORD flags = 0; - const _TCHAR * cwd = NULL; + const wchar_t * cwd = NULL; LPVOID envBlk = NULL; int ret = 0; int nCmdLineLength= 0; - _TCHAR * szCmdLine= 0; + wchar_t * szCmdLine= 0; int nBlkSize = MAX_ENV_SIZE; - _TCHAR * szEnvBlock = NULL; + wchar_t * szEnvBlock = NULL; jsize nCmdTokens = 0; jsize nEnvVars = 0; int i; @@ -142,19 +144,19 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 int nPos; pProcInfo_t pCurProcInfo; DWORD dwThreadId; - _TCHAR eventBreakName[20]; - _TCHAR eventWaitName[20]; - _TCHAR eventTerminateName[20]; + wchar_t eventBreakName[20]; + wchar_t eventWaitName[20]; + wchar_t eventTerminateName[20]; #ifdef DEBUG_MONITOR - _TCHAR buffer[1000]; + wchar_t buffer[1000]; #endif int nLocalCounter; - _TCHAR inPipeName[PIPE_NAME_LENGTH]; - _TCHAR outPipeName[PIPE_NAME_LENGTH]; - _TCHAR errPipeName[PIPE_NAME_LENGTH]; + wchar_t inPipeName[PIPE_NAME_LENGTH]; + wchar_t outPipeName[PIPE_NAME_LENGTH]; + wchar_t errPipeName[PIPE_NAME_LENGTH]; nCmdLineLength= MAX_CMD_SIZE; - szCmdLine= (_TCHAR *)malloc(nCmdLineLength * sizeof(_TCHAR)); + szCmdLine= (wchar_t *)malloc(nCmdLineLength * sizeof(wchar_t)); szCmdLine[0]= _T('\0'); if((HIBYTE(LOWORD(GetVersion()))) & 0x80) { @@ -172,14 +174,13 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 // Create pipe names EnterCriticalSection(&cs); - _stprintf(inPipeName, L"\\\\.\\pipe\\stdin%08i%010i", pid, nCounter); - _stprintf(outPipeName, L"\\\\.\\pipe\\stdout%08i%010i", pid, nCounter); - _stprintf(errPipeName, L"\\\\.\\pipe\\stderr%08i%010i", pid, nCounter); + swprintf(inPipeName, L"\\\\.\\pipe\\stdin%08i%010i", pid, nCounter); + swprintf(outPipeName, L"\\\\.\\pipe\\stdout%08i%010i", pid, nCounter); + swprintf(errPipeName, L"\\\\.\\pipe\\stderr%08i%010i", pid, nCounter); nLocalCounter = nCounter; ++nCounter; LeaveCriticalSection(&cs); - if ((INVALID_HANDLE_VALUE == (stdHandles[0] = CreateNamedPipeW(inPipeName, PIPE_ACCESS_OUTBOUND, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, PIPE_SIZE, PIPE_SIZE, PIPE_TIMEOUT, NULL))) || @@ -197,13 +198,13 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 } #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Opened pipes: %s, %s, %s\n"), inPipeName, outPipeName, errPipeName); + swprintf(buffer, _T("Opened pipes: %s, %s, %s\n"), inPipeName, outPipeName, errPipeName); OutputDebugStringW(buffer); #endif - nCmdTokens = (*env) -> GetArrayLength(env, cmdarray); - nEnvVars = (*env) -> GetArrayLength(env, envp); + nCmdTokens = env->GetArrayLength(cmdarray); + nEnvVars = env->GetArrayLength(envp); pCurProcInfo = createProcInfo(); @@ -214,9 +215,9 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 } // Construct starter's command line - _stprintf(eventBreakName, L"SABreak%p", pCurProcInfo); - _stprintf(eventWaitName, L"SAWait%p", pCurProcInfo); - _stprintf(eventTerminateName, L"SATerm%p", pCurProcInfo); + swprintf(eventBreakName, L"SABreak%p", pCurProcInfo); + swprintf(eventWaitName, L"SAWait%p", pCurProcInfo); + swprintf(eventTerminateName, L"SATerm%p", pCurProcInfo); pCurProcInfo -> eventBreak = CreateEventW(NULL, TRUE, FALSE, eventBreakName); ResetEvent(pCurProcInfo -> eventBreak); pCurProcInfo -> eventWait = CreateEventW(NULL, TRUE, FALSE, eventWaitName); @@ -224,15 +225,16 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 pCurProcInfo -> eventTerminate = CreateEventW(NULL, TRUE, FALSE, eventTerminateName); ResetEvent(pCurProcInfo -> eventTerminate); - nPos = _stprintf(szCmdLine, L"%sstarter.exe %i %i %s %s %s ", path, pid, nLocalCounter, eventBreakName, eventWaitName, eventTerminateName); + swprintf(szCmdLine, L"%sstarter.exe %i %i %s %s %s ", path, pid, nLocalCounter, eventBreakName, eventWaitName, eventTerminateName); + nPos = wcslen(szCmdLine); // Prepare command line for(i = 0; i < nCmdTokens; ++i) { - jobject item = (*env) -> GetObjectArrayElement(env, cmdarray, i); - jsize len = (*env) -> GetStringLength(env, item); + jstring item = (jstring)env->GetObjectArrayElement(cmdarray, i); + jsize len = env->GetStringLength(item); int nCpyLen; - const _TCHAR * str = (*env) -> GetStringChars(env, item, 0); + const wchar_t * str = (const wchar_t *)env->GetStringChars(item, 0); if(NULL != str) { int requiredSize= nPos+len+2; @@ -254,52 +256,51 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 nPos += nCpyLen; szCmdLine[nPos] = _T(' '); ++nPos; - (*env) -> ReleaseStringChars(env, item, str); + env->ReleaseStringChars(item, (const jchar *)str); } } szCmdLine[nPos] = _T('\0'); - #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("There are %i environment variables \n"), nEnvVars); + swprintf(buffer, _T("There are %i environment variables \n"), nEnvVars); OutputDebugStringW(buffer); #endif // Prepare environment block if (nEnvVars > 0) { nPos = 0; - szEnvBlock = (_TCHAR *)malloc(nBlkSize * sizeof(_TCHAR)); + szEnvBlock = (wchar_t *)malloc(nBlkSize * sizeof(wchar_t)); for(i = 0; i < nEnvVars; ++i) { - jobject item = (*env) -> GetObjectArrayElement(env, envp, i); - jsize len = (*env) -> GetStringLength(env, item); - const _TCHAR * str = (*env) -> GetStringChars(env, item, 0); + jstring item = (jstring)env->GetObjectArrayElement(envp, i); + jsize len = env->GetStringLength(item); + const wchar_t * str = (const wchar_t *)env->GetStringChars(item, 0); if(NULL != str) { while((nBlkSize - nPos) <= (len + 2)) // +2 for two '\0' { nBlkSize += MAX_ENV_SIZE; - szEnvBlock = (_TCHAR *)realloc(szEnvBlock, nBlkSize * sizeof(_TCHAR)); + szEnvBlock = (wchar_t *)realloc(szEnvBlock, nBlkSize * sizeof(wchar_t)); if(NULL == szEnvBlock) { ThrowByName(env, "java/io/IOException", "Not enough memory"); return 0; } #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Realloc environment block; new length is %i \n"), nBlkSize); + swprintf(buffer, _T("Realloc environment block; new length is %i \n"), nBlkSize); OutputDebugStringW(buffer); #endif } #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("%s\n"), str); + swprintf(buffer, _T("%s\n"), str); OutputDebugStringW(buffer); #endif - _tcsncpy(szEnvBlock + nPos, str, len); + wcsncpy(szEnvBlock + nPos, str, len); nPos += len; szEnvBlock[nPos] = _T('\0'); ++nPos; - (*env) -> ReleaseStringChars(env, item, str); + env->ReleaseStringChars(item, (const jchar *)str); } } szEnvBlock[nPos] = _T('\0'); @@ -309,11 +310,11 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 if (dir != 0) { - const _TCHAR * str = (*env) -> GetStringChars(env, dir, 0); + const wchar_t * str = (const wchar_t *)env->GetStringChars(dir, 0); if(NULL != str) { - cwd = _tcsdup(str); - (*env) -> ReleaseStringChars(env, dir, str); + cwd = wcsdup(str); + env->ReleaseStringChars(dir, (const jchar *)str); } } @@ -348,7 +349,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 cwd, /* change to the new current directory */ &si, /* (in) startup information */ &pi); /* (out) process information */ - + if(NULL != cwd) free((void *)cwd); @@ -364,7 +365,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 CloseHandle(stdHandles[0]); CloseHandle(stdHandles[1]); CloseHandle(stdHandles[2]); - FormatMessage( + FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, @@ -387,9 +388,6 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 HANDLE h[2]; int what; - CloseHandle(pi.hThread); - CloseHandle(pi.hProcess); - EnterCriticalSection(&cs); pCurProcInfo -> pid = pi.dwProcessId; @@ -401,7 +399,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 if((what != WAIT_OBJECT_0) && (pCurProcInfo -> pid > 0)) // CreateProcess failed { #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Process %i failed\n"), pi.dwProcessId); + swprintf(buffer, _T("Process %i failed\n"), pi.dwProcessId); OutputDebugStringW(buffer); #endif cleanUpProcBlock(pCurProcInfo); @@ -418,7 +416,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 file_handles[0] = (int)stdHandles[0]; file_handles[1] = (int)stdHandles[1]; file_handles[2] = (int)stdHandles[2]; - (*env) -> SetIntArrayRegion(env, channels, 0, 3, (jint *)file_handles); + env->SetIntArrayRegion(channels, 0, 3, (jint *)file_handles); #ifdef DEBUG_MONITOR OutputDebugStringW(_T("Process started\n")); #endif @@ -428,6 +426,8 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 } + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); return ret; @@ -441,6 +441,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec0 // [in] envp - array of environment variables // [in] dir - working directory ///////////////////////////////////////////////////////////////////////////////////// +extern "C" JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 (JNIEnv * env, jobject process, jobjectArray cmdarray, jobjectArray envp, jstring dir) { @@ -449,20 +450,20 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 PROCESS_INFORMATION pi = {0}; STARTUPINFOW si; DWORD flags = 0; - _TCHAR * cwd = NULL; - _TCHAR * envBlk = NULL; + wchar_t * cwd = NULL; + wchar_t * envBlk = NULL; int ret = 0; jsize nCmdTokens = 0; jsize nEnvVars = 0; int i; int nPos; int nCmdLineLength= 0; - _TCHAR * szCmdLine= 0; + wchar_t * szCmdLine= 0; int nBlkSize = MAX_ENV_SIZE; - _TCHAR * szEnvBlock = NULL; + wchar_t * szEnvBlock = NULL; nCmdLineLength= MAX_CMD_SIZE; - szCmdLine= (_TCHAR *)malloc(nCmdLineLength * sizeof(_TCHAR)); + szCmdLine= (wchar_t *)malloc(nCmdLineLength * sizeof(wchar_t)); szCmdLine[0]= 0; sa.nLength = sizeof(sa); @@ -470,18 +471,18 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 sa.bInheritHandle = TRUE; - nCmdTokens = (*env) -> GetArrayLength(env, cmdarray); - nEnvVars = (*env) -> GetArrayLength(env, envp); + nCmdTokens = env->GetArrayLength(cmdarray); + nEnvVars = env->GetArrayLength(envp); nPos = 0; // Prepare command line for(i = 0; i < nCmdTokens; ++i) { - jobject item = (*env) -> GetObjectArrayElement(env, cmdarray, i); - jsize len = (*env) -> GetStringLength(env, item); + jstring item = (jstring)env->GetObjectArrayElement(cmdarray, i); + jsize len = env->GetStringLength(item); int nCpyLen; - const _TCHAR * str = (*env) -> GetStringChars(env, item, 0); + const wchar_t * str = (const wchar_t *)env->GetStringChars(item, 0); if(NULL != str) { int requiredSize= nPos+len+2; @@ -503,7 +504,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 nPos += nCpyLen; szCmdLine[nPos] = _T(' '); ++nPos; - (*env) -> ReleaseStringChars(env, item, str); + env->ReleaseStringChars(item, (const jchar *)str); } } @@ -512,30 +513,30 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 // Prepare environment block if (nEnvVars > 0) { - szEnvBlock = (_TCHAR *)malloc(nBlkSize * sizeof(_TCHAR)); + szEnvBlock = (wchar_t *)malloc(nBlkSize * sizeof(wchar_t)); nPos = 0; for(i = 0; i < nEnvVars; ++i) { - jobject item = (*env) -> GetObjectArrayElement(env, envp, i); - jsize len = (*env) -> GetStringLength(env, item); - const _TCHAR * str = (*env) -> GetStringChars(env, item, 0); + jstring item = (jstring)env->GetObjectArrayElement(envp, i); + jsize len = env->GetStringLength(item); + const wchar_t * str = (const wchar_t *)env->GetStringChars(item, 0); if(NULL != str) { while((nBlkSize - nPos) <= (len + 2)) // +2 for two '\0' { nBlkSize += MAX_ENV_SIZE; - szEnvBlock = (_TCHAR *)realloc(szEnvBlock, nBlkSize * sizeof(_TCHAR)); + szEnvBlock = (wchar_t *)realloc(szEnvBlock, nBlkSize * sizeof(wchar_t)); if(NULL == szEnvBlock) { ThrowByName(env, "java/io/Exception", "Not enough memory"); return 0; } } - _tcsncpy(szEnvBlock + nPos, str, len); + wcsncpy(szEnvBlock + nPos, str, len); nPos += len; szEnvBlock[nPos] = _T('\0'); ++nPos; - (*env) -> ReleaseStringChars(env, item, str); + env->ReleaseStringChars(item, (const jchar *)str); } } szEnvBlock[nPos] = _T('\0'); @@ -546,11 +547,11 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 if (dir != 0) { - const _TCHAR * str = (*env) -> GetStringChars(env, dir, 0); + const wchar_t * str = (const wchar_t *)env->GetStringChars(dir, 0); if(NULL != str) { - cwd = _tcsdup(str); - (*env) -> ReleaseStringChars(env, dir, str); + cwd = wcsdup(str); + env->ReleaseStringChars(dir, (const jchar *)str); } } @@ -595,7 +596,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (char *)&lpMsgBuf, + (wchar_t *)&lpMsgBuf, 0, NULL ); @@ -624,6 +625,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_exec1 // [in] uid - unique process ID // [in] signal - signal to raise ///////////////////////////////////////////////////////////////////////////////////// +extern "C" JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_raise (JNIEnv * env, jobject process, jint uid, jint signal) { @@ -632,7 +634,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_raise HANDLE hProc; pProcInfo_t pCurProcInfo = findProcInfo(uid); #ifdef DEBUG_MONITOR - _TCHAR buffer[100]; + wchar_t buffer[100]; #endif if(NULL == pCurProcInfo) { @@ -643,7 +645,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_raise } #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Spawner received signal %i for process %i\n"), signal, pCurProcInfo -> pid); + swprintf(buffer, _T("Spawner received signal %i for process %i\n"), signal, pCurProcInfo -> pid); OutputDebugStringW(buffer); #endif @@ -665,7 +667,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_raise case SIG_KILL: case SIG_TERM: #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Spawner received KILL or TERM signal for process %i\n"), + swprintf(buffer, _T("Spawner received KILL or TERM signal for process %i\n"), pCurProcInfo -> pid); OutputDebugStringW(buffer); #endif @@ -697,10 +699,11 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_raise // Arguments: (see Spawner.java) // [in] uid - unique process ID ///////////////////////////////////////////////////////////////////////////////////// +extern "C" JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_waitFor (JNIEnv * env, jobject process, jint uid) { - long exit_code; + DWORD exit_code; int what=0; HANDLE hProc; pProcInfo_t pCurProcInfo = findProcInfo(uid); @@ -740,16 +743,15 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_Spawner_waitFor // [in] name - name of exception class // [in] message to assign thi event ///////////////////////////////////////////////////////////////////////////////////// -JNIEXPORT void JNICALL -ThrowByName(JNIEnv *env, const char *name, const char *msg) +void ThrowByName(JNIEnv *env, const char *name, const char *msg) { - jclass cls = (*env)->FindClass(env, name); + jclass cls = env->FindClass(name); if (cls != 0) /* Otherwise an exception has already been thrown */ - (*env)->ThrowNew(env, cls, msg); + env->ThrowNew(cls, msg); /* It's a good practice to clean up the local references. */ - (*env)->DeleteLocalRef(env, cls); + env->DeleteLocalRef(cls); } @@ -769,7 +771,7 @@ pProcInfo_t createProcInfo() if(NULL == pInfo) { - pInfo = malloc(sizeof(procInfo_t) * MAX_PROCS); + pInfo = (pProcInfo_t)malloc(sizeof(procInfo_t) * MAX_PROCS); ZeroMemory(pInfo, sizeof(procInfo_t) * MAX_PROCS); } @@ -850,7 +852,7 @@ unsigned int _stdcall waitProcTermination(void* pv) int i; int pid = (int)pv; #ifdef DEBUG_MONITOR - _TCHAR buffer[1000]; + wchar_t buffer[1000]; #endif HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); @@ -858,7 +860,7 @@ unsigned int _stdcall waitProcTermination(void* pv) if(NULL == hProc) { #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("waitProcTermination: cannot get handler for PID %i (error %i)\n"), + swprintf(buffer, _T("waitProcTermination: cannot get handler for PID %i (error %i)\n"), pid, GetLastError()); OutputDebugStringW(buffer); @@ -868,7 +870,7 @@ unsigned int _stdcall waitProcTermination(void* pv) { WaitForSingleObject(hProc, INFINITE); #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Process PID %i terminated\n"), pid); + swprintf(buffer, _T("Process PID %i terminated\n"), pid); OutputDebugStringW(buffer); #endif } @@ -880,7 +882,7 @@ unsigned int _stdcall waitProcTermination(void* pv) if(WaitForSingleObject(pInfo[i].eventWait, 1) == WAIT_OBJECT_0) // Correct finish { #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("waitProcTermination: set PID %i to 0\n"), + swprintf(buffer, _T("waitProcTermination: set PID %i to 0\n"), pid, GetLastError()); OutputDebugStringW(buffer); @@ -906,7 +908,7 @@ unsigned int _stdcall waitProcTermination(void* pv) // availSpace - size of the target buffer // Return :number of bytes used in target, or -1 in case of error ///////////////////////////////////////////////////////////////////////////////////// -int copyTo(_TCHAR * target, const _TCHAR * source, int cpyLength, int availSpace) +int copyTo(wchar_t * target, const wchar_t * source, int cpyLength, int availSpace) { BOOL bSlash = FALSE; int i = 0, j = 0; @@ -928,7 +930,7 @@ int copyTo(_TCHAR * target, const _TCHAR * source, int cpyLength, int availSpace nQuotationMode = QUOTATION_DONE; } else - if(_tcschr(source, _T(' ')) == NULL) + if(wcschr(source, _T(' ')) == NULL) { // No reason to quotate term becase it doesn't have embedded spaces nQuotationMode = QUOTATION_NONE; @@ -977,4 +979,3 @@ int copyTo(_TCHAR * target, const _TCHAR * source, int cpyLength, int availSpace return j; } - diff --git a/core/org.eclipse.cdt.core.win32/library/iostream.c b/core/org.eclipse.cdt.core.win32/library/iostream.c index 183d26269fb..e323776272a 100644 --- a/core/org.eclipse.cdt.core.win32/library/iostream.c +++ b/core/org.eclipse.cdt.core.win32/library/iostream.c @@ -25,7 +25,7 @@ //#define READ_REPORT -JNIEXPORT void JNICALL ThrowByName(JNIEnv *env, const char *name, const char *msg); +void ThrowByName(JNIEnv *env, const char *name, const char *msg); #define BUFF_SIZE (1024) @@ -35,10 +35,11 @@ JNIEXPORT void JNICALL ThrowByName(JNIEnv *env, const char *name, const char *ms * Method: read0 * Signature: (I)I */ +extern "C" JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_read0 (JNIEnv * env, jobject proc, jint fd, jbyteArray buf, jint len) { - BYTE tmpBuf[BUFF_SIZE]; + jbyte tmpBuf[BUFF_SIZE]; int nBuffOffset = 0; #ifdef DEBUG_MONITOR _TCHAR buffer[1000]; @@ -60,7 +61,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_rea NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (char *) &lpMsgBuf, + (wchar_t *) &lpMsgBuf, 0, NULL ); @@ -114,7 +115,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_rea NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (char *) &lpMsgBuf, + (wchar_t *) &lpMsgBuf, 0, NULL ); @@ -127,7 +128,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_rea } } if(nNumberOfBytesRead > 0) - (*env) -> SetByteArrayRegion(env, buf, nBuffOffset, nNumberOfBytesRead, tmpBuf); + env->SetByteArrayRegion(buf, nBuffOffset, nNumberOfBytesRead, tmpBuf); else break; nBuffOffset += nNumberOfBytesRead; @@ -150,6 +151,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_rea * Method: close0 * Signature: (I)I */ +extern "C" JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_close0 (JNIEnv * env, jobject proc, jint fd) { @@ -168,10 +170,11 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_clo return (rc ? GetLastError() : 0); } +extern "C" JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_available0 (JNIEnv * env, jobject proc, jint fd) { - int nAvail = 0; + DWORD nAvail = 0; if (0 == PeekNamedPipe((HANDLE)fd, NULL, 0, NULL, &nAvail, NULL)) { // error @@ -185,10 +188,11 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerInputStream_ava * Method: write0 * Signature: (I[BI)I */ +extern "C" JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_write0 (JNIEnv * env, jobject proc, jint fd, jbyteArray buf, jint len) { - BYTE tmpBuf[BUFF_SIZE]; + jbyte tmpBuf[BUFF_SIZE]; int nBuffOffset = 0; @@ -196,7 +200,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_wr { DWORD nNumberOfBytesToWrite = min(len - nBuffOffset, BUFF_SIZE); DWORD nNumberOfBytesWritten; - (*env) -> GetByteArrayRegion(env, buf, nBuffOffset, nNumberOfBytesToWrite, tmpBuf); + env->GetByteArrayRegion(buf, nBuffOffset, nNumberOfBytesToWrite, tmpBuf); if(0 == WriteFile((HANDLE)fd, tmpBuf, nNumberOfBytesToWrite, &nNumberOfBytesWritten, NULL)) { char * lpMsgBuf; @@ -207,7 +211,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_wr NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (char *) &lpMsgBuf, + (wchar_t *) &lpMsgBuf, 0, NULL ); @@ -226,6 +230,7 @@ JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_wr * Method: close0 * Signature: (I)I */ +extern "C" JNIEXPORT jint JNICALL Java_org_eclipse_cdt_utils_spawner_SpawnerOutputStream_close0 (JNIEnv * env, jobject proc, jint fd) { diff --git a/core/org.eclipse.cdt.core.win32/library/raise.c b/core/org.eclipse.cdt.core.win32/library/raise.c index b49437fb300..62abd4c2c36 100644 --- a/core/org.eclipse.cdt.core.win32/library/raise.c +++ b/core/org.eclipse.cdt.core.win32/library/raise.c @@ -41,10 +41,10 @@ find_child_console (HWND hwnd, LPARAM arg) thread_id = GetWindowThreadProcessId (hwnd, &process_id); if (process_id == pid) { - char window_class[32]; + wchar_t window_class[32]; GetClassName (hwnd, window_class, sizeof (window_class)); - if (strcmp (window_class, "ConsoleWindowClass") == 0) + if (wcscmp (window_class, L"ConsoleWindowClass") == 0) { consoleHWND = hwnd; return FALSE; diff --git a/core/org.eclipse.cdt.core.win32/library/spawner.c b/core/org.eclipse.cdt.core.win32/library/spawner.c index 47baf4d1c11..53b99eb1a3e 100644 --- a/core/org.eclipse.cdt.core.win32/library/spawner.c +++ b/core/org.eclipse.cdt.core.win32/library/spawner.c @@ -20,10 +20,10 @@ CRITICAL_SECTION cs; -_TCHAR path[MAX_PATH + 1] = {_T('\0') }; // Directory where spawner.dll is located +wchar_t path[MAX_PATH + 1] = {_T('\0') }; // Directory where spawner.dll is located - -BOOL APIENTRY DllMain( HANDLE hModule, +extern "C" +BOOL APIENTRY DllMain( HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) @@ -32,14 +32,14 @@ BOOL APIENTRY DllMain( HANDLE hModule, { case DLL_PROCESS_ATTACH: { - _TCHAR * p; + wchar_t * p; InitializeCriticalSection(&cs); GetModuleFileNameW(hModule, path, MAX_PATH); - p = _tcsrchr(path, _T('\\')); + p = wcsrchr(path, _T('\\')); if(NULL != p) *(p + 1) = _T('\0'); else - _tcscat(path, L"\\"); + wcscat(path, L"\\"); } break; case DLL_THREAD_ATTACH: diff --git a/core/org.eclipse.cdt.core.win32/library/spawner.dep b/core/org.eclipse.cdt.core.win32/library/spawner.dep deleted file mode 100644 index 97f1d543d9c..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/spawner.dep +++ /dev/null @@ -1,18 +0,0 @@ -# Microsoft Developer Studio Generated Dependency File, included by spawner.mak - -.\iostream.c : \ - "$(JAVA_HOME)\include\jni.h"\ - "$(JAVA_HOME)\include\win32\jni_md.h"\ - ".\SpawnerInputStream.h"\ - ".\SpawnerOutputStream.h"\ - - -.\StdAfx.c : \ - ".\StdAfx.h"\ - - -.\Win32ProcessEx.c : \ - "$(JAVA_HOME)\include\jni.h"\ - "$(JAVA_HOME)\include\win32\jni_md.h"\ - ".\Spawner.h"\ - diff --git a/core/org.eclipse.cdt.core.win32/library/spawner.dsp b/core/org.eclipse.cdt.core.win32/library/spawner.dsp deleted file mode 100644 index 51657d6d04c..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/spawner.dsp +++ /dev/null @@ -1,181 +0,0 @@ -# Microsoft Developer Studio Project File - Name="spawner" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=spawner - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "spawner.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "spawner.mak" CFG="spawner - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "spawner - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "spawner - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "spawner - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# 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 "SPAWNER_EXPORTS" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /Gz /MT /W3 /GX /O2 /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\Win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "SPAWNER_EXPORTS" /Yu"stdafx.h" /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /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 - -!ELSEIF "$(CFG)" == "spawner - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SPAWNER_EXPORTS" /Yu"stdafx.h" /FD /GZ /c -# ADD CPP /nologo /Gz /MD /W3 /Gm /GX /ZI /Od /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\Win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "SPAWNER_EXPORTS" /FR /Yu"stdafx.h" /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /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 /map /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "spawner - Win32 Release" -# Name "spawner - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\iostream.c - -!IF "$(CFG)" == "spawner - Win32 Release" - -# ADD CPP /I "E:\Java\jdk1.3.1\include" /I "E:\Java\jdk1.3.1\include\Win32" /FAcs - -!ELSEIF "$(CFG)" == "spawner - Win32 Debug" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\raise.c -# End Source File -# Begin Source File - -SOURCE=.\spawner.c - -!IF "$(CFG)" == "spawner - Win32 Release" - -# ADD CPP /I "E:\Java\jdk1.3.1\include" /I "E:\Java\jdk1.3.1\include\Win32" - -!ELSEIF "$(CFG)" == "spawner - Win32 Debug" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.c - -!IF "$(CFG)" == "spawner - Win32 Release" - -# ADD CPP /I "E:\Java\jdk1.3.1\include" /I "E:\Java\jdk1.3.1\include\Win32" /Yc"stdafx.h" - -!ELSEIF "$(CFG)" == "spawner - Win32 Debug" - -# ADD CPP /Yc"stdafx.h" - -!ENDIF - -# End Source File -# Begin Source File - -SOURCE=.\Win32ProcessEx.c - -!IF "$(CFG)" == "spawner - Win32 Release" - -# ADD CPP /I "E:\Java\jdk1.3.1\include" /I "E:\Java\jdk1.3.1\include\Win32" /FAcs - -!ELSEIF "$(CFG)" == "spawner - Win32 Debug" - -!ENDIF - -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\Spawner.h -# End Source File -# Begin Source File - -SOURCE=.\SpawnerInputStream.h -# End Source File -# Begin Source File - -SOURCE=.\SpawnerOutputStream.h -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=.\ReadMe.txt -# End Source File -# End Target -# End Project diff --git a/core/org.eclipse.cdt.core.win32/library/spawner.dsw b/core/org.eclipse.cdt.core.win32/library/spawner.dsw deleted file mode 100644 index 2e6aa59612e..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/spawner.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "spawner"=.\spawner.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/core/org.eclipse.cdt.core.win32/library/spawner.mak b/core/org.eclipse.cdt.core.win32/library/spawner.mak deleted file mode 100644 index 585baf6462a..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/spawner.mak +++ /dev/null @@ -1,301 +0,0 @@ -# Microsoft Developer Studio Generated NMAKE File, Based on spawner.dsp -!IF "$(CFG)" == "" -CFG=spawner - Win32 Debug -!MESSAGE No configuration specified. Defaulting to spawner - Win32 Debug. -!ENDIF - -!IF "$(CFG)" != "spawner - Win32 Release" && "$(CFG)" != "spawner - Win32 Debug" -!MESSAGE Invalid configuration "$(CFG)" specified. -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "spawner.mak" CFG="spawner - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "spawner - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "spawner - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE -!ERROR An invalid configuration is specified. -!ENDIF - -!IF "$(OS)" == "Windows_NT" -NULL= -!ELSE -NULL=nul -!ENDIF - -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "spawner - Win32 Release" - -OUTDIR=.\Release -INTDIR=.\Release -# Begin Custom Macros -OutDir=.\Release -# End Custom Macros - -ALL : "$(OUTDIR)\spawner.dll" - - -CLEAN : - -@erase "$(INTDIR)\iostream.obj" - -@erase "$(INTDIR)\raise.obj" - -@erase "$(INTDIR)\spawner.obj" - -@erase "$(INTDIR)\spawner.pch" - -@erase "$(INTDIR)\StdAfx.obj" - -@erase "$(INTDIR)\vc60.idb" - -@erase "$(INTDIR)\Win32ProcessEx.obj" - -@erase "$(OUTDIR)\spawner.dll" - -@erase "$(OUTDIR)\spawner.exp" - -@erase "$(OUTDIR)\spawner.lib" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP_PROJ=/nologo /Gz /MT /W3 /GX /O2 /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\Win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "SPAWNER_EXPORTS" /Fp"$(INTDIR)\spawner.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c -MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 -BSC32=bscmake.exe -BSC32_FLAGS=/nologo /o"$(OUTDIR)\spawner.bsc" -BSC32_SBRS= \ - -LINK32=link.exe -LINK32_FLAGS=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 /incremental:no /pdb:"$(OUTDIR)\spawner.pdb" /machine:I386 /out:"$(OUTDIR)\spawner.dll" /implib:"$(OUTDIR)\spawner.lib" -LINK32_OBJS= \ - "$(INTDIR)\iostream.obj" \ - "$(INTDIR)\raise.obj" \ - "$(INTDIR)\spawner.obj" \ - "$(INTDIR)\StdAfx.obj" \ - "$(INTDIR)\Win32ProcessEx.obj" - -"$(OUTDIR)\spawner.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ELSEIF "$(CFG)" == "spawner - Win32 Debug" - -OUTDIR=.\Debug -INTDIR=.\Debug -# Begin Custom Macros -OutDir=.\Debug -# End Custom Macros - -ALL : "$(OUTDIR)\spawner.dll" "$(OUTDIR)\spawner.bsc" - - -CLEAN : - -@erase "$(INTDIR)\iostream.obj" - -@erase "$(INTDIR)\iostream.sbr" - -@erase "$(INTDIR)\raise.obj" - -@erase "$(INTDIR)\raise.sbr" - -@erase "$(INTDIR)\spawner.obj" - -@erase "$(INTDIR)\spawner.pch" - -@erase "$(INTDIR)\spawner.sbr" - -@erase "$(INTDIR)\StdAfx.obj" - -@erase "$(INTDIR)\StdAfx.sbr" - -@erase "$(INTDIR)\vc60.idb" - -@erase "$(INTDIR)\vc60.pdb" - -@erase "$(INTDIR)\Win32ProcessEx.obj" - -@erase "$(INTDIR)\Win32ProcessEx.sbr" - -@erase "$(OUTDIR)\spawner.bsc" - -@erase "$(OUTDIR)\spawner.dll" - -@erase "$(OUTDIR)\spawner.exp" - -@erase "$(OUTDIR)\spawner.ilk" - -@erase "$(OUTDIR)\spawner.lib" - -@erase "$(OUTDIR)\spawner.map" - -@erase "$(OUTDIR)\spawner.pdb" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP_PROJ=/nologo /Gz /MD /W3 /Gm /GX /ZI /Od /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\Win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "SPAWNER_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\spawner.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c -MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 -BSC32=bscmake.exe -BSC32_FLAGS=/nologo /o"$(OUTDIR)\spawner.bsc" -BSC32_SBRS= \ - "$(INTDIR)\iostream.sbr" \ - "$(INTDIR)\raise.sbr" \ - "$(INTDIR)\spawner.sbr" \ - "$(INTDIR)\StdAfx.sbr" \ - "$(INTDIR)\Win32ProcessEx.sbr" - -"$(OUTDIR)\spawner.bsc" : "$(OUTDIR)" $(BSC32_SBRS) - $(BSC32) @<< - $(BSC32_FLAGS) $(BSC32_SBRS) -<< - -LINK32=link.exe -LINK32_FLAGS=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 /incremental:yes /pdb:"$(OUTDIR)\spawner.pdb" /map:"$(INTDIR)\spawner.map" /debug /machine:I386 /out:"$(OUTDIR)\spawner.dll" /implib:"$(OUTDIR)\spawner.lib" /pdbtype:sept -LINK32_OBJS= \ - "$(INTDIR)\iostream.obj" \ - "$(INTDIR)\raise.obj" \ - "$(INTDIR)\spawner.obj" \ - "$(INTDIR)\StdAfx.obj" \ - "$(INTDIR)\Win32ProcessEx.obj" - -"$(OUTDIR)\spawner.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ENDIF - -.c{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.c{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - - -!IF "$(NO_EXTERNAL_DEPS)" != "1" -!IF EXISTS("spawner.dep") -!INCLUDE "spawner.dep" -!ELSE -!MESSAGE Warning: cannot find "spawner.dep" -!ENDIF -!ENDIF - - -!IF "$(CFG)" == "spawner - Win32 Release" || "$(CFG)" == "spawner - Win32 Debug" -SOURCE=.\iostream.c - -!IF "$(CFG)" == "spawner - Win32 Release" - -CPP_SWITCHES=/nologo /Gz /MT /W3 /GX /O2 /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\Win32" /I "E:\Java\jdk1.3.1\include" /I "E:\Java\jdk1.3.1\include\Win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "SPAWNER_EXPORTS" /FAcs /Fa"$(INTDIR)\\" /Fp"$(INTDIR)\spawner.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c - -"$(INTDIR)\iostream.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\spawner.pch" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ELSEIF "$(CFG)" == "spawner - Win32 Debug" - -CPP_SWITCHES=/nologo /Gz /MD /W3 /Gm /GX /ZI /Od /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\Win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "SPAWNER_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\spawner.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c - -"$(INTDIR)\iostream.obj" "$(INTDIR)\iostream.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\spawner.pch" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ENDIF - -SOURCE=.\raise.c - -!IF "$(CFG)" == "spawner - Win32 Release" - - -"$(INTDIR)\raise.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\spawner.pch" - - -!ELSEIF "$(CFG)" == "spawner - Win32 Debug" - - -"$(INTDIR)\raise.obj" "$(INTDIR)\raise.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\spawner.pch" - - -!ENDIF - -SOURCE=.\spawner.c - -!IF "$(CFG)" == "spawner - Win32 Release" - -CPP_SWITCHES=/nologo /Gz /MT /W3 /GX /O2 /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\Win32" /I "E:\Java\jdk1.3.1\include" /I "E:\Java\jdk1.3.1\include\Win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "SPAWNER_EXPORTS" /Fp"$(INTDIR)\spawner.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c - -"$(INTDIR)\spawner.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\spawner.pch" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ELSEIF "$(CFG)" == "spawner - Win32 Debug" - -CPP_SWITCHES=/nologo /Gz /MD /W3 /Gm /GX /ZI /Od /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\Win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "SPAWNER_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\spawner.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c - -"$(INTDIR)\spawner.obj" "$(INTDIR)\spawner.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\spawner.pch" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ENDIF - -SOURCE=.\StdAfx.c - -!IF "$(CFG)" == "spawner - Win32 Release" - -CPP_SWITCHES=/nologo /Gz /MT /W3 /GX /O2 /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\Win32" /I "E:\Java\jdk1.3.1\include" /I "E:\Java\jdk1.3.1\include\Win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "SPAWNER_EXPORTS" /Fp"$(INTDIR)\spawner.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c - -"$(INTDIR)\StdAfx.obj" "$(INTDIR)\spawner.pch" : $(SOURCE) "$(INTDIR)" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ELSEIF "$(CFG)" == "spawner - Win32 Debug" - -CPP_SWITCHES=/nologo /Gz /MD /W3 /Gm /GX /ZI /Od /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\Win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "SPAWNER_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\spawner.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c - -"$(INTDIR)\StdAfx.obj" "$(INTDIR)\StdAfx.sbr" "$(INTDIR)\spawner.pch" : $(SOURCE) "$(INTDIR)" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ENDIF - -SOURCE=.\Win32ProcessEx.c - -!IF "$(CFG)" == "spawner - Win32 Release" - -CPP_SWITCHES=/nologo /Gz /MT /W3 /GX /O2 /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\Win32" /I "E:\Java\jdk1.3.1\include" /I "E:\Java\jdk1.3.1\include\Win32" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "SPAWNER_EXPORTS" /FA /Fa"$(INTDIR)\Win32ProcessEx.asm-only" /Fp"$(INTDIR)\spawner.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c - -"$(INTDIR)\Win32ProcessEx.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\spawner.pch" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ELSEIF "$(CFG)" == "spawner - Win32 Debug" - -CPP_SWITCHES=/nologo /Gz /MD /W3 /Gm /GX /ZI /Od /I "$(JAVA_HOME)\include" /I "$(JAVA_HOME)\include\Win32" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_UNICODE" /D "_USRDLL" /D "SPAWNER_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\spawner.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c - -"$(INTDIR)\Win32ProcessEx.obj" "$(INTDIR)\Win32ProcessEx.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\spawner.pch" - $(CPP) @<< - $(CPP_SWITCHES) $(SOURCE) -<< - - -!ENDIF - - -!ENDIF - diff --git a/core/org.eclipse.cdt.core.win32/library/starter/Makefile b/core/org.eclipse.cdt.core.win32/library/starter/Makefile new file mode 100644 index 00000000000..363da73242e --- /dev/null +++ b/core/org.eclipse.cdt.core.win32/library/starter/Makefile @@ -0,0 +1,23 @@ +OS = win32 +ARCH = x86 + +TARGET = $(INSTALL_DIR)/starter.exe + +OBJS = starter.o + +LIBS = -lpsapi + +CXX = g++ +CXXFLAGS = -DUNICODE + +INSTALL_DIR = ../../os/$(OS)/$(ARCH) + +all: $(TARGET) + +rebuild: clean all + +clean : + $(RM) $(OBJS) + +$(TARGET) : $(OBJS) + $(CXX) -o $(TARGET) $(OBJS) $(LIBS) diff --git a/core/org.eclipse.cdt.core.win32/library/starter/starter.cpp b/core/org.eclipse.cdt.core.win32/library/starter/starter.cpp index 3a0fa472bfe..a59c6610316 100644 --- a/core/org.eclipse.cdt.core.win32/library/starter/starter.cpp +++ b/core/org.eclipse.cdt.core.win32/library/starter/starter.cpp @@ -14,93 +14,153 @@ * This is a small utility for windows spawner *******************************************************************************/ - - #define STRICT #include #include #include #include +#include //#define DEBUG_MONITOR #define MAX_CMD_LINE_LENGTH (2049) #define PIPE_NAME_LENGTH 100 -int copyTo(_TCHAR * target, const _TCHAR * source, int cpyLength, int availSpace); +int copyTo(wchar_t * target, const wchar_t * source, int cpyLength, + int availSpace); void DisplayErrorMessage(); //BOOL KillProcessEx(DWORD dwProcessId); // Handle of the process /////////////////////////////////////////////////////////////////////////////// -BOOL WINAPI HandlerRoutine( DWORD dwCtrlType) // control signal type +BOOL WINAPI HandlerRoutine( DWORD dwCtrlType) // control signal type { BOOL ret = TRUE; switch(dwCtrlType) { case CTRL_C_EVENT: - break; + break; case CTRL_BREAK_EVENT: - break; + break; case CTRL_CLOSE_EVENT: - ret = FALSE; - break; + ret = FALSE; + break; case CTRL_LOGOFF_EVENT: - ret = FALSE; - break; + ret = FALSE; + break; case CTRL_SHUTDOWN_EVENT: - ret = FALSE; - break; + ret = FALSE; + break; default: - break; + break; } return ret; } -void ensureSize(_TCHAR** ptr, int* psize, int requiredLength) -{ - int size= *psize; - if (requiredLength > size) { - size= 2*size; - if (size < requiredLength) { - size= requiredLength; - } - *ptr= (_TCHAR *)realloc(*ptr, size * sizeof(_TCHAR)); - if (NULL == *ptr) { - *psize= 0; - } - else { - *psize= size; - } - } +// The default here means we haven't checked yet +// i.e. cygwin is true but the bin dir hasn't been captured +wchar_t * cygwinBin = NULL; +bool _isCygwin = true; + +bool isCygwin(HANDLE process) { + // Have we checked before? + if (cygwinBin != NULL || !_isCygwin) + return _isCygwin; + + // See if this process loaded cygwin, need a different SIGINT for them + HMODULE mods[1024]; + DWORD needed; + if (EnumProcessModules(process, mods, sizeof(mods), &needed)) { + int i; + needed /= sizeof(HMODULE); + for (i = 0; i < needed; ++i ) { + wchar_t modName[MAX_PATH]; + if (GetModuleFileNameEx(process, mods[i], modName, MAX_PATH)) { + wchar_t * p = wcsrchr(modName, L'\\'); + if (p) { + *p = 0; // Null terminate there for future reference + if (!wcscmp(++p, L"cygwin1.dll")) { + _isCygwin = true; + // Store away the bind dir + cygwinBin = wcsdup(modName); + return _isCygwin; + } + } + } + } + } + + _isCygwin = false; + return _isCygwin; } +bool runCygwinCommand(wchar_t * command) { + wchar_t cygcmd[1024]; + swprintf(cygcmd, L"%s\\%s", cygwinBin, command); + + STARTUPINFO si; + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + PROCESS_INFORMATION pi; + ZeroMemory(&pi, sizeof(pi)); + if (CreateProcess(NULL, cygcmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { + WaitForSingleObject(pi.hProcess, INFINITE); + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + return true; + } else if (CreateProcess(NULL, command, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { + WaitForSingleObject(pi.hProcess, INFINITE); + CloseHandle(pi.hThread); + CloseHandle(pi.hProcess); + return true; + } + return false; +} -extern "C" int _tmain(int argc, _TCHAR * argv[]) { +void ensureSize(wchar_t** ptr, int* psize, int requiredLength) { + int size= *psize; + if (requiredLength > size) { + size= 2*size; + if (size < requiredLength) { + size= requiredLength; + } + *ptr= (wchar_t *)realloc(*ptr, size * sizeof(wchar_t)); + if (NULL == *ptr) { + *psize= 0; + } else { + *psize= size; + } + } +} + +int main() { + + int argc; + wchar_t ** argv = CommandLineToArgvW(GetCommandLine(), &argc); // Make sure that we've been passed the right number of arguments - if (argc < 7) { - _tprintf(_T("Usage: %s (Three InheritableEventHandles) (CommandLineToSpawn)\n"), - argv[0]); - return(0); - } + if (argc < 7) { + _tprintf(_T("Usage: %s (Three InheritableEventHandles) (CommandLineToSpawn)\n"), + argv[0]); + return(0); + } - // Construct the full command line - int nCmdLineLength= MAX_CMD_LINE_LENGTH; - _TCHAR * szCmdLine= (_TCHAR *)malloc(nCmdLineLength * sizeof(_TCHAR)); - szCmdLine[0]= 0; - int nPos = 0; + // Construct the full command line + int nCmdLineLength= MAX_CMD_LINE_LENGTH; + wchar_t * szCmdLine= (wchar_t *)malloc(nCmdLineLength * sizeof(wchar_t)); + szCmdLine[0]= 0; + int nPos = 0; - for(int i = 6; i < argc; ++i) - { + for(int i = 6; i < argc; ++i) + { int nCpyLen; - int len= _tcslen(argv[i]); + int len= wcslen(argv[i]); int requiredSize= nPos+len+2; if (requiredSize > 32*1024) { #ifdef DEBUG_MONITOR OutputDebugStringW(_T("Command line too long!\n")); #endif return 0; - } + } ensureSize(&szCmdLine, &nCmdLineLength, requiredSize); if (NULL == szCmdLine) { #ifdef DEBUG_MONITOR @@ -109,100 +169,97 @@ extern "C" int _tmain(int argc, _TCHAR * argv[]) { return 0; } if(0 > (nCpyLen = copyTo(szCmdLine + nPos, argv[i], len, nCmdLineLength - nPos))) - { + { #ifdef DEBUG_MONITOR - OutputDebugStringW(_T("Not enough space to build command line\n")); + OutputDebugStringW(_T("Not enough space to build command line\n")); #endif - return 0; + return 0; } nPos += nCpyLen; szCmdLine[nPos] = _T(' '); ++nPos; - } - szCmdLine[nPos] = _T('\0'); + } + szCmdLine[nPos] = _T('\0'); - STARTUPINFOW si = { sizeof(si) }; - PROCESS_INFORMATION pi = { 0 }; - DWORD dwExitCode = 0; + STARTUPINFOW si = {sizeof(si)}; + PROCESS_INFORMATION pi = {0}; + DWORD dwExitCode = 0; #ifdef DEBUG_MONITOR - int currentPID = GetCurrentProcessId(); - _TCHAR buffer[MAX_CMD_LINE_LENGTH]; + int currentPID = GetCurrentProcessId(); + wchar_t buffer[MAX_CMD_LINE_LENGTH]; #endif - - BOOL exitProc = FALSE; - HANDLE waitEvent = OpenEventW(EVENT_ALL_ACCESS, TRUE, argv[4]); - HANDLE h[3]; - h[0] = OpenEventW(EVENT_ALL_ACCESS, TRUE, argv[3]); - h[2] = OpenEventW(EVENT_ALL_ACCESS, TRUE, argv[5]); // This is a terminate event - SetConsoleCtrlHandler(HandlerRoutine, TRUE); + BOOL exitProc = FALSE; + HANDLE waitEvent = OpenEventW(EVENT_ALL_ACCESS, TRUE, argv[4]); + HANDLE h[3]; + h[0] = OpenEventW(EVENT_ALL_ACCESS, TRUE, argv[3]); + h[2] = OpenEventW(EVENT_ALL_ACCESS, TRUE, argv[5]); // This is a terminate event + SetConsoleCtrlHandler(HandlerRoutine, TRUE); - int parentPid = _tcstol(argv[1], NULL, 10); - int nCounter = _tcstol(argv[2], NULL, 10); - _TCHAR inPipeName[PIPE_NAME_LENGTH]; - _TCHAR outPipeName[PIPE_NAME_LENGTH]; - _TCHAR errPipeName[PIPE_NAME_LENGTH]; - - _stprintf(inPipeName, _T("\\\\.\\pipe\\stdin%08i%010i"), parentPid, nCounter); - _stprintf(outPipeName, _T("\\\\.\\pipe\\stdout%08i%010i"), parentPid, nCounter); - _stprintf(errPipeName, _T("\\\\.\\pipe\\stderr%08i%010i"), parentPid, nCounter); + int parentPid = wcstol(argv[1], NULL, 10); + int nCounter = wcstol(argv[2], NULL, 10); + wchar_t inPipeName[PIPE_NAME_LENGTH]; + wchar_t outPipeName[PIPE_NAME_LENGTH]; + wchar_t errPipeName[PIPE_NAME_LENGTH]; + + swprintf(inPipeName, L"\\\\.\\pipe\\stdin%08i%010i", parentPid, nCounter); + swprintf(outPipeName, L"\\\\.\\pipe\\stdout%08i%010i", parentPid, nCounter); + swprintf(errPipeName, L"\\\\.\\pipe\\stderr%08i%010i", parentPid, nCounter); #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Pipes: %s, %s, %s\n"), inPipeName, outPipeName, errPipeName); + swprintf(buffer, _T("Pipes: %s, %s, %s\n"), inPipeName, outPipeName, errPipeName); OutputDebugStringW(buffer); #endif - - HANDLE stdHandles[3]; - SECURITY_ATTRIBUTES sa; - sa.nLength = sizeof(SECURITY_ATTRIBUTES); - sa.bInheritHandle = TRUE; - sa.lpSecurityDescriptor = NULL; + HANDLE stdHandles[3]; - if((INVALID_HANDLE_VALUE == (stdHandles[0] = CreateFileW(inPipeName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, &sa))) || - (INVALID_HANDLE_VALUE == (stdHandles[1] = CreateFileW(outPipeName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, &sa))) || - (INVALID_HANDLE_VALUE == (stdHandles[2] = CreateFileW(errPipeName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, &sa)))) - { + SECURITY_ATTRIBUTES sa; + sa.nLength = sizeof(SECURITY_ATTRIBUTES); + sa.bInheritHandle = TRUE; + sa.lpSecurityDescriptor = NULL; + + if((INVALID_HANDLE_VALUE == (stdHandles[0] = CreateFileW(inPipeName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, &sa))) || + (INVALID_HANDLE_VALUE == (stdHandles[1] = CreateFileW(outPipeName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, &sa))) || + (INVALID_HANDLE_VALUE == (stdHandles[2] = CreateFileW(errPipeName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, &sa)))) + { #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Failed to open pipe %i, %i, %i: %i\n"), stdHandles[0], stdHandles[1], stdHandles[2], GetLastError()); - OutputDebugStringW(buffer); + swprintf(buffer, _T("Failed to open pipe %i, %i, %i: %i\n"), stdHandles[0], stdHandles[1], stdHandles[2], GetLastError()); + OutputDebugStringW(buffer); #endif CloseHandle(stdHandles[0]); CloseHandle(stdHandles[1]); CloseHandle(stdHandles[2]); return -1;; - } - SetHandleInformation(stdHandles[0], HANDLE_FLAG_INHERIT, TRUE); - SetHandleInformation(stdHandles[1], HANDLE_FLAG_INHERIT, TRUE); - SetHandleInformation(stdHandles[2], HANDLE_FLAG_INHERIT, TRUE); + } + SetHandleInformation(stdHandles[0], HANDLE_FLAG_INHERIT, TRUE); + SetHandleInformation(stdHandles[1], HANDLE_FLAG_INHERIT, TRUE); + SetHandleInformation(stdHandles[2], HANDLE_FLAG_INHERIT, TRUE); - if(!SetStdHandle(STD_INPUT_HANDLE, stdHandles[0]) || - !SetStdHandle(STD_OUTPUT_HANDLE, stdHandles[1]) || - !SetStdHandle(STD_ERROR_HANDLE, stdHandles[2])) { + if(!SetStdHandle(STD_INPUT_HANDLE, stdHandles[0]) || + !SetStdHandle(STD_OUTPUT_HANDLE, stdHandles[1]) || + !SetStdHandle(STD_ERROR_HANDLE, stdHandles[2])) { #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Failed to reassign standard streams: %i\n"), GetLastError()); - OutputDebugStringW(buffer); + swprintf(buffer, _T("Failed to reassign standard streams: %i\n"), GetLastError()); + OutputDebugStringW(buffer); #endif CloseHandle(stdHandles[0]); CloseHandle(stdHandles[1]); CloseHandle(stdHandles[2]); return -1;; - } + } - - #ifdef DEBUG_MONITOR - _TCHAR * lpvEnv = GetEnvironmentStringsW(); + wchar_t * lpvEnv = GetEnvironmentStringsW(); // If the returned pointer is NULL, exit. if (lpvEnv == NULL) - OutputDebugStringW(_T("Cannot Read Environment\n")); + OutputDebugStringW(_T("Cannot Read Environment\n")); else { // Variable strings are separated by NULL byte, and the block is // terminated by a NULL byte. - + OutputDebugStringW(_T("Starter: Environment\n")); - for (_TCHAR * lpszVariable = (_TCHAR *) lpvEnv; *lpszVariable; lpszVariable+=_tcslen(lpszVariable) + 1) { - _stprintf(buffer, _T("%s\n"), lpszVariable); + for (wchar_t * lpszVariable = (wchar_t *) lpvEnv; *lpszVariable; lpszVariable+=wcslen(lpszVariable) + 1) { + swprintf(buffer, _T("%s\n"), lpszVariable); OutputDebugStringW(buffer); } @@ -210,86 +267,111 @@ extern "C" int _tmain(int argc, _TCHAR * argv[]) { } #endif #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Starting: %s\n"), szCmdLine); + swprintf(buffer, _T("Starting: %s\n"), szCmdLine); OutputDebugStringW(buffer); #endif // Create job object if it is possible - HMODULE hKernel = GetModuleHandle("kernel32.dll"); + HMODULE hKernel = GetModuleHandle(L"kernel32.dll"); HANDLE hJob = NULL; - HANDLE (WINAPI * pCreateJobObject)(LPSECURITY_ATTRIBUTES lpJobAttributes, - char * lpName); + HANDLE (WINAPI * pCreateJobObject)(LPSECURITY_ATTRIBUTES lpJobAttributes, + char * lpName); *(FARPROC *)&pCreateJobObject = - GetProcAddress(hKernel, "CreateJobObjectA"); + GetProcAddress(hKernel, "CreateJobObjectA"); if(NULL != pCreateJobObject) - hJob = pCreateJobObject(NULL, NULL); - // Spawn the other processes as part of this Process Group - BOOL f = CreateProcessW(NULL, szCmdLine, NULL, NULL, TRUE, - 0, NULL, NULL, &si, &pi); - // We don't need them any more - CloseHandle(stdHandles[0]); - CloseHandle(stdHandles[1]); - CloseHandle(stdHandles[2]); - if (f) { + hJob = pCreateJobObject(NULL, NULL); + // Spawn the other processes as part of this Process Group + BOOL f = CreateProcessW(NULL, szCmdLine, NULL, NULL, TRUE, + 0, NULL, NULL, &si, &pi); + // We don't need them any more + CloseHandle(stdHandles[0]); + CloseHandle(stdHandles[1]); + CloseHandle(stdHandles[2]); + if (f) { #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Process %i started\n"), pi.dwProcessId); - OutputDebugStringW(buffer); + swprintf(buffer, _T("Process %i started\n"), pi.dwProcessId); + OutputDebugStringW(buffer); #endif - SetEvent(waitEvent); // Means thar process has been spawned - CloseHandle(pi.hThread); - h[1] = pi.hProcess; + SetEvent(waitEvent); // Means thar process has been spawned + CloseHandle(pi.hThread); + h[1] = pi.hProcess; - if(NULL != hJob) { - HANDLE (WINAPI * pAssignProcessToJobObject)(HANDLE job, HANDLE process); - *(FARPROC *)&pAssignProcessToJobObject = + if(NULL != hJob) { + HANDLE (WINAPI * pAssignProcessToJobObject)(HANDLE job, HANDLE process); + *(FARPROC *)&pAssignProcessToJobObject = GetProcAddress(hKernel, "AssignProcessToJobObjectA"); - if(NULL != pAssignProcessToJobObject) + if(NULL != pAssignProcessToJobObject) if(!pAssignProcessToJobObject(hJob, pi.hProcess)) { #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Cannot assign process %i to a job\n"), pi.dwProcessId); + swprintf(buffer, _T("Cannot assign process %i to a job\n"), pi.dwProcessId); OutputDebugStringW(buffer); DisplayErrorMessage(); #endif } - } + } - while(!exitProc) - { - // Wait for the spawned-process to die or for the event - // indicating that the processes should be forcibly killed. - switch (WaitForMultipleObjects(3, h, FALSE, INFINITE)) + while(!exitProc) + { + // Wait for the spawned-process to die or for the event + // indicating that the processes should be forcibly killed. + switch (WaitForMultipleObjects(3, h, FALSE, INFINITE)) { - case WAIT_OBJECT_0 + 0: // Send Ctrl-C + case WAIT_OBJECT_0 + 0: // Send Ctrl-C #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("starter (PID %i) received CTRL-C event\n"), currentPID); + swprintf(buffer, _T("starter (PID %i) received CTRL-C event\n"), currentPID); OutputDebugStringW(buffer); #endif - GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); + if (isCygwin(h[1])) { + // Need to issue a kill command + wchar_t kill[1024]; + swprintf(kill, L"kill -SIGINT %d", pi.dwProcessId); + if (!runCygwinCommand(kill)) { + // fall back to console event + GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); + } + } else { + GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); + } + SetEvent(waitEvent); break; - case WAIT_OBJECT_0 + 1: // App terminated normally + case WAIT_OBJECT_0 + 1: // App terminated normally // Make it's exit code our exit code #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("starter: launched process has been terminated(PID %i)\n"), - pi.dwProcessId); + swprintf(buffer, _T("starter: launched process has been terminated(PID %i)\n"), + pi.dwProcessId); OutputDebugStringW(buffer); #endif GetExitCodeProcess(pi.hProcess, &dwExitCode); exitProc = TRUE; break; - case WAIT_OBJECT_0 + 2: // Kill + + case WAIT_OBJECT_0 + 2: // Kill #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("starter received KILL event (PID %i)\n"), currentPID); + swprintf(buffer, _T("starter received KILL event (PID %i)\n"), currentPID); OutputDebugStringW(buffer); #endif - GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); + if (isCygwin(h[1])) { + // Need to issue a kill command + wchar_t kill[1024]; + swprintf(kill, L"kill -SIGTERM %d", pi.dwProcessId); + if (!runCygwinCommand(kill)) { + // fall back to console event + GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); + } + } else { + GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0); + } + + SetEvent(waitEvent); + if(NULL != hJob) { HANDLE (WINAPI * pTerminateJobObject)(HANDLE job, UINT uExitCode); *(FARPROC *)&pTerminateJobObject = - GetProcAddress(hKernel, "TerminateJobObjectA"); + GetProcAddress(hKernel, "TerminateJobObjectA"); if(NULL != pTerminateJobObject) { - if(!pTerminateJobObject(hJob, -1)) { + if(!pTerminateJobObject(hJob, (DWORD)-1)) { #ifdef DEBUG_MONITOR OutputDebugStringW(_T("Cannot terminate job\n")); DisplayErrorMessage(); @@ -299,37 +381,37 @@ extern "C" int _tmain(int argc, _TCHAR * argv[]) { } else exitProc = TRUE; break; - default: - // Unexpected code + default: + // Unexpected code #ifdef DEBUG_MONITOR DisplayErrorMessage(); #endif exitProc = TRUE; break; - } - - } - CloseHandle(pi.hProcess); - } else { + } + + } + CloseHandle(pi.hProcess); + } else { #ifdef DEBUG_MONITOR - _stprintf(buffer, _T("Cannot start: %s\n"), szCmdLine); - OutputDebugStringW(buffer); + swprintf(buffer, _T("Cannot start: %s\n"), szCmdLine); + OutputDebugStringW(buffer); - DisplayErrorMessage(); + DisplayErrorMessage(); #endif - } - - if (NULL != szCmdLine) - { - free(szCmdLine); - } + } - CloseHandle(waitEvent); - CloseHandle(h[0]); - CloseHandle(h[1]); - CloseHandle(h[2]); - - return(dwExitCode); + if (NULL != szCmdLine) + { + free(szCmdLine); + } + + CloseHandle(waitEvent); + CloseHandle(h[0]); + CloseHandle(h[1]); + CloseHandle(h[2]); + + return(dwExitCode); } ///////////////////////////////////////////////////////////////////////////////////// @@ -341,8 +423,8 @@ extern "C" int _tmain(int argc, _TCHAR * argv[]) { // availSpace - size of the target buffer // Return :number of bytes used in target, or -1 in case of error ///////////////////////////////////////////////////////////////////////////////////// -int copyTo(_TCHAR * target, const _TCHAR * source, int cpyLength, int availSpace) -{ +int copyTo(wchar_t * target, const wchar_t * source, int cpyLength, + int availSpace) { BOOL bSlash = FALSE; int i = 0, j = 0; int totCpyLength = cpyLength; @@ -352,81 +434,61 @@ int copyTo(_TCHAR * target, const _TCHAR * source, int cpyLength, int availSpace #define QUOTATION_NONE 2 int nQuotationMode = 0; - if(availSpace <= cpyLength) // = to reserve space for '\0' + if (availSpace <= cpyLength) // = to reserve space for '\0' return -1; - if((_T('\"') == *source) && (_T('\"') == *(source + cpyLength - 1))) - { + if ((_T('\"') == *source) && (_T('\"') == *(source + cpyLength - 1))) { // Already done nQuotationMode = QUOTATION_DONE; - } - else - if(_tcschr(source, _T(' ')) == NULL) - { + } else if (wcschr(source, _T(' '))== NULL) { // No reason to quotate term becase it doesn't have embedded spaces nQuotationMode = QUOTATION_NONE; - } - else - { + } else { // Needs to be quotated nQuotationMode = QUOTATION_DO; *target = _T('\"'); ++j; - } + } - for(; i < cpyLength; ++i, ++j) - { - if(source[i] == _T('\\')) + for (; i < cpyLength; ++i, ++j) { + if (source[i] == _T('\\')) bSlash = TRUE; else // Don't escape embracing quotation marks - if((source[i] == _T('\"')) && !((nQuotationMode == QUOTATION_DONE) && ((i == 0) || (i == (cpyLength - 1))) ) ) - { - if(!bSlash) - { - if(j == availSpace) + if ((source[i] == _T('\"')) && !((nQuotationMode == QUOTATION_DONE) && ((i == 0) || (i == (cpyLength - 1))) )) { + if (!bSlash) { + if (j == availSpace) return -1; target[j] = _T('\\'); ++j; - } - bSlash = FALSE; } - else + bSlash = FALSE; + } else bSlash = FALSE; - if(j == availSpace) + if (j == availSpace) return -1; target[j] = source[i]; - } + } - if(nQuotationMode == QUOTATION_DO) - { - if(j == availSpace) + if (nQuotationMode == QUOTATION_DO) { + if (j == availSpace) return -1; target[j] = _T('\"'); ++j; - } + } return j; } - void DisplayErrorMessage() { - _TCHAR * lpMsgBuf; - FormatMessageW( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - GetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (_TCHAR *) &lpMsgBuf, - 0, - NULL - ); + wchar_t * lpMsgBuf; + FormatMessageW( + FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (wchar_t *) &lpMsgBuf, 0, NULL); OutputDebugStringW(lpMsgBuf); // Free the buffer. - LocalFree( lpMsgBuf ); + LocalFree(lpMsgBuf); } - //////////////////////////////// End of File ////////////////////////////////// diff --git a/core/org.eclipse.cdt.core.win32/library/starter/starter.dep b/core/org.eclipse.cdt.core.win32/library/starter/starter.dep deleted file mode 100644 index 3f69f7967a6..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/starter/starter.dep +++ /dev/null @@ -1,5 +0,0 @@ -# Microsoft Developer Studio Generated Dependency File, included by starter.mak - -.\starter.cpp : \ - "..\..\..\program files\microsoft visual studio\vc98\include\basetsd.h"\ - diff --git a/core/org.eclipse.cdt.core.win32/library/starter/starter.dsp b/core/org.eclipse.cdt.core.win32/library/starter/starter.dsp deleted file mode 100644 index c9a65e318cc..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/starter/starter.dsp +++ /dev/null @@ -1,90 +0,0 @@ -# Microsoft Developer Studio Project File - Name="starter" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=starter - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "starter.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "starter.mak" CFG="starter - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "starter - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "starter - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "starter - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_UNICODE" /FR /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /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 /subsystem:console /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 /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "starter - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_UNICODE" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /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 /subsystem:console /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 /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "starter - Win32 Release" -# Name "starter - Win32 Debug" -# Begin Source File - -SOURCE=.\starter.cpp -# End Source File -# End Target -# End Project diff --git a/core/org.eclipse.cdt.core.win32/library/starter/starter.dsw b/core/org.eclipse.cdt.core.win32/library/starter/starter.dsw deleted file mode 100644 index 6ece142ca93..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/starter/starter.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "starter"=.\starter.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/core/org.eclipse.cdt.core.win32/library/starter/starter.mak b/core/org.eclipse.cdt.core.win32/library/starter/starter.mak deleted file mode 100644 index dcc47aeb674..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/starter/starter.mak +++ /dev/null @@ -1,193 +0,0 @@ -# Microsoft Developer Studio Generated NMAKE File, Based on starter.dsp -!IF "$(CFG)" == "" -CFG=starter - Win32 Debug -!MESSAGE No configuration specified. Defaulting to starter - Win32 Debug. -!ENDIF - -!IF "$(CFG)" != "starter - Win32 Release" && "$(CFG)" != "starter - Win32 Debug" -!MESSAGE Invalid configuration "$(CFG)" specified. -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "starter.mak" CFG="starter - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "starter - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "starter - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE -!ERROR An invalid configuration is specified. -!ENDIF - -!IF "$(OS)" == "Windows_NT" -NULL= -!ELSE -NULL=nul -!ENDIF - -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "starter - Win32 Release" - -OUTDIR=.\Release -INTDIR=.\Release -# Begin Custom Macros -OutDir=.\Release -# End Custom Macros - -ALL : "$(OUTDIR)\starter.exe" "$(OUTDIR)\starter.bsc" - - -CLEAN : - -@erase "$(INTDIR)\killer.obj" - -@erase "$(INTDIR)\killer.sbr" - -@erase "$(INTDIR)\starter.obj" - -@erase "$(INTDIR)\starter.sbr" - -@erase "$(INTDIR)\vc60.idb" - -@erase "$(OUTDIR)\starter.bsc" - -@erase "$(OUTDIR)\starter.exe" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_UNICODE" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\starter.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c -BSC32=bscmake.exe -BSC32_FLAGS=/nologo /o"$(OUTDIR)\starter.bsc" -BSC32_SBRS= \ - "$(INTDIR)\killer.sbr" \ - "$(INTDIR)\starter.sbr" - -"$(OUTDIR)\starter.bsc" : "$(OUTDIR)" $(BSC32_SBRS) - $(BSC32) @<< - $(BSC32_FLAGS) $(BSC32_SBRS) -<< - -LINK32=link.exe -LINK32_FLAGS=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 /subsystem:console /incremental:no /pdb:"$(OUTDIR)\starter.pdb" /machine:I386 /out:"$(OUTDIR)\starter.exe" -LINK32_OBJS= \ - "$(INTDIR)\killer.obj" \ - "$(INTDIR)\starter.obj" - -"$(OUTDIR)\starter.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ELSEIF "$(CFG)" == "starter - Win32 Debug" - -OUTDIR=.\Debug -INTDIR=.\Debug -# Begin Custom Macros -OutDir=.\Debug -# End Custom Macros - -ALL : "$(OUTDIR)\starter.exe" - - -CLEAN : - -@erase "$(INTDIR)\killer.obj" - -@erase "$(INTDIR)\starter.obj" - -@erase "$(INTDIR)\vc60.idb" - -@erase "$(INTDIR)\vc60.pdb" - -@erase "$(OUTDIR)\starter.exe" - -@erase "$(OUTDIR)\starter.ilk" - -@erase "$(OUTDIR)\starter.pdb" - -"$(OUTDIR)" : - if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" - -CPP_PROJ=/nologo /MD /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_UNICODE" /Fp"$(INTDIR)\starter.pch" /YX /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c -BSC32=bscmake.exe -BSC32_FLAGS=/nologo /o"$(OUTDIR)\starter.bsc" -BSC32_SBRS= \ - -LINK32=link.exe -LINK32_FLAGS=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 /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\starter.pdb" /debug /machine:I386 /out:"$(OUTDIR)\starter.exe" /pdbtype:sept -LINK32_OBJS= \ - "$(INTDIR)\killer.obj" \ - "$(INTDIR)\starter.obj" - -"$(OUTDIR)\starter.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) - $(LINK32) @<< - $(LINK32_FLAGS) $(LINK32_OBJS) -<< - -!ENDIF - -.c{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(INTDIR)}.obj:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.c{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cpp{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - -.cxx{$(INTDIR)}.sbr:: - $(CPP) @<< - $(CPP_PROJ) $< -<< - - -!IF "$(NO_EXTERNAL_DEPS)" != "1" -!IF EXISTS("starter.dep") -!INCLUDE "starter.dep" -!ELSE -!MESSAGE Warning: cannot find "starter.dep" -!ENDIF -!ENDIF - - -!IF "$(CFG)" == "starter - Win32 Release" || "$(CFG)" == "starter - Win32 Debug" -SOURCE=.\killer.cpp - -!IF "$(CFG)" == "starter - Win32 Release" - - -"$(INTDIR)\killer.obj" "$(INTDIR)\killer.sbr" : $(SOURCE) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "starter - Win32 Debug" - - -"$(INTDIR)\killer.obj" : $(SOURCE) "$(INTDIR)" - - -!ENDIF - -SOURCE=.\starter.cpp - -!IF "$(CFG)" == "starter - Win32 Release" - - -"$(INTDIR)\starter.obj" "$(INTDIR)\starter.sbr" : $(SOURCE) "$(INTDIR)" - - -!ELSEIF "$(CFG)" == "starter - Win32 Debug" - - -"$(INTDIR)\starter.obj" : $(SOURCE) "$(INTDIR)" - - -!ENDIF - - -!ENDIF - diff --git a/core/org.eclipse.cdt.core.win32/library/winreg/Makefile b/core/org.eclipse.cdt.core.win32/library/winreg/Makefile index be8a06fa3e9..3db60b08244 100644 --- a/core/org.eclipse.cdt.core.win32/library/winreg/Makefile +++ b/core/org.eclipse.cdt.core.win32/library/winreg/Makefile @@ -1,8 +1,11 @@ ifeq ($(JAVA_HOME),) -$(warning JAVA_HOME not set in environment) +$(error JAVA_HOME not set in environment) endif -# Defaults which can be overridden. +TARGET = $(INSTALL_DIR)/winreg.dll + +OBJS = winreg.o + OS = win32 ARCH = x86 @@ -14,9 +17,6 @@ CXXFLAGS = -DUNICODE -I$(JDK_INCLUDES) -I$(JDK_OS_INCLUDES) INSTALL_DIR = ../../os/$(OS)/$(ARCH) -TARGET = $(INSTALL_DIR)/winreg.dll -OBJS = winreg.o - all: $(TARGET) rebuild: clean all diff --git a/core/org.eclipse.cdt.core.win32/os/win32/x86/spawner.dll b/core/org.eclipse.cdt.core.win32/os/win32/x86/spawner.dll index c9d5ea1345cd955b52802ede16c1e4b24c08f981..d0187858fc1eed9d841ab99701717048f255d51f 100644 GIT binary patch literal 40674 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 literal 61440 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 diff --git a/core/org.eclipse.cdt.core.win32/os/win32/x86/starter.exe b/core/org.eclipse.cdt.core.win32/os/win32/x86/starter.exe index 3c0228a7175ee9d0a36f4a5d79b43f7561c9fabe..1c9214dde750c5c8e6032045ab649a84bf028890 100644 GIT binary patch literal 30331 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 I&LzqJ1wZqsB>(^b literal 16384 zcmeHNZERE58Gh|pG=xB`DW=h&tx0d%phA?+VW0*!qu4Zzr1&c_tSPREueo*|+r7R9 zwuZ0XM8mpx$|Qd9gH59QF=^|MO)4Fmrpjxw(zSF#<)fLxq-?4-cMyqgEu$LZ>^b*3 zEUc{3q*dyVbFBBA^M0Q9ea^X8Igb0kIYD(q6?)IU12596lO>t=>9rjD&O^`X?T!hQcU(}16- z&sIl&d|`)gUN=ikwk5VjL{3QDmUO~}@ec2`=HNLVyv>g$Alwd(<7FC}Ji3~^HkjIz zZlaCm?El;$?!;$=?9k->8uV9CrkNK{YGGnv-9*oJsEN21M=V|p1pmeW^IG%b7<5=> zbkYW4Cy2-5g>J)ZN`}N5#~mHP`TCV zCFTlP{;^%pcq&gHnc_Z^iXC^&vp%WIR*&x{TzxPxPD(eS(x)7rInRxfPjc#PQL@wy zt7d-TJ$Rt}LW^;Kh`D;XbrptXUx$4Y9VR;TQlN}rj-~S7u}w;9o@i{U=6`vlNjw1kicYHl>apqEbfk zg6+fD&Mq6<8hOBAO$kA`83JGEjsO#KdI`b^bFJZ(_Bf19K1|XL0|EA)v8^7Hpm813 z2fPsLQ!U2L@^R@nGKdZ;=YV;LT|j~5F=+_957`OG0+#HUB-u?_0zy6cox_7+pKA94z>VY!t#8npy_4j9^Md)ruBcq z=v{7v_+@MDzyhNnjBe@-Mn8j*u~y<`+S0Z`c8L#RYlyN-##%R2gXtUW683FOhjlpp zvBm5K6HR|)F)1)g1hp~ON_Z$c)vU$^qi6A02hX+t$%b@3mXQul% z(UK-P4=t`4?wmxBl}Y{Ut;H`T_0inz)?x$SCTt;H?M%C)%oQ;+tRJsf8avl4N7$D6 z?RhN(-_{fE&XAPG0pTEX?j1rG~X(aZGh}v?Tc2| z65Erq=HH*vdhi2?fSMbY3k9HLkH%BlmYmvO%xI~6M&7tgOa0xhIz` z9k=t!uMmN*uLLs#$Tf0+6 zatkz6yAR$aqUU5aD`)0!e7NJ|(*ep;3M6AzAdM23sraaDs7+77K*3>0fB%(Kp-Fx5C{ka T1Ofs9fq+0jARrL<6axPOB9Z%7 diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/EnvironmentReader.java b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/EnvironmentReader.java index bd8393832ed..a38efc4323f 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/EnvironmentReader.java +++ b/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/EnvironmentReader.java @@ -49,7 +49,7 @@ public class EnvironmentReader { charSet = "UTF-16" + (ByteOrder.BIG_ENDIAN.equals(ByteOrder.nativeOrder()) ? "BE" : "LE"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ } try { - p = ProcessFactory.getFactory().exec(command); + p = Runtime.getRuntime().exec(command); in = p.getInputStream(); BufferedReader br; if (null == charSet) {