src/windows/native/java/lang/ProcessImpl_md.c

Print this page




 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         }