294 Java_java_lang_ProcessImpl_waitForInterruptibly(JNIEnv *env, jclass ignored, jlong handle) 295 { 296 HANDLE events[2]; 297 events[0] = (HANDLE) handle; 298 events[1] = JVM_GetThreadInterruptEvent(); 299 300 if (WaitForMultipleObjects(sizeof(events)/sizeof(events[0]), events, 301 FALSE, /* Wait for ANY event */ 302 INFINITE) /* Wait forever */ 303 == WAIT_FAILED) 304 win32Error(env, "WaitForMultipleObjects"); 305 } 306 307 JNIEXPORT void JNICALL 308 Java_java_lang_ProcessImpl_terminateProcess(JNIEnv *env, jclass ignored, jlong handle) 309 { 310 TerminateProcess((HANDLE) handle, 1); 311 } 312 313 JNIEXPORT jboolean JNICALL 314 Java_java_lang_ProcessImpl_closeHandle(JNIEnv *env, jclass ignored, jlong handle) 315 { 316 return CloseHandle((HANDLE) handle); 317 } 318 319 /** 320 * Returns a copy of the Unicode characters of a string. Fow now this 321 * function doesn't handle long path names and other issues. 322 */ 323 static WCHAR* getPath(JNIEnv *env, jstring ps) { 324 WCHAR *pathbuf = NULL; 325 const jchar *chars = (*(env))->GetStringChars(env, ps, NULL); 326 if (chars != NULL) { 327 size_t pathlen = wcslen(chars); 328 pathbuf = (WCHAR*)malloc((pathlen + 6) * sizeof(WCHAR)); 329 if (pathbuf == NULL) { 330 JNU_ThrowOutOfMemoryError(env, NULL); 331 } else { 332 wcscpy(pathbuf, chars); 333 } | 294 Java_java_lang_ProcessImpl_waitForInterruptibly(JNIEnv *env, jclass ignored, jlong handle) 295 { 296 HANDLE events[2]; 297 events[0] = (HANDLE) handle; 298 events[1] = JVM_GetThreadInterruptEvent(); 299 300 if (WaitForMultipleObjects(sizeof(events)/sizeof(events[0]), events, 301 FALSE, /* Wait for ANY event */ 302 INFINITE) /* Wait forever */ 303 == WAIT_FAILED) 304 win32Error(env, "WaitForMultipleObjects"); 305 } 306 307 JNIEXPORT void JNICALL 308 Java_java_lang_ProcessImpl_terminateProcess(JNIEnv *env, jclass ignored, jlong handle) 309 { 310 TerminateProcess((HANDLE) handle, 1); 311 } 312 313 JNIEXPORT jboolean JNICALL 314 Java_java_lang_ProcessImpl_hasProcessExited(JNIEnv *env, jclass ignored, jlong handle) 315 { 316 DWORD ret = WaitForSingleObject(handle, 0); 317 return ret == WAIT_TIMEOUT; 318 } 319 320 JNIEXPORT jboolean JNICALL 321 Java_java_lang_ProcessImpl_closeHandle(JNIEnv *env, jclass ignored, jlong handle) 322 { 323 return CloseHandle((HANDLE) handle); 324 } 325 326 /** 327 * Returns a copy of the Unicode characters of a string. Fow now this 328 * function doesn't handle long path names and other issues. 329 */ 330 static WCHAR* getPath(JNIEnv *env, jstring ps) { 331 WCHAR *pathbuf = NULL; 332 const jchar *chars = (*(env))->GetStringChars(env, ps, NULL); 333 if (chars != NULL) { 334 size_t pathlen = wcslen(chars); 335 pathbuf = (WCHAR*)malloc((pathlen + 6) * sizeof(WCHAR)); 336 if (pathbuf == NULL) { 337 JNU_ThrowOutOfMemoryError(env, NULL); 338 } else { 339 wcscpy(pathbuf, chars); 340 } |