19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.os; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Rootimport libcore.io.ErrnoException; 20bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Rootimport libcore.io.Libcore; 21bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Rootimport libcore.io.StructStatFs; 22bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 24bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * Retrieve overall information about the space on a filesystem. This is a 25bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * wrapper for Unix statfs(). 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class StatFs { 28bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root private StructStatFs mStat; 29bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 31bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * Construct a new StatFs for looking at the stats of the filesystem at 32bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * {@code path}. Upon construction, the stat of the file system will be 33bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * performed, and the values retrieved available from the methods on this 34bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * class. 35bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * 36bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * @param path path in the desired file system to stat. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 38bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root public StatFs(String path) { 39bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root mStat = doStat(path); 40bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root } 41bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root 42bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root private static StructStatFs doStat(String path) { 43bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root try { 44bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root return Libcore.os.statfs(path); 45bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root } catch (ErrnoException e) { 46bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root throw new IllegalArgumentException("Invalid path: " + path, e); 47bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root } 48bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root } 49bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 51bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * Perform a restat of the file system referenced by this object. This is 52bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * the same as re-constructing the object with the same file system path, 53bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * and the new stat values are available upon return. 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 55bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root public void restat(String path) { 56bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root mStat = doStat(path); 57bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root } 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 60bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * The size, in bytes, of a block on the file system. This corresponds to 61bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * the Unix {@code statfs.f_bsize} field. 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 63bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root public int getBlockSize() { 64bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root return (int) mStat.f_bsize; 65bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root } 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 68bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * The total number of blocks on the file system. This corresponds to the 69bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * Unix {@code statfs.f_blocks} field. 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 71bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root public int getBlockCount() { 72bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root return (int) mStat.f_blocks; 73bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The total number of blocks that are free on the file system, including 77bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * reserved blocks (that are not available to normal applications). This 78bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * corresponds to the Unix {@code statfs.f_bfree} field. Most applications 79bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * will want to use {@link #getAvailableBlocks()} instead. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 81bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root public int getFreeBlocks() { 82bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root return (int) mStat.f_bfree; 83bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root } 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The number of blocks that are free on the file system and available to 87bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root * applications. This corresponds to the Unix {@code statfs.f_bavail} field. 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 89bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root public int getAvailableBlocks() { 90bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root return (int) mStat.f_bavail; 91bdd23ae9f5ea2b3e0720e76711345cad0fa8d6ddKenny Root } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 93