status_t Partition::Mount(Directory **_fileSystem, bool isBootDevice) { if (isBootDevice && gKernelArgs.boot_volume.GetBool( BOOT_VOLUME_BOOTED_FROM_IMAGE, false)) { return _Mount(&gTarFileSystemModule, _fileSystem); } for (int32 i = 0; i < sNumFileSystemModules; i++) { status_t status = _Mount(sFileSystemModules[i], _fileSystem); if (status == B_OK) return B_OK; } return B_ENTRY_NOT_FOUND; }
void MainWindow::MessageReceived(BMessage* message) { switch (message->what) { case MSG_MOUNT_ALL: _MountAll(); break; case MSG_MOUNT: _Mount(fCurrentDisk, fCurrentPartitionID); break; case MSG_UNMOUNT: _Unmount(fCurrentDisk, fCurrentPartitionID); break; case MSG_FORMAT: printf("MSG_FORMAT\n"); break; case MSG_CREATE: { _Create(fCurrentDisk, fCurrentPartitionID); break; } case MSG_INITIALIZE: { BString diskSystemName; if (message->FindString("disk system", &diskSystemName) != B_OK) break; _Initialize(fCurrentDisk, fCurrentPartitionID, diskSystemName); break; } case MSG_DELETE: _Delete(fCurrentDisk, fCurrentPartitionID); break; case MSG_EJECT: // TODO: completely untested, especially interesting // if partition list behaves when partitions disappear if (fCurrentDisk) { // TODO: only if no partitions are mounted anymore? fCurrentDisk->Eject(true); _ScanDrives(); } break; case MSG_SURFACE_TEST: printf("MSG_SURFACE_TEST\n"); break; // TODO: this could probably be done better! case B_DEVICE_UPDATE: printf("B_DEVICE_UPDATE\n"); case MSG_RESCAN: _ScanDrives(); break; case MSG_PARTITION_ROW_SELECTED: // selection of partitions via list view _AdaptToSelectedPartition(); break; case MSG_SELECTED_PARTITION_ID: { // selection of partitions via disk view partition_id id; if (message->FindInt32("partition_id", &id) == B_OK) { if (BRow* row = fListView->FindRow(id)) { fListView->DeselectAll(); fListView->AddToSelection(row); _AdaptToSelectedPartition(); } } break; } default: BWindow::MessageReceived(message); break; } }