OSDN Git Service

Support mounting exfat via fuse
authorChih-Wei Huang <cwhuang@linux.org.tw>
Mon, 4 May 2020 16:49:35 +0000 (00:49 +0800)
committerserver158 <server158@openthos.org>
Mon, 4 May 2020 16:52:12 +0000 (00:52 +0800)
Utils.cpp
fs/Exfat.cpp

index 3d1f79e..c5a483a 100644 (file)
--- a/Utils.cpp
+++ b/Utils.cpp
@@ -634,7 +634,8 @@ bool IsFilesystemSupported(const std::string& fsType) {
     }
 
     /* fuse filesystems */
-    supported.append("fuse\tntfs\n");
+    supported.append("fuse\tntfs\n"
+                     "fuse\texfat\n");
 
     if (supported.find(fsType + "\n") != std::string::npos) {
         return true;
index c624eb9..5cc6d36 100644 (file)
@@ -32,6 +32,7 @@ namespace exfat {
 
 static const char* kMkfsPath = "/system/bin/mkfs.exfat";
 static const char* kFsckPath = "/system/bin/fsck.exfat";
+static const char* kMountPath = "/system/bin/mount.exfat";
 
 bool IsSupported() {
     return access(kMkfsPath, X_OK) == 0 && access(kFsckPath, X_OK) == 0 &&
@@ -70,7 +71,18 @@ status_t Mount(const std::string& source, const std::string& target, int ownerUi
         return 0;
     }
 
-    return -1;
+    mountData = android::base::StringPrintf(
+            "noatime,nodev,nosuid,dirsync,uid=%d,gid=%d,fmask=%o,dmask=%o,noexec,rw",
+            ownerUid, ownerGid, permMask, permMask);
+
+    std::vector<std::string> cmd;
+    cmd.push_back(kMountPath);
+    cmd.push_back("-o");
+    cmd.push_back(mountData);
+    cmd.push_back(source);
+    cmd.push_back(target);
+
+    return ForkExecvp(cmd);
 }
 
 status_t Format(const std::string& source) {