- /* Mark disks containing mounted partitions as themselves mounted */
- BOOST_FOREACH (Disk& i, disks) {
- if (!i.whole) {
- continue;
- }
- BOOST_FOREACH (Disk& j, disks) {
- if (!j.mount_points.empty() && starts_with(j.mount_point, i.mount_point)) {
- LOG_DISK("Marking %1 as mounted because %2 is", i.mount_point, j.mount_point);
- std::copy(j.mount_points.begin(), j.mount_points.end(), back_inserter(i.mount_points));
- }
- }
- }
-
- /* Make a map of the PRT codes and mount points of mounted, synthesized disks */
- map<string, vector<boost::filesystem::path> > mounted_synths;
- BOOST_FOREACH (Disk& i, disks) {
- if (!i.real && !i.mount_points.empty()) {
- LOG_DISK("Found a mounted synth %1 with %2", i.mount_point, i.prt);
- mounted_synths[i.prt] = i.mount_points;
- }
- }
-
- /* Mark containers of those mounted synths as themselves mounted */
- BOOST_FOREACH (Disk& i, disks) {
- if (i.real) {
- map<string, vector<boost::filesystem::path> >::const_iterator j = mounted_synths.find(i.prt);
- if (j != mounted_synths.end()) {
- LOG_DISK("Marking %1 (%2) as mounted because it contains a mounted synth", i.mount_point, i.prt);
- std::copy(j->second.begin(), j->second.end(), back_inserter(i.mount_points));
- }
- }
- }
-
- vector<Drive> drives;
- BOOST_FOREACH (Disk& i, disks) {
- if (i.whole) {
- /* A whole disk that is not a container for a mounted synth */
- drives.push_back(Drive(i.mount_point, i.mount_points, i.size, i.vendor, i.model));
- LOG_DISK_NC(drives.back().log_summary());
- }
- }
- return drives;