OSDN Git Service

vold3: auto mount CDROM
authorChih-Wei Huang <cwhuang@linux.org.tw>
Sat, 25 Mar 2017 16:45:41 +0000 (00:45 +0800)
committerChih-Wei Huang <cwhuang@linux.org.tw>
Sat, 25 Mar 2017 16:45:41 +0000 (00:45 +0800)
Jide's ISO9660 support (commit 3da6ea1) is not complete. Still
need to handle block devices with major number of CDROM.

Disk.cpp
Disk.h
PublicVolume.cpp
VolumeManager.cpp

index a8e8dc6..f1b288b 100644 (file)
--- a/Disk.cpp
+++ b/Disk.cpp
@@ -191,6 +191,9 @@ status_t Disk::readMetadata() {
     }
 
     switch (major(mDevice)) {
+    case kMajorBlockCdrom:
+        LOG(DEBUG) << "Found a CDROM: " << mSysPath;
+        // fall through
     case kMajorBlockScsiA: case kMajorBlockScsiB: case kMajorBlockScsiC: case kMajorBlockScsiD:
     case kMajorBlockScsiE: case kMajorBlockScsiF: case kMajorBlockScsiG: case kMajorBlockScsiH:
     case kMajorBlockScsiI: case kMajorBlockScsiJ: case kMajorBlockScsiK: case kMajorBlockScsiL:
@@ -257,7 +260,7 @@ status_t Disk::readPartitions() {
     cmd.push_back(mDevPath);
 
     std::vector<std::string> output;
-    status_t res = ForkExecvp(cmd, output);
+    status_t res = maxMinors ? ForkExecvp(cmd, output) : ENODEV;
     if (res != OK) {
         LOG(WARNING) << "sgdisk failed to scan " << mDevPath;
 
@@ -546,6 +549,9 @@ int Disk::getMaxMinors() {
         // Per Documentation/devices.txt this is static
         return 15;
     }
+    case kMajorBlockCdrom: {
+        return 0;
+    }
     case kMajorBlockMmc: {
         // Per Documentation/devices.txt this is dynamic
         std::string tmp;
diff --git a/Disk.h b/Disk.h
index 3fd2cba..4e17e71 100644 (file)
--- a/Disk.h
+++ b/Disk.h
@@ -42,6 +42,7 @@ public:
 
     enum {
         kMajorBlockScsiA = 8,
+        kMajorBlockCdrom = 11,
         kMajorBlockScsiB = 65,
         kMajorBlockScsiC = 66,
         kMajorBlockScsiD = 67,
@@ -74,6 +75,8 @@ public:
         kEmmc = 1 << 4,
         /* Flag that disk is non-removable */
         kNonRemovable = 1 << 5,
+        /* Flag that disk is CDROM */
+        kCdrom = 1 << 6,
     };
 
     const std::string& getId() { return mId; }
index 9a895bb..fc027c2 100644 (file)
@@ -166,7 +166,7 @@ status_t PublicVolume::doMount() {
         ret = ntfs::Check(mDevPath);
     } else if (mFsType == "vfat") {
         ret = vfat::Check(mDevPath);
-    } else {
+    } else if (mFsType != "iso9660") {
         LOG(WARNING) << getId() << " unsupported filesystem check, skipping";
     }
     if (ret) {
index 9b56cd7..ff65f14 100755 (executable)
@@ -299,6 +299,8 @@ void VolumeManager::handleBlockEvent(NetlinkEvent *evt) {
                 int flags = source->getFlags();
                 if (major == android::vold::Disk::kMajorBlockMmc) {
                     flags |= android::vold::Disk::Flags::kSd;
+                } else if (major == android::vold::Disk::kMajorBlockCdrom) {
+                    flags |= android::vold::Disk::Flags::kCdrom;
                 } else {
                     flags |= android::vold::Disk::Flags::kUsb;
                 }