--- old/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java 2016-11-16 10:28:20.489497921 -0800 +++ new/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java 2016-11-16 10:28:20.432497921 -0800 @@ -485,21 +485,50 @@ buffer.release(); } } + + /** + * GetDiskFreeSpace( + * LPCTSTR lpRootPathName, + * LPDWORD lpSectorsPerCluster, + * LPDWORD lpBytesPerSector, + * LPDWORD lpNumberOfFreeClusters, + * LPDWORD lpTotalNumberOfClusters + * ) + */ + static DiskFreeSpace GetDiskFreeSpace(String path) + throws WindowsException + { + NativeBuffer buffer = asNativeBuffer(path); + try { + DiskFreeSpace space = new DiskFreeSpace(); + GetDiskFreeSpace0(buffer.address(), space); + return space; + } finally { + buffer.release(); + } + } + static class DiskFreeSpace { private long freeBytesAvailable; private long totalNumberOfBytes; private long totalNumberOfFreeBytes; + private long bytesPerSector; private DiskFreeSpace() { } public long freeBytesAvailable() { return freeBytesAvailable; } public long totalNumberOfBytes() { return totalNumberOfBytes; } public long totalNumberOfFreeBytes() { return totalNumberOfFreeBytes; } + public long bytesPerSector() { return bytesPerSector; } } private static native void GetDiskFreeSpaceEx0(long lpDirectoryName, DiskFreeSpace obj) throws WindowsException; + private static native void GetDiskFreeSpace0(long lpRootPathName, + DiskFreeSpace obj) + throws WindowsException; + /** * GetVolumePathName( * LPCTSTR lpszFileName,