Loading core/jni/android_os_storage_StorageManager.cpp +3 −13 Original line number Diff line number Diff line Loading @@ -17,33 +17,23 @@ #define LOG_TAG "StorageManager" #include <android-base/file.h> #include <android-base/logging.h> #include <android-base/properties.h> #include <android-base/unique_fd.h> #include <fcntl.h> #include <linux/fs.h> #include <nativehelper/JNIHelp.h> #include "core_jni_helpers.h" #include "filesystem_utils.h" namespace android { static const char* kProcFilesystems = "/proc/filesystems"; // Checks whether the passed in filesystem is listed in /proc/filesystems static bool IsFilesystemSupported(const std::string& fsType) { std::string supported; if (!android::base::ReadFileToString(kProcFilesystems, &supported)) { PLOG(ERROR) << "Failed to read supported filesystems"; return false; } return supported.find(fsType + "\n") != std::string::npos; } jboolean android_os_storage_StorageManager_setQuotaProjectId(JNIEnv* env, jobject self, jstring path, jlong projectId) { struct fsxattr fsx; ScopedUtfChars utf_chars_path(env, path); static bool sdcardFsSupported = IsFilesystemSupported("sdcardfs"); static bool sdcardFsSupported = IsSdcardfsUsed(); if (sdcardFsSupported) { // sdcardfs doesn't support project ID quota tracking and takes care of quota // in a different way. Loading core/jni/com_android_internal_os_Zygote.cpp +10 −19 Original line number Diff line number Diff line Loading @@ -88,12 +88,13 @@ #include <utils/String8.h> #include <utils/Trace.h> #include "core_jni_helpers.h" #include <nativehelper/JNIHelp.h> #include <nativehelper/ScopedLocalRef.h> #include <nativehelper/ScopedPrimitiveArray.h> #include <nativehelper/ScopedUtfChars.h> #include "core_jni_helpers.h" #include "fd_utils.h" #include "filesystem_utils.h" #include "nativebridge/native_bridge.h" Loading Loading @@ -614,15 +615,6 @@ static void EnableDebugger() { } } static bool IsFilesystemSupported(const std::string& fsType) { std::string supported; if (!ReadFileToString("/proc/filesystems", &supported)) { ALOGE("Failed to read supported filesystems"); return false; } return supported.find(fsType + "\n") != std::string::npos; } static void PreApplicationInit() { // The child process sets this to indicate it's not the zygote. android_mallopt(M_SET_ZYGOTE_CHILD, nullptr, 0); Loading Loading @@ -1554,14 +1546,13 @@ static void isolateJitProfile(JNIEnv* env, jobjectArray pkg_data_info_list, static void BindMountStorageToLowerFs(const userid_t user_id, const uid_t uid, const char* dir_name, const char* package, fail_fn_t fail_fn) { bool hasSdcardFs = IsFilesystemSupported("sdcardfs"); bool hasSdcardFs = IsSdcardfsUsed(); std::string source; if (hasSdcardFs) { source = StringPrintf("/mnt/runtime/default/emulated/%d/%s/%s", user_id, dir_name, package); } else { source = StringPrintf("/mnt/pass_through/%d/emulated/%d/%s/%s", user_id, user_id, dir_name, package); source = StringPrintf("/mnt/pass_through/%d/emulated/%d/%s/%s", user_id, user_id, dir_name, package); } std::string target = StringPrintf("/storage/emulated/%d/%s/%s", user_id, dir_name, package); Loading core/jni/filesystem_utils.h 0 → 100644 +43 −0 Original line number Diff line number Diff line /* * 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_ Loading
core/jni/android_os_storage_StorageManager.cpp +3 −13 Original line number Diff line number Diff line Loading @@ -17,33 +17,23 @@ #define LOG_TAG "StorageManager" #include <android-base/file.h> #include <android-base/logging.h> #include <android-base/properties.h> #include <android-base/unique_fd.h> #include <fcntl.h> #include <linux/fs.h> #include <nativehelper/JNIHelp.h> #include "core_jni_helpers.h" #include "filesystem_utils.h" namespace android { static const char* kProcFilesystems = "/proc/filesystems"; // Checks whether the passed in filesystem is listed in /proc/filesystems static bool IsFilesystemSupported(const std::string& fsType) { std::string supported; if (!android::base::ReadFileToString(kProcFilesystems, &supported)) { PLOG(ERROR) << "Failed to read supported filesystems"; return false; } return supported.find(fsType + "\n") != std::string::npos; } jboolean android_os_storage_StorageManager_setQuotaProjectId(JNIEnv* env, jobject self, jstring path, jlong projectId) { struct fsxattr fsx; ScopedUtfChars utf_chars_path(env, path); static bool sdcardFsSupported = IsFilesystemSupported("sdcardfs"); static bool sdcardFsSupported = IsSdcardfsUsed(); if (sdcardFsSupported) { // sdcardfs doesn't support project ID quota tracking and takes care of quota // in a different way. Loading
core/jni/com_android_internal_os_Zygote.cpp +10 −19 Original line number Diff line number Diff line Loading @@ -88,12 +88,13 @@ #include <utils/String8.h> #include <utils/Trace.h> #include "core_jni_helpers.h" #include <nativehelper/JNIHelp.h> #include <nativehelper/ScopedLocalRef.h> #include <nativehelper/ScopedPrimitiveArray.h> #include <nativehelper/ScopedUtfChars.h> #include "core_jni_helpers.h" #include "fd_utils.h" #include "filesystem_utils.h" #include "nativebridge/native_bridge.h" Loading Loading @@ -614,15 +615,6 @@ static void EnableDebugger() { } } static bool IsFilesystemSupported(const std::string& fsType) { std::string supported; if (!ReadFileToString("/proc/filesystems", &supported)) { ALOGE("Failed to read supported filesystems"); return false; } return supported.find(fsType + "\n") != std::string::npos; } static void PreApplicationInit() { // The child process sets this to indicate it's not the zygote. android_mallopt(M_SET_ZYGOTE_CHILD, nullptr, 0); Loading Loading @@ -1554,14 +1546,13 @@ static void isolateJitProfile(JNIEnv* env, jobjectArray pkg_data_info_list, static void BindMountStorageToLowerFs(const userid_t user_id, const uid_t uid, const char* dir_name, const char* package, fail_fn_t fail_fn) { bool hasSdcardFs = IsFilesystemSupported("sdcardfs"); bool hasSdcardFs = IsSdcardfsUsed(); std::string source; if (hasSdcardFs) { source = StringPrintf("/mnt/runtime/default/emulated/%d/%s/%s", user_id, dir_name, package); } else { source = StringPrintf("/mnt/pass_through/%d/emulated/%d/%s/%s", user_id, user_id, dir_name, package); source = StringPrintf("/mnt/pass_through/%d/emulated/%d/%s/%s", user_id, user_id, dir_name, package); } std::string target = StringPrintf("/storage/emulated/%d/%s/%s", user_id, dir_name, package); Loading
core/jni/filesystem_utils.h 0 → 100644 +43 −0 Original line number Diff line number Diff line /* * 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_