Added small test program for the Disk Device API. Doesn't do much for now -- only dumps the current list of disk devices. The iteration code seems to work. :-)

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2668 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2003-02-08 23:40:11 +00:00
parent 57f5eb1c81
commit 851a7b6fe7
3 changed files with 148 additions and 0 deletions
+1
View File
@@ -41,4 +41,5 @@ CommonTestLib libstoragetest.so
DEPENDS libstoragetest_r5.so : $(resdir_r5) ;
}
SubInclude OBOS_TOP src tests kits storage disk_device ;
SubInclude OBOS_TOP src tests kits storage virtualdrive ;
@@ -0,0 +1,120 @@
//----------------------------------------------------------------------
// This software is part of the OpenBeOS distribution and is covered
// by the OpenBeOS license.
//---------------------------------------------------------------------
#include <DiskDevice.h>
#include <DiskDeviceRoster.h>
#include <Partition.h>
#include <OS.h>
#include <Session.h>
#include <Messenger.h> // needed only until we can link against
#include <RegistrarDefs.h> // libopenbeos
#include <Roster.h> //
#include <RosterPrivate.h> //
// Hack to make BDiskDeviceRoster communicate with our registrar.
BRoster _be_roster;
const BRoster *be_roster = &_be_roster;
// init_roster
void
init_roster()
{
bool initialized = false;
// find the registrar port
port_id rosterPort = find_port(kRosterPortName);
port_info info;
if (rosterPort >= 0 && get_port_info(rosterPort, &info) == B_OK) {
// construct the roster messenger
struct {
port_id fPort;
int32 fHandlerToken;
team_id fTeam;
int32 extra0;
int32 extra1;
bool fPreferredTarget;
bool extra2;
bool extra3;
bool extra4;
} fakeMessenger;
fakeMessenger.fPort = rosterPort;
fakeMessenger.fHandlerToken = 0;
fakeMessenger.fTeam = info.team;
fakeMessenger.fPreferredTarget = true;
BMessenger mainMessenger = *(BMessenger*)&fakeMessenger;
// ask for the MIME messenger
BMessage reply;
status_t error = mainMessenger.SendMessage(B_REG_GET_MIME_MESSENGER,
&reply);
if (error == B_OK && reply.what == B_REG_SUCCESS) {
BMessenger mimeMessenger;
reply.FindMessenger("messenger", &mimeMessenger);
BRoster::Private(_be_roster).SetTo(mainMessenger, mimeMessenger);
initialized = true;
} else {
}
}
if (!initialized) {
printf("initializing be_roster failed!\n");
exit(1);
}
}
class DumpVisitor : public BDiskDeviceVisitor {
public:
virtual bool Visit(BDiskDevice *device)
{
printf("device `%s'\n", device->Path());
printf(" size: %lld\n", device->Size());
printf(" block size: %ld\n", device->BlockSize());
printf(" read-only: %d\n", device->IsReadOnly());
printf(" removable: %d\n", device->IsRemovable());
printf(" has media: %d\n", device->HasMedia());
printf(" type: 0x%x\n", device->Type());
return false;
}
virtual bool Visit(BSession *session)
{
printf(" session %ld:\n", session->Index());
printf(" offset: %lld\n", session->Offset());
printf(" size: %lld\n", session->Size());
printf(" block size: %ld\n", session->BlockSize());
printf(" flags: %lx\n", session->Flags());
printf(" partitioning : `%s'\n", session->PartitioningSystem());
return false;
}
virtual bool Visit(BPartition *partition)
{
printf(" partition %ld:\n", partition->Index());
printf(" offset: %lld\n", partition->Offset());
printf(" size: %lld\n", partition->Size());
// printf(" device: `%s'\n", partition->Size());
printf(" flags: %lx\n", partition->Flags());
printf(" partition name: `%s'\n", partition->Name());
printf(" partition type: `%s'\n", partition->Type());
printf(" FS short name: `%s'\n",
partition->FileSystemShortName());
printf(" FS long name: `%s'\n",
partition->FileSystemLongName());
printf(" volume name: `%s'\n", partition->VolumeName());
printf(" FS flags: 0x%lx\n", partition->FileSystemFlags());
return false;
}
};
// main
int
main()
{
init_roster();
BDiskDeviceRoster roster;
DumpVisitor visitor;
roster.Traverse(&visitor);
}
@@ -0,0 +1,27 @@
SubDir OBOS_TOP src tests kits storage disk_device ;
UsePrivateHeaders app ;
UsePrivateHeaders shared ;
UsePrivateHeaders storage ;
SEARCH_SOURCE += [ FDirName $(OBOS_TOP) src kits app ]
[ FDirName $(OBOS_TOP) src kits storage ] ;
SimpleTest DiskDeviceTest
: DiskDeviceTest.cpp
# We compile these classes in. If we would link against libopenbeos
# instead, we couldn't use any GUI. At least not at this time.
#
DiskDevice.cpp
DiskDevicePrivate.cpp
DiskDeviceRoster.cpp
DiskDeviceVisitor.cpp
Mime.cpp
Partition.cpp
RegistrarDefs.cpp
RosterPrivate.cpp
Session.cpp
: be
;