本文整理汇总了C++中KDiskDeviceManager::NextDevice方法的典型用法代码示例。如果您正苦于以下问题:C++ KDiskDeviceManager::NextDevice方法的具体用法?C++ KDiskDeviceManager::NextDevice怎么用?C++ KDiskDeviceManager::NextDevice使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类KDiskDeviceManager
的用法示例。
在下文中一共展示了KDiskDeviceManager::NextDevice方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: VisitPre
/*! Make the boot partition (and probably others) available.
The partitions that are a boot candidate a put into the /a partitions
stack. If the user selected a boot device, there is will only be one
entry in this stack; if not, the most likely is put up first.
The boot code should then just try them one by one.
*/
static status_t
get_boot_partitions(kernel_args* args, PartitionStack& partitions)
{
const KMessage& bootVolume = args->boot_volume;
dprintf("get_boot_partitions(): boot volume message:\n");
bootVolume.Dump(&dprintf);
// create boot method
int32 bootMethodType = bootVolume.GetInt32(BOOT_METHOD, BOOT_METHOD_DEFAULT);
dprintf("get_boot_partitions(): boot method type: %ld\n", bootMethodType);
BootMethod* bootMethod = NULL;
switch (bootMethodType) {
case BOOT_METHOD_NET:
bootMethod = new(nothrow) NetBootMethod(bootVolume, bootMethodType);
break;
case BOOT_METHOD_HARD_DISK:
case BOOT_METHOD_CD:
default:
bootMethod = new(nothrow) DiskBootMethod(bootVolume,
bootMethodType);
break;
}
status_t status = bootMethod != NULL ? bootMethod->Init() : B_NO_MEMORY;
if (status != B_OK)
return status;
KDiskDeviceManager::CreateDefault();
KDiskDeviceManager *manager = KDiskDeviceManager::Default();
status = manager->InitialDeviceScan();
if (status != B_OK) {
dprintf("KDiskDeviceManager::InitialDeviceScan() failed: %s\n",
strerror(status));
return status;
}
if (1 /* dump devices and partitions */) {
KDiskDevice *device;
int32 cookie = 0;
while ((device = manager->NextDevice(&cookie)) != NULL) {
device->Dump(true, 0);
}
}
struct BootPartitionVisitor : KPartitionVisitor {
BootPartitionVisitor(BootMethod* bootMethod, PartitionStack &stack)
: fPartitions(stack),
fBootMethod(bootMethod)
{
}
virtual bool VisitPre(KPartition *partition)
{
if (!partition->ContainsFileSystem())
return false;
bool foundForSure = false;
if (fBootMethod->IsBootPartition(partition, foundForSure))
fPartitions.Push(partition);
// if found for sure, we can terminate the search
return foundForSure;
}
private:
PartitionStack &fPartitions;
BootMethod* fBootMethod;
} visitor(bootMethod, partitions);
bool strict = true;
while (true) {
KDiskDevice *device;
int32 cookie = 0;
while ((device = manager->NextDevice(&cookie)) != NULL) {
if (!bootMethod->IsBootDevice(device, strict))
continue;
if (device->VisitEachDescendant(&visitor) != NULL)
break;
}
if (!partitions.IsEmpty() || !strict)
break;
// we couldn't find any potential boot devices, try again less strict
strict = false;
}
// sort partition list (e.g.. when booting from CD, CDs should come first in
//.........这里部分代码省略.........