Added a comment about from where to start that application.
If get_nth_partition/session_info() returns with anything else than a B_ENTRY_NOT_FOUND, an error message is printed out. The device name can now be specified on the command line, added shortcuts to identify a particular device, i.e. "cd-1-slave" or "slave1-cd" or "1-atapi-slave" would be expanded to /dev/disk/ide/atapi/1/slave/0/raw. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2521 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
7fd432700b
commit
d499baecf3
|
@ -1,12 +1,15 @@
|
||||||
// DiskScannerTest.cpp
|
// DiskScannerTest.cpp
|
||||||
|
// run that program from the current/ top directory
|
||||||
|
|
||||||
|
#include <disk_scanner/disk_scanner.h>
|
||||||
|
#include <fs_device.h>
|
||||||
|
#include <KernelExport.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <fs_device.h>
|
|
||||||
#include <KernelExport.h>
|
|
||||||
#include <disk_scanner/disk_scanner.h>
|
|
||||||
|
|
||||||
// The following code will be moved into libroot.
|
// The following code will be moved into libroot.
|
||||||
|
|
||||||
|
@ -60,18 +63,22 @@ status_t
|
||||||
get_nth_partition_info(int deviceFD, int32 sessionIndex, int32 partitionIndex,
|
get_nth_partition_info(int deviceFD, int32 sessionIndex, int32 partitionIndex,
|
||||||
extended_partition_info *partitionInfo)
|
extended_partition_info *partitionInfo)
|
||||||
{
|
{
|
||||||
status_t error = (partitionInfo ? B_OK : B_BAD_VALUE);
|
if (partitionInfo == NULL)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
session_info sessionInfo;
|
session_info sessionInfo;
|
||||||
disk_scanner_module_info *diskScanner = NULL;
|
disk_scanner_module_info *diskScanner = NULL;
|
||||||
|
|
||||||
// get the disk scanner module
|
// get the disk scanner module
|
||||||
if (error == B_OK)
|
status_t error = get_module(DISK_SCANNER_MODULE_NAME,
|
||||||
error = get_module(DISK_SCANNER_MODULE_NAME,
|
(module_info**)&diskScanner);
|
||||||
(module_info**)&diskScanner);
|
if (diskScanner == NULL)
|
||||||
|
return error;
|
||||||
|
|
||||||
// get the session info
|
// get the session info
|
||||||
if (error == B_OK) {
|
error = diskScanner->get_nth_session_info(deviceFD, sessionIndex,
|
||||||
error = diskScanner->get_nth_session_info(deviceFD, sessionIndex,
|
|
||||||
&sessionInfo, NULL);
|
&sessionInfo, NULL);
|
||||||
}
|
|
||||||
// get the partition info
|
// get the partition info
|
||||||
if (error == B_OK) {
|
if (error == B_OK) {
|
||||||
partitionInfo->info.logical_block_size
|
partitionInfo->info.logical_block_size
|
||||||
|
@ -307,31 +314,70 @@ print_partition_info(const char *prefix, const extended_partition_info &info)
|
||||||
|
|
||||||
// main
|
// main
|
||||||
int
|
int
|
||||||
main()
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
// const char *deviceName = "/dev/disk/virtual/0/raw";
|
char buffer[B_FILE_NAME_LENGTH];
|
||||||
const char *deviceName = "/dev/disk/ide/ata/0/master/0/raw";
|
const char *deviceName = "/dev/disk/ide/ata/0/master/0/raw";
|
||||||
// const char *deviceName = "/dev/disk/ide/atapi/1/master/0/raw";
|
|
||||||
|
if (argc > 1) {
|
||||||
|
bool atapi = false;
|
||||||
|
int32 controller = 0;
|
||||||
|
bool master = true;
|
||||||
|
|
||||||
|
if (argv[1][0] == '/') {
|
||||||
|
deviceName = argv[1];
|
||||||
|
} else if (strstr(argv[1], "virtual") != NULL) {
|
||||||
|
deviceName = "/dev/disk/virtual/0/raw";
|
||||||
|
} else {
|
||||||
|
if (strstr(argv[1], "cd") != NULL || strstr(argv[1], "atapi") != NULL)
|
||||||
|
atapi = true;
|
||||||
|
if (strstr(argv[1], "slave") != NULL)
|
||||||
|
master = false;
|
||||||
|
if (char *digit = strpbrk(argv[1], "0123456789"))
|
||||||
|
controller = atol(digit);
|
||||||
|
|
||||||
|
sprintf(buffer, "/dev/disk/ide/ata%s/%ld/%s/0/raw", atapi ? "pi" : "",
|
||||||
|
controller, master ? "master" : "slave");
|
||||||
|
|
||||||
|
deviceName = buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int device = open(deviceName, 0);
|
int device = open(deviceName, 0);
|
||||||
if (device >= 0) {
|
if (device < 0) {
|
||||||
printf("device: `%s'\n", deviceName);
|
fprintf(stderr, "Could not open device \"%s\": %s\n", deviceName, strerror(device));
|
||||||
session_info sessionInfo;
|
return -1;
|
||||||
for (int32 i = 0;
|
|
||||||
get_nth_session_info(device, i, &sessionInfo) == B_OK;
|
|
||||||
i++) {
|
|
||||||
printf("session %ld\n", i);
|
|
||||||
print_session_info(" ", sessionInfo);
|
|
||||||
extended_partition_info partitionInfo;
|
|
||||||
for (int32 k = 0;
|
|
||||||
get_nth_partition_info(device, i, k, &partitionInfo) == B_OK;
|
|
||||||
k++) {
|
|
||||||
printf(" partition %ld_%ld\n", i, k);
|
|
||||||
print_partition_info(" ", partitionInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(device);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("device: `%s'\n", deviceName);
|
||||||
|
|
||||||
|
session_info sessionInfo;
|
||||||
|
for (int32 i = 0; ; i++) {
|
||||||
|
status_t status = get_nth_session_info(device, i, &sessionInfo);
|
||||||
|
if (status < B_OK) {
|
||||||
|
if (status != B_ENTRY_NOT_FOUND)
|
||||||
|
fprintf(stderr, "get_nth_session_info() failed: %s\n", strerror(status));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("session %ld\n", i);
|
||||||
|
print_session_info(" ", sessionInfo);
|
||||||
|
|
||||||
|
for (int32 k = 0; ; k++) {
|
||||||
|
extended_partition_info partitionInfo;
|
||||||
|
status = get_nth_partition_info(device, i, k, &partitionInfo);
|
||||||
|
if (status < B_OK) {
|
||||||
|
if (status != B_ENTRY_NOT_FOUND)
|
||||||
|
fprintf(stderr, "get_nth_partition_info() failed: %s\n", strerror(status));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(" partition %ld_%ld\n", i, k);
|
||||||
|
print_partition_info(" ", partitionInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(device);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue