diff options
author | Daniel Rosenberg <drosen@google.com> | 2020-05-12 02:17:15 -0700 |
---|---|---|
committer | Daniel Rosenberg <drosen@google.com> | 2020-05-20 04:49:39 +0000 |
commit | 3a1bccd9f226cba5b9558b41318afe0cd728a77a (patch) | |
tree | e4cbc0791f7994b626fbb30d585a041827c97838 /core/jni/filesystem_utils.h | |
parent | 19f6945f5660743f2698f0f755a68248b99eb05e (diff) |
Check property for sdcardfs use
Sdcardfs is only used if present in the kernel, and
external_storage.sdcardfs.enabled=0. For compatibility, this property
defaults to 1.
Bug: 155222498
Test: mount|grep "type sdcardfs" should find nothing after boot complete
if external_storage.sdcardfs.enabled=0
Change-Id: Ide648405c260ac46d07877c3a7b78a8bee48e09a
Diffstat (limited to 'core/jni/filesystem_utils.h')
-rw-r--r-- | core/jni/filesystem_utils.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/core/jni/filesystem_utils.h b/core/jni/filesystem_utils.h new file mode 100644 index 000000000000..c4728a09883b --- /dev/null +++ b/core/jni/filesystem_utils.h @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2020 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. + */ + +#ifndef FRAMEWORKS_BASE_CORE_JNI_MISC_UTILS_H_ +#define FRAMEWORKS_BASE_CORE_JNI_MISC_UTILS_H_ + +#include <android-base/file.h> +#include <android-base/logging.h> +#include <android-base/properties.h> +#include <fcntl.h> +#include <linux/fs.h> + +namespace { +static constexpr const char* kExternalStorageSdcardfs = "external_storage.sdcardfs.enabled"; + +static bool IsFilesystemSupported(const std::string& fsType) { + std::string supported; + if (!android::base::ReadFileToString("/proc/filesystems", &supported)) { + ALOGE("Failed to read supported filesystems"); + return false; + } + return supported.find(fsType + "\n") != std::string::npos; +} + +static inline bool IsSdcardfsUsed() { + return IsFilesystemSupported("sdcardfs") && + android::base::GetBoolProperty(kExternalStorageSdcardfs, true); +} +} // namespace +#endif // FRAMEWORKS_BASE_CORE_JNI_MISC_UTILS_H_ |