本文整理汇总了C++中BPartition::GetMountPoint方法的典型用法代码示例。如果您正苦于以下问题:C++ BPartition::GetMountPoint方法的具体用法?C++ BPartition::GetMountPoint怎么用?C++ BPartition::GetMountPoint使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BPartition
的用法示例。
在下文中一共展示了BPartition::GetMountPoint方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: volume
void
AutoMounter::_UnmountAndEjectVolume(BMessage* message)
{
int32 id;
if (message->FindInt32("id", &id) == B_OK) {
BDiskDeviceRoster roster;
BPartition *partition;
BDiskDevice device;
if (roster.GetPartitionWithID(id, &device, &partition) != B_OK)
return;
BPath path;
if (partition->GetMountPoint(&path) == B_OK)
_UnmountAndEjectVolume(partition, path, partition->ContentName());
} else {
// see if we got a dev_t
dev_t device;
if (message->FindInt32("device_id", &device) != B_OK)
return;
BVolume volume(device);
status_t status = volume.InitCheck();
char name[B_FILE_NAME_LENGTH];
if (status == B_OK)
status = volume.GetName(name);
if (status < B_OK)
snprintf(name, sizeof(name), "device:%" B_PRIdDEV, device);
BPath path;
if (status == B_OK) {
BDirectory mountPoint;
status = volume.GetRootDirectory(&mountPoint);
if (status == B_OK)
status = path.SetTo(&mountPoint, ".");
}
if (status == B_OK)
_UnmountAndEjectVolume(NULL, path, name);
}
}
示例2: dir
void
InstallerWindow::_PublishPackages()
{
fPackagesView->Clean();
PartitionMenuItem *item = (PartitionMenuItem *)fSrcMenu->FindMarked();
if (!item)
return;
BPath directory;
BDiskDeviceRoster roster;
BDiskDevice device;
BPartition *partition;
if (roster.GetPartitionWithID(item->ID(), &device, &partition) == B_OK) {
if (partition->GetMountPoint(&directory) != B_OK)
return;
} else if (roster.GetDeviceWithID(item->ID(), &device) == B_OK) {
if (device.GetMountPoint(&directory) != B_OK)
return;
} else
return; // shouldn't happen
directory.Append(PACKAGES_DIRECTORY);
BDirectory dir(directory.Path());
if (dir.InitCheck() != B_OK)
return;
BEntry packageEntry;
BList packages;
while (dir.GetNextEntry(&packageEntry) == B_OK) {
Package* package = Package::PackageFromEntry(packageEntry);
if (package != NULL)
packages.AddItem(package);
}
packages.SortItems(_ComparePackages);
fPackagesView->AddPackages(packages, new BMessage(PACKAGE_CHECKBOX));
PostMessage(PACKAGE_CHECKBOX);
}
示例3:
void
MainWindow::_Unmount(BDiskDevice* disk, partition_id selectedPartition)
{
if (!disk || selectedPartition < 0) {
_DisplayPartitionError(B_TRANSLATE("You need to select a partition "
"entry from the list."));
return;
}
BPartition* partition = disk->FindDescendant(selectedPartition);
if (!partition) {
_DisplayPartitionError(B_TRANSLATE("Unable to find the selected "
"partition by ID."));
return;
}
if (partition->IsMounted()) {
BPath path;
partition->GetMountPoint(&path);
status_t ret = partition->Unmount();
if (ret < B_OK) {
_DisplayPartitionError(
B_TRANSLATE("Could not unmount partition %s."),
partition, ret);
} else {
if (dev_for_path(path.Path()) == dev_for_path("/"))
rmdir(path.Path());
// successful unmount, adapt to the changes
_ScanDrives();
}
} else {
_DisplayPartitionError(
B_TRANSLATE("The partition %s is already unmounted."),
partition);
}
}
示例4: if
void
WorkerThread::MessageReceived(BMessage* message)
{
CALLED();
switch (message->what) {
case MSG_START_INSTALLING:
_PerformInstall(fWindow->GetSourceMenu(), fWindow->GetTargetMenu());
break;
case MSG_WRITE_BOOT_SECTOR:
{
int32 id;
if (message->FindInt32("id", &id) != B_OK) {
_SetStatusMessage(B_TRANSLATE("Boot sector not written "
"because of an internal error."));
break;
}
// TODO: Refactor with _PerformInstall()
BPath targetDirectory;
BDiskDevice device;
BPartition* partition;
if (fDDRoster.GetPartitionWithID(id, &device, &partition) == B_OK) {
if (!partition->IsMounted()) {
if (partition->Mount() < B_OK) {
_SetStatusMessage(B_TRANSLATE("The partition can't be "
"mounted. Please choose a different partition."));
break;
}
}
if (partition->GetMountPoint(&targetDirectory) != B_OK) {
_SetStatusMessage(B_TRANSLATE("The mount point could not "
"be retrieved."));
break;
}
} else if (fDDRoster.GetDeviceWithID(id, &device) == B_OK) {
if (!device.IsMounted()) {
if (device.Mount() < B_OK) {
_SetStatusMessage(B_TRANSLATE("The disk can't be "
"mounted. Please choose a different disk."));
break;
}
}
if (device.GetMountPoint(&targetDirectory) != B_OK) {
_SetStatusMessage(B_TRANSLATE("The mount point could not "
"be retrieved."));
break;
}
}
_LaunchFinishScript(targetDirectory);
// TODO: Get error from executing script!
_SetStatusMessage(
B_TRANSLATE("Boot sector successfully written."));
}
default:
BLooper::MessageReceived(message);
}
}
示例5: CALLED
void
WorkerThread::_PerformInstall(BMenu* srcMenu, BMenu* targetMenu)
{
CALLED();
BPath targetDirectory;
BPath srcDirectory;
BPath trashPath;
BPath testPath;
BDirectory targetDir;
BDiskDevice device;
BPartition* partition;
BVolume targetVolume;
status_t err = B_OK;
int32 entries = 0;
entry_ref testRef;
const char* mountError = B_TRANSLATE("The disk can't be mounted. Please "
"choose a different disk.");
BMessenger messenger(fWindow);
ProgressReporter reporter(messenger, new BMessage(MSG_STATUS_MESSAGE));
CopyEngine engine(&reporter);
BList unzipEngines;
PartitionMenuItem* targetItem = (PartitionMenuItem*)targetMenu->FindMarked();
PartitionMenuItem* srcItem = (PartitionMenuItem*)srcMenu->FindMarked();
if (!srcItem || !targetItem) {
ERR("bad menu items\n");
goto error;
}
// check if target is initialized
// ask if init or mount as is
if (fDDRoster.GetPartitionWithID(targetItem->ID(), &device,
&partition) == B_OK) {
if (!partition->IsMounted()) {
if ((err = partition->Mount()) < B_OK) {
_SetStatusMessage(mountError);
ERR("BPartition::Mount");
goto error;
}
}
if ((err = partition->GetVolume(&targetVolume)) != B_OK) {
ERR("BPartition::GetVolume");
goto error;
}
if ((err = partition->GetMountPoint(&targetDirectory)) != B_OK) {
ERR("BPartition::GetMountPoint");
goto error;
}
} else if (fDDRoster.GetDeviceWithID(targetItem->ID(), &device) == B_OK) {
if (!device.IsMounted()) {
if ((err = device.Mount()) < B_OK) {
_SetStatusMessage(mountError);
ERR("BDiskDevice::Mount");
goto error;
}
}
if ((err = device.GetVolume(&targetVolume)) != B_OK) {
ERR("BDiskDevice::GetVolume");
goto error;
}
if ((err = device.GetMountPoint(&targetDirectory)) != B_OK) {
ERR("BDiskDevice::GetMountPoint");
goto error;
}
} else
goto error; // shouldn't happen
// check if target has enough space
if ((fSpaceRequired > 0 && targetVolume.FreeBytes() < fSpaceRequired)
&& ((new BAlert("", B_TRANSLATE("The destination disk may not have "
"enough space. Try choosing a different disk or choose to not "
"install optional items."), B_TRANSLATE("Try installing anyway"),
B_TRANSLATE("Cancel"), 0,
B_WIDTH_AS_USUAL, B_STOP_ALERT))->Go() != 0)) {
goto error;
}
if (fDDRoster.GetPartitionWithID(srcItem->ID(), &device, &partition) == B_OK) {
if ((err = partition->GetMountPoint(&srcDirectory)) != B_OK) {
ERR("BPartition::GetMountPoint");
goto error;
}
} else if (fDDRoster.GetDeviceWithID(srcItem->ID(), &device) == B_OK) {
if ((err = device.GetMountPoint(&srcDirectory)) != B_OK) {
ERR("BDiskDevice::GetMountPoint");
goto error;
}
} else
goto error; // shouldn't happen
// check not installing on itself
if (strcmp(srcDirectory.Path(), targetDirectory.Path()) == 0) {
_SetStatusMessage(B_TRANSLATE("You can't install the contents of a "
"disk onto itself. Please choose a different disk."));
goto error;
}
// check not installing on boot volume
//.........这里部分代码省略.........
示例6: entry
//.........这里部分代码省略.........
continue;
// TODO: improve error messages
BPath path;
if (entry.GetPath(&path) != B_OK)
continue;
partition_id id = -1;
BDiskDevice device;
BPartition* partition;
if (!strncmp(path.Path(), "/dev/", 5)) {
// seems to be a device path
if (roster.GetPartitionForPath(path.Path(), &device, &partition)
!= B_OK)
continue;
} else {
// a file with this name exists, so try to mount it
id = roster.RegisterFileDevice(path.Path());
if (id < 0)
continue;
if (roster.GetPartitionWithID(id, &device, &partition) != B_OK) {
roster.UnregisterFileDevice(id);
continue;
}
}
status_t status = partition->Mount(NULL,
mountVisitor.readOnly ? B_MOUNT_READ_ONLY : 0);
if (!mountVisitor.silent) {
if (status >= B_OK) {
BPath mountPoint;
partition->GetMountPoint(&mountPoint);
printf("%s \"%s\" mounted successfully at \"%s\".\n",
id < 0 ? "Device" : "Image", name, mountPoint.Path());
}
}
if (status >= B_OK) {
// remove from list
mountVisitor.toMount.erase(name);
} else if (id >= 0)
roster.UnregisterFileDevice(id);
}
// TODO: support unmounting images by path!
// print errors for the volumes to mount/unmount, that weren't found
if (!mountVisitor.silent) {
for (StringSet::iterator it = mountVisitor.toMount.begin();
it != mountVisitor.toMount.end(); it++) {
fprintf(stderr, "Failed to mount volume `%s': Volume not found.\n",
(*it).c_str());
}
for (StringSet::iterator it = mountVisitor.toUnmount.begin();
it != mountVisitor.toUnmount.end(); it++) {
fprintf(stderr, "Failed to unmount volume `%s': Volume not "
"found.\n", (*it).c_str());
}
}
// update the disk device list
error = deviceList.Fetch();
if (error != B_OK) {
fprintf(stderr, "Failed to update the list of disk devices: %s",
strerror(error));
示例7: parser
//.........这里部分代码省略.........
#else
// partitions are block devices under Antares, but not under BeOS
#ifndef __ANTARES__
fprintf(stderr, "Error: Block devices not supported on this "
"platform!\n");
exit(1);
#endif // __ANTARES__
#endif
} else {
fprintf(stderr, "Error: File type of \"%s\" is not supported.\n",
fileName);
exit(1);
}
// open the file
int fd = open(fileName, O_RDWR);
if (fd < 0) {
fprintf(stderr, "Error: Failed to open \"%s\": %s\n", fileName,
strerror(errno));
exit(1);
}
#if (defined(__BEOS__) || defined(__ANTARES__))
// get a partition info
if (!noPartition
&& strlen(fileName) >= 3
&& strncmp("raw", fileName + strlen(fileName) - 3, 3)) {
partition_info partitionInfo;
if (ioctl(fd, B_GET_PARTITION_INFO, &partitionInfo,
sizeof(partitionInfo)) == 0) {
partitionOffset = partitionInfo.offset;
} else {
fprintf(stderr, "Error: Failed to get partition info: %s\n",
strerror(errno));
exit(1);
}
}
#endif // __BEOS__
// adjust the partition offset in the boot code data
// hard coded sector size: 512 bytes
*(uint32*)(bootCodeData + kPartitionOffsetOffset)
= B_HOST_TO_LENDIAN_INT32((uint32)(partitionOffset / 512));
// write the boot code
printf("Writing boot code to \"%s\" (partition offset: %" B_PRId64
" bytes, start offset = %" B_PRIdOFF ") "
"...\n", fileName, partitionOffset, startOffset);
write_boot_code_part(fileName, fd, startOffset, bootCodeData, 0,
kFirstBootCodePartSize, dryRun);
write_boot_code_part(fileName, fd, startOffset, bootCodeData,
kSecondBootCodePartOffset, kSecondBootCodePartSize,
dryRun);
#ifdef __ANTARES__
// check if this partition is mounted
BDiskDeviceRoster roster;
BPartition* partition;
BDiskDevice device;
status_t status = roster.GetPartitionForPath(fileName, &device,
&partition);
if (status != B_OK) {
status = roster.GetFileDeviceForPath(fileName, &device);
if (status == B_OK)
partition = &device;
}
if (status == B_OK && partition->IsMounted() && !dryRun) {
// This partition is mounted, we need to tell BFS to update its
// boot block (we are using part of the same logical block).
BPath path;
status = partition->GetMountPoint(&path);
if (status == B_OK) {
update_boot_block update;
update.offset = kSecondBootCodePartOffset - 512;
update.data = bootCodeData + kSecondBootCodePartOffset;
update.length = kSecondBootCodePartSize;
int mountFD = open(path.Path(), O_RDONLY);
if (ioctl(mountFD, BFS_IOCTL_UPDATE_BOOT_BLOCK, &update,
sizeof(update_boot_block)) != 0) {
fprintf(stderr, "Could not update BFS boot block: %s\n",
strerror(errno));
}
close(mountFD);
} else {
fprintf(stderr, "Could not update BFS boot code while the "
"partition is mounted!\n");
}
}
#endif // __ANTARES__
close(fd);
}
return 0;
}