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>
Fri, 29 Mar 2019 10:31:56 +0000 (18:31 +0800)
Jide's ISO9660 support (commit 76b535f) is not complete. Still
need to handle block devices with major number of CDROM.

VolumeManager.cpp
model/Disk.cpp
model/Disk.h
model/PublicVolume.cpp

index f391910..f340f54 100755 (executable)
@@ -199,6 +199,8 @@ void VolumeManager::handleBlockEvent(NetlinkEvent *evt) {
                     || (eventPath.find("ufs") != std::string::npos)
                     || android::vold::Disk::isVirtioBlkDevice(major)) {
                     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;
                 }
index 6dc3476..bdba1cb 100644 (file)
@@ -234,6 +234,9 @@ status_t Disk::readMetadata() {
         mLabel = "Virtual";
         break;
     }
+    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:
@@ -313,7 +316,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;
 
@@ -601,6 +604,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;
index bd888cd..93154a7 100644 (file)
@@ -43,6 +43,7 @@ public:
     enum {
         kMajorBlockLoop = 7,
         kMajorBlockScsiA = 8,
+        kMajorBlockCdrom = 11,
         kMajorBlockScsiB = 65,
         kMajorBlockScsiC = 66,
         kMajorBlockScsiD = 67,
@@ -77,6 +78,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 cd74384..5c91175 100644 (file)
@@ -148,7 +148,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) {