< prev index next >

src/java.base/windows/native/libnio/ch/FileDispatcherImpl.c

Print this page

        

*** 454,458 **** --- 454,488 ---- DUPLICATE_SAME_ACCESS); if (res == 0) JNU_ThrowIOExceptionWithLastError(env, "DuplicateHandle failed"); return ptr_to_jlong(hResult); } + + JNIEXPORT jint JNICALL + Java_sun_nio_ch_FileDispatcherImpl_setDirect0(JNIEnv *env, jclass this, + jobject fdObj, jobject buffer) + { + jint result = -1; + + HANDLE orig = (HANDLE)(handleval(env, fdObj)); + + HANDLE modify = ReOpenFile(orig, 0, 0, + FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH); + + if (modify != INVALID_HANDLE_VALUE) { + DWORD sectorsPerCluster; + DWORD bytesPerSector; + DWORD numberOfFreeClusters; + DWORD totalNumberOfClusters; + LPCWSTR lpRootPathName = (*env)->GetDirectBufferAddress(env, buffer); + BOOL res = GetDiskFreeSpaceW(lpRootPathName, + &sectorsPerCluster, + &bytesPerSector, + &numberOfFreeClusters, + &totalNumberOfClusters); + if (res == 0) { + JNU_ThrowIOExceptionWithLastError(env, "DirectIO setup failed"); + } + result = bytesPerSector; + } + return result; + }
< prev index next >