From 1c1e3e209c687d9ef0e86c80a113208251a375b9 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Tue, 18 Oct 2022 16:08:09 -0400 Subject: [PATCH] Exfat can be mounted with "exfat" kernel fs driver, or "sdfat" or "texfat" (Samsung and Sony variants) @AndyCGYan: Adapt to LineageOS vold Change-Id: I331e66d8cb37664adbd493b9190123e29f01fd9d --- Utils.cpp | 5 +++++ fs/Exfat.cpp | 11 +++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Utils.cpp b/Utils.cpp index a7e85f2..fb67067 100644 --- a/Utils.cpp +++ b/Utils.cpp @@ -1059,6 +1059,11 @@ bool IsFilesystemSupported(const std::string& fsType) { /* fuse filesystems */ supported.append("fuse\tntfs\n"); + /* treat sdfat/texfat as exfat */ + if (supported.find("sdfat\n") != std::string::npos || supported.find("texfat\n") != std::string::npos) { + supported.append("\texfat\n"); + } + return supported.find(fsType + "\n") != std::string::npos; } diff --git a/fs/Exfat.cpp b/fs/Exfat.cpp index c8b19e0..46a0e2d 100644 --- a/fs/Exfat.cpp +++ b/fs/Exfat.cpp @@ -61,13 +61,20 @@ status_t Mount(const std::string& source, const std::string& target, int ownerUi auto mountData = android::base::StringPrintf("uid=%d,gid=%d,fmask=%o,dmask=%o", ownerUid, ownerGid, permMask, permMask); - if (mount(source.c_str(), target.c_str(), "exfat", mountFlags, mountData.c_str()) == 0) { + const char *fs = "exfat"; + if (IsFilesystemSupported("sdfat")) { + fs = "sdfat"; + } else if (IsFilesystemSupported("texfat")) { + fs = "texfat"; + } + + if (mount(source.c_str(), target.c_str(), fs, mountFlags, mountData.c_str()) == 0) { return 0; } PLOG(ERROR) << "Mount failed; attempting read-only"; mountFlags |= MS_RDONLY; - if (mount(source.c_str(), target.c_str(), "exfat", mountFlags, mountData.c_str()) == 0) { + if (mount(source.c_str(), target.c_str(), fs, mountFlags, mountData.c_str()) == 0) { return 0; } -- 2.25.1