7f36b19b6b
Set resource config_mtpReserveSpaceMegabytes to number of megabytes to reserve. If MTP has dedicated storage this value should be zero, but if MTP is sharing storage with the rest of the system, set this to a positive value to ensure that MTP activity does not result in the storage being too close to full. BUG: 3250924 Change-Id: I881c87240da268bad1ea1b99ad03673ab85ffdbf Signed-off-by: Mike Lockwood <lockwood@android.com>
82 lines
2.1 KiB
C++
82 lines
2.1 KiB
C++
/*
|
|
* Copyright (C) 2010 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.
|
|
*/
|
|
|
|
#define LOG_TAG "MtpStorage"
|
|
|
|
#include "MtpDebug.h"
|
|
#include "MtpDatabase.h"
|
|
#include "MtpStorage.h"
|
|
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/statfs.h>
|
|
#include <unistd.h>
|
|
#include <dirent.h>
|
|
#include <errno.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include <limits.h>
|
|
|
|
namespace android {
|
|
|
|
MtpStorage::MtpStorage(MtpStorageID id, const char* filePath, uint64_t reserveSpace)
|
|
: mStorageID(id),
|
|
mFilePath(filePath),
|
|
mMaxCapacity(0),
|
|
mReserveSpace(reserveSpace)
|
|
{
|
|
LOGD("MtpStorage id: %d path: %s\n", id, filePath);
|
|
}
|
|
|
|
MtpStorage::~MtpStorage() {
|
|
}
|
|
|
|
int MtpStorage::getType() const {
|
|
return MTP_STORAGE_FIXED_RAM;
|
|
}
|
|
|
|
int MtpStorage::getFileSystemType() const {
|
|
return MTP_STORAGE_FILESYSTEM_HIERARCHICAL;
|
|
}
|
|
|
|
int MtpStorage::getAccessCapability() const {
|
|
return MTP_STORAGE_READ_WRITE;
|
|
}
|
|
|
|
uint64_t MtpStorage::getMaxCapacity() {
|
|
if (mMaxCapacity == 0) {
|
|
struct statfs stat;
|
|
if (statfs(mFilePath, &stat))
|
|
return -1;
|
|
mMaxCapacity = (uint64_t)stat.f_blocks * (uint64_t)stat.f_bsize;
|
|
}
|
|
return mMaxCapacity;
|
|
}
|
|
|
|
uint64_t MtpStorage::getFreeSpace() {
|
|
struct statfs stat;
|
|
if (statfs(mFilePath, &stat))
|
|
return -1;
|
|
uint64_t freeSpace = (uint64_t)stat.f_bavail * (uint64_t)stat.f_bsize;
|
|
return (freeSpace > mReserveSpace ? freeSpace - mReserveSpace : 0);
|
|
}
|
|
|
|
const char* MtpStorage::getDescription() const {
|
|
return "Device Storage";
|
|
}
|
|
|
|
} // namespace android
|