450 } 451 452 JNIEXPORT void JNICALL 453 Java_sun_nio_ch_FileDispatcherImpl_closeByHandle(JNIEnv *env, jclass clazz, jlong fd) 454 { 455 closeFile(env, fd); 456 } 457 458 JNIEXPORT jlong JNICALL 459 Java_sun_nio_ch_FileDispatcherImpl_duplicateHandle(JNIEnv *env, jclass this, jlong handle) 460 { 461 HANDLE hProcess = GetCurrentProcess(); 462 HANDLE hFile = jlong_to_ptr(handle); 463 HANDLE hResult; 464 BOOL res = DuplicateHandle(hProcess, hFile, hProcess, &hResult, 0, FALSE, 465 DUPLICATE_SAME_ACCESS); 466 if (res == 0) 467 JNU_ThrowIOExceptionWithLastError(env, "DuplicateHandle failed"); 468 return ptr_to_jlong(hResult); 469 } | 450 } 451 452 JNIEXPORT void JNICALL 453 Java_sun_nio_ch_FileDispatcherImpl_closeByHandle(JNIEnv *env, jclass clazz, jlong fd) 454 { 455 closeFile(env, fd); 456 } 457 458 JNIEXPORT jlong JNICALL 459 Java_sun_nio_ch_FileDispatcherImpl_duplicateHandle(JNIEnv *env, jclass this, jlong handle) 460 { 461 HANDLE hProcess = GetCurrentProcess(); 462 HANDLE hFile = jlong_to_ptr(handle); 463 HANDLE hResult; 464 BOOL res = DuplicateHandle(hProcess, hFile, hProcess, &hResult, 0, FALSE, 465 DUPLICATE_SAME_ACCESS); 466 if (res == 0) 467 JNU_ThrowIOExceptionWithLastError(env, "DuplicateHandle failed"); 468 return ptr_to_jlong(hResult); 469 } 470 471 JNIEXPORT jint JNICALL 472 Java_sun_nio_ch_FileDispatcherImpl_setDirect0(JNIEnv *env, jclass this, 473 jobject buffer) 474 { 475 jint result = -1; 476 DWORD sectorsPerCluster; 477 DWORD bytesPerSector; 478 DWORD numberOfFreeClusters; 479 DWORD totalNumberOfClusters; 480 LPCWSTR lpRootPathName = (*env)->GetDirectBufferAddress(env, buffer); 481 BOOL res = GetDiskFreeSpaceW(lpRootPathName, 482 §orsPerCluster, 483 &bytesPerSector, 484 &numberOfFreeClusters, 485 &totalNumberOfClusters); 486 if (res == 0) { 487 JNU_ThrowIOExceptionWithLastError(env, "DirectIO setup failed"); 488 } 489 result = bytesPerSector; 490 return result; 491 } |