Android-x86
Fork
捐款

  • R/O
  • HTTP
  • SSH
  • HTTPS

system-vold: 提交

system/vold


Commit MetaInfo

修訂f42ee2b4667f2410627d929e7b900b0bd797cb2d (tree)
時間2022-03-14 05:42:11
作者Chih-Wei Huang <cwhuang@linu...>
CommiterMauro Rossi

Log Message

vold3: auto mount CDROM

Luo Chunbo's ISO9660 support (commit 133632d5) is not complete. Still
need to handle block devices with major number of CDROM.

Change Summary

差異

--- a/VolumeManager.cpp
+++ b/VolumeManager.cpp
@@ -104,6 +104,7 @@ static const std::string kEmptyString("");
104104 /* 512MiB is large enough for testing purposes */
105105 static const unsigned int kSizeVirtualDisk = 536870912;
106106
107+static const unsigned int kMajorBlockCdrom = 11;
107108 static const unsigned int kMajorBlockMmc = 179;
108109
109110 using ScanProcCallback = bool(*)(uid_t uid, pid_t pid, int nsFd, const char* name, void* params);
@@ -236,6 +237,8 @@ void VolumeManager::handleBlockEvent(NetlinkEvent* evt) {
236237 int flags = source->getFlags();
237238 if (major == kMajorBlockMmc || IsVirtioBlkDevice(major)) {
238239 flags |= android::vold::Disk::Flags::kSd;
240+ } else if (major == kMajorBlockCdrom) {
241+ flags |= android::vold::Disk::Flags::kCdrom;
239242 } else {
240243 flags |= android::vold::Disk::Flags::kUsb;
241244 }
--- a/model/Disk.cpp
+++ b/model/Disk.cpp
@@ -75,6 +75,7 @@ static const unsigned int kMajorBlockScsiP = 135;
7575 static const unsigned int kMajorBlockMmc = 179;
7676 static const unsigned int kMajorBlockDynamicMin = 234;
7777 static const unsigned int kMajorBlockDynamicMax = 512;
78+static const unsigned int kMajorBlockCdrom = 11;
7879
7980 static const char* kGptBasicData = "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7";
8081 static const char* kGptAndroidMeta = "19A710A2-B3CA-11E4-B026-10604B889DCF";
@@ -250,6 +251,9 @@ status_t Disk::readMetadata() {
250251 mLabel = "Virtual";
251252 break;
252253 }
254+ case kMajorBlockCdrom:
255+ LOG(DEBUG) << "Found a CDROM: " << mSysPath;
256+ FALLTHROUGH_INTENDED;
253257 // clang-format off
254258 case kMajorBlockScsiA: case kMajorBlockScsiB: case kMajorBlockScsiC:
255259 case kMajorBlockScsiD: case kMajorBlockScsiE: case kMajorBlockScsiF:
@@ -338,7 +342,7 @@ status_t Disk::readPartitions() {
338342 cmd.push_back(mDevPath);
339343
340344 std::vector<std::string> output;
341- status_t res = ForkExecvp(cmd, &output);
345+ status_t res = maxMinors ? ForkExecvp(cmd, &output) : ENODEV;
342346 if (res != OK) {
343347 LOG(WARNING) << "sgdisk failed to scan " << mDevPath;
344348
@@ -599,6 +603,9 @@ int Disk::getMaxMinors() {
599603 // Per Documentation/devices.txt this is static
600604 return 15;
601605 }
606+ case kMajorBlockCdrom: {
607+ return 0;
608+ }
602609 case kMajorBlockMmc: {
603610 // Per Documentation/devices.txt this is dynamic
604611 std::string tmp;
--- a/model/Disk.h
+++ b/model/Disk.h
@@ -58,6 +58,8 @@ class Disk {
5858 kStub = 1 << 5,
5959 /* Flag that disk is non-removable */
6060 kNonRemovable = 1 << 6,
61+ /* Flag that disk is CDROM */
62+ kCdrom = 1 << 7,
6163 };
6264
6365 const std::string& getId() const { return mId; }
--- a/model/PublicVolume.cpp
+++ b/model/PublicVolume.cpp
@@ -154,7 +154,7 @@ status_t PublicVolume::doMount() {
154154 ret = ntfs::Check(mDevPath);
155155 } else if (mFsType == "vfat") {
156156 ret = vfat::Check(mDevPath);
157- } else {
157+ } else if (mFsType != "iso9660") {
158158 LOG(WARNING) << getId() << " unsupported filesystem check, skipping";
159159 }
160160 if (ret) {
Show on old repository browser