--- old/src/java.base/windows/native/libnio/fs/WindowsNativeDispatcher.c 2016-11-16 10:28:20.918497925 -0800 +++ new/src/java.base/windows/native/libnio/fs/WindowsNativeDispatcher.c 2016-11-16 10:28:20.860497925 -0800 @@ -59,6 +59,8 @@ static jfieldID diskSpace_totalBytes; static jfieldID diskSpace_totalFree; +static jfieldID diskSpace_bytesPerSector; + static jfieldID account_domain; static jfieldID account_name; static jfieldID account_use; @@ -121,6 +123,8 @@ CHECK_NULL(diskSpace_totalBytes); diskSpace_totalFree = (*env)->GetFieldID(env, clazz, "totalNumberOfFreeBytes", "J"); CHECK_NULL(diskSpace_totalFree); + diskSpace_bytesPerSector = (*env)->GetFieldID(env, clazz, "bytesPerSector", "J"); + CHECK_NULL(diskSpace_bytesPerSector); clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$Account"); CHECK_NULL(clazz); @@ -582,6 +586,30 @@ long_to_jlong(totalNumberOfFreeBytes.QuadPart)); } +JNIEXPORT void JNICALL +Java_sun_nio_fs_WindowsNativeDispatcher_GetDiskFreeSpace0(JNIEnv* env, jclass this, + jlong address, jobject obj) +{ + DWORD sectorsPerCluster; + DWORD bytesPerSector; + DWORD numberOfFreeClusters; + DWORD totalNumberOfClusters; + LPCWSTR lpRootPathName = jlong_to_ptr(address); + + + BOOL res = GetDiskFreeSpaceW(lpRootPathName, + §orsPerCluster, + &bytesPerSector, + &numberOfFreeClusters, + &totalNumberOfClusters); + if (res == 0) { + throwWindowsException(env, GetLastError()); + return; + } + + (*env)->SetLongField(env, obj, diskSpace_bytesPerSector, + long_to_jlong(bytesPerSector)); +} JNIEXPORT jstring JNICALL Java_sun_nio_fs_WindowsNativeDispatcher_GetVolumePathName0(JNIEnv* env, jclass this,