add StatFs class from AOSP

This commit is contained in:
Julian Winkler
2023-08-10 11:02:30 +02:00
committed by Mis012
parent 44be3ff197
commit 447041066e
2 changed files with 156 additions and 0 deletions

View File

@@ -0,0 +1,155 @@
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.os;
import android.system.ErrnoException;
import android.system.Os;
import android.system.StructStatVfs;
/**
* Retrieve overall information about the space on a filesystem. This is a
* wrapper for Unix statvfs().
*/
public class StatFs {
private StructStatVfs mStat;
/**
* Construct a new StatFs for looking at the stats of the filesystem at
* {@code path}. Upon construction, the stat of the file system will be
* performed, and the values retrieved available from the methods on this
* class.
*
* @param path path in the desired file system to stat.
*
* @throws IllegalArgumentException if the file system access fails
*/
public StatFs(String path) {
mStat = doStat(path);
}
/**
* @throws IllegalArgumentException if the file system access fails
*/
private static StructStatVfs doStat(String path) {
try {
return Os.statvfs(path);
} catch (ErrnoException e) {
throw new IllegalArgumentException("Invalid path: " + path, e);
}
}
/**
* Perform a restat of the file system referenced by this object. This is
* the same as re-constructing the object with the same file system path,
* and the new stat values are available upon return.
*
* @throws IllegalArgumentException if the file system access fails
*/
public void restat(String path) {
mStat = doStat(path);
}
/**
* @deprecated Use {@link #getBlockSizeLong()} instead.
*/
@Deprecated
public int getBlockSize() {
return (int) mStat.f_frsize;
}
/**
* The size, in bytes, of a block on the file system. This corresponds to
* the Unix {@code statvfs.f_frsize} field.
*/
public long getBlockSizeLong() {
return mStat.f_frsize;
}
/**
* @deprecated Use {@link #getBlockCountLong()} instead.
*/
@Deprecated
public int getBlockCount() {
return (int) mStat.f_blocks;
}
/**
* The total number of blocks on the file system. This corresponds to the
* Unix {@code statvfs.f_blocks} field.
*/
public long getBlockCountLong() {
return mStat.f_blocks;
}
/**
* @deprecated Use {@link #getFreeBlocksLong()} instead.
*/
@Deprecated
public int getFreeBlocks() {
return (int) mStat.f_bfree;
}
/**
* The total number of blocks that are free on the file system, including
* reserved blocks (that are not available to normal applications). This
* corresponds to the Unix {@code statvfs.f_bfree} field. Most applications
* will want to use {@link #getAvailableBlocksLong()} instead.
*/
public long getFreeBlocksLong() {
return mStat.f_bfree;
}
/**
* The number of bytes that are free on the file system, including reserved
* blocks (that are not available to normal applications). Most applications
* will want to use {@link #getAvailableBytes()} instead.
*/
public long getFreeBytes() {
return mStat.f_bfree * mStat.f_frsize;
}
/**
* @deprecated Use {@link #getAvailableBlocksLong()} instead.
*/
@Deprecated
public int getAvailableBlocks() {
return (int) mStat.f_bavail;
}
/**
* The number of blocks that are free on the file system and available to
* applications. This corresponds to the Unix {@code statvfs.f_bavail} field.
*/
public long getAvailableBlocksLong() {
return mStat.f_bavail;
}
/**
* The number of bytes that are free on the file system and available to
* applications.
*/
public long getAvailableBytes() {
return mStat.f_bavail * mStat.f_frsize;
}
/**
* The total number of bytes supported by the file system.
*/
public long getTotalBytes() {
return mStat.f_blocks * mStat.f_frsize;
}
}

View File

@@ -173,6 +173,7 @@ hax_jar = jar('hax', [
'android/os/Process.java', 'android/os/Process.java',
'android/os/RemoteException.java', 'android/os/RemoteException.java',
'android/os/ResultReceiver.java', 'android/os/ResultReceiver.java',
'android/os/StatFs.java',
'android/os/SystemClock.java', 'android/os/SystemClock.java',
'android/os/Trace.java', 'android/os/Trace.java',
'android/os/UserHandle.java', 'android/os/UserHandle.java',