bfs_tools: Disk is now using a BBufferIO.
* Automatic whitespace cleanup.
This commit is contained in:
@@ -95,6 +95,7 @@ Cache<block_run>::Cacheable *BlockRunCache::NewCacheable(block_run run)
|
|||||||
|
|
||||||
Disk::Disk(const char *deviceName, bool rawMode, off_t start, off_t stop)
|
Disk::Disk(const char *deviceName, bool rawMode, off_t start, off_t stop)
|
||||||
:
|
:
|
||||||
|
fBufferedFile(NULL),
|
||||||
fRawDiskOffset(0),
|
fRawDiskOffset(0),
|
||||||
fSize(0LL),
|
fSize(0LL),
|
||||||
fCache(this),
|
fCache(this),
|
||||||
@@ -121,6 +122,7 @@ Disk::Disk(const char *deviceName, bool rawMode, off_t start, off_t stop)
|
|||||||
//fprintf(stderr,"Could not open file: %s\n",strerror(fFile.InitCheck()));
|
//fprintf(stderr,"Could not open file: %s\n",strerror(fFile.InitCheck()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
fBufferedFile = new BBufferIO(&fFile, 1024 * 1024, false);
|
||||||
|
|
||||||
int device = open(deviceName, O_RDONLY);
|
int device = open(deviceName, O_RDONLY);
|
||||||
if (device < B_OK) {
|
if (device < B_OK) {
|
||||||
@@ -153,7 +155,7 @@ Disk::Disk(const char *deviceName, bool rawMode, off_t start, off_t stop)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fFile.ReadAt(512 + fRawDiskOffset, &fSuperBlock,
|
if (fBufferedFile->ReadAt(512 + fRawDiskOffset, &fSuperBlock,
|
||||||
sizeof(disk_super_block)) < 1)
|
sizeof(disk_super_block)) < 1)
|
||||||
fprintf(stderr,"Disk: Could not read super block\n");
|
fprintf(stderr,"Disk: Could not read super block\n");
|
||||||
|
|
||||||
@@ -163,6 +165,7 @@ Disk::Disk(const char *deviceName, bool rawMode, off_t start, off_t stop)
|
|||||||
|
|
||||||
Disk::~Disk()
|
Disk::~Disk()
|
||||||
{
|
{
|
||||||
|
delete fBufferedFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -256,7 +259,7 @@ Disk::ScanForSuperBlock(off_t start, off_t stop)
|
|||||||
if (((offset-start) % (blockSize * 100)) == 0)
|
if (((offset-start) % (blockSize * 100)) == 0)
|
||||||
printf(" %12Ld, %.2f GB %s1A\n",offset,1.0 * offset / (1024*1024*1024),escape);
|
printf(" %12Ld, %.2f GB %s1A\n",offset,1.0 * offset / (1024*1024*1024),escape);
|
||||||
|
|
||||||
ssize_t bytes = fFile.ReadAt(offset, buffer, blockSize + 1024);
|
ssize_t bytes = fBufferedFile->ReadAt(offset, buffer, blockSize + 1024);
|
||||||
if (bytes < B_OK)
|
if (bytes < B_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"Could not read from device: %s\n", strerror(bytes));
|
fprintf(stderr,"Could not read from device: %s\n", strerror(bytes));
|
||||||
@@ -322,7 +325,7 @@ Disk::ScanForSuperBlock(off_t start, off_t stop)
|
|||||||
// ToDo: free the other disk infos
|
// ToDo: free the other disk infos
|
||||||
|
|
||||||
fRawDiskOffset = info->offset;
|
fRawDiskOffset = info->offset;
|
||||||
fFile.Seek(fRawDiskOffset, SEEK_SET);
|
fBufferedFile->Seek(fRawDiskOffset, SEEK_SET);
|
||||||
|
|
||||||
if (ValidateSuperBlock(info->super_block))
|
if (ValidateSuperBlock(info->super_block))
|
||||||
fSize = info->super_block.block_size * info->super_block.block_size;
|
fSize = info->super_block.block_size * info->super_block.block_size;
|
||||||
@@ -488,7 +491,7 @@ Disk::DetermineBlockSize()
|
|||||||
|
|
||||||
// read a quarter of the drive at maximum
|
// read a quarter of the drive at maximum
|
||||||
for (; offset < (fSize >> 2); offset += 1024) {
|
for (; offset < (fSize >> 2); offset += 1024) {
|
||||||
if (fFile.ReadAt(offset, buffer, sizeof(buffer)) < B_OK) {
|
if (fBufferedFile->ReadAt(offset, buffer, sizeof(buffer)) < B_OK) {
|
||||||
fprintf(stderr, "could not read from device (offset = %Ld, "
|
fprintf(stderr, "could not read from device (offset = %Ld, "
|
||||||
"size = %ld)!\n", offset, sizeof(buffer));
|
"size = %ld)!\n", offset, sizeof(buffer));
|
||||||
status = B_IO_ERROR;
|
status = B_IO_ERROR;
|
||||||
@@ -547,7 +550,7 @@ Disk::GetNextSpecialInode(char *buffer, off_t *_offset, off_t end,
|
|||||||
bfs_inode *inode = (bfs_inode *)buffer;
|
bfs_inode *inode = (bfs_inode *)buffer;
|
||||||
|
|
||||||
for (; offset < end; offset += BlockSize()) {
|
for (; offset < end; offset += BlockSize()) {
|
||||||
if (fFile.ReadAt(offset, buffer, 1024) < B_OK) {
|
if (fBufferedFile->ReadAt(offset, buffer, 1024) < B_OK) {
|
||||||
fprintf(stderr,"could not read from device (offset = %Ld, size = %d)!\n",offset,1024);
|
fprintf(stderr,"could not read from device (offset = %Ld, size = %d)!\n",offset,1024);
|
||||||
*_offset = offset;
|
*_offset = offset;
|
||||||
return B_IO_ERROR;
|
return B_IO_ERROR;
|
||||||
@@ -660,7 +663,7 @@ Disk::ScanForIndexAndRoot(bfs_inode *indexDir,bfs_inode *rootDir)
|
|||||||
SaveInode(inode,&indices,indexDir,&root,rootDir);
|
SaveInode(inode,&indices,indexDir,&root,rootDir);
|
||||||
|
|
||||||
printf("root node at: 0x%Lx (DiskProbe)\n",logOffset / 512);
|
printf("root node at: 0x%Lx (DiskProbe)\n",logOffset / 512);
|
||||||
//fFile.ReadAt(logOffset + BlockSize(),buffer,1024);
|
//fBufferedFile->ReadAt(logOffset + BlockSize(),buffer,1024);
|
||||||
//if (*(uint32 *)buffer == BPLUSTREE_MAGIC)
|
//if (*(uint32 *)buffer == BPLUSTREE_MAGIC)
|
||||||
//{
|
//{
|
||||||
// puts("\t\tnext block in log contains a bplustree!");
|
// puts("\t\tnext block in log contains a bplustree!");
|
||||||
@@ -700,28 +703,28 @@ Disk::ScanForIndexAndRoot(bfs_inode *indexDir,bfs_inode *rootDir)
|
|||||||
ssize_t
|
ssize_t
|
||||||
Disk::Read(void *buffer, size_t size)
|
Disk::Read(void *buffer, size_t size)
|
||||||
{
|
{
|
||||||
return fFile.Read(buffer, size);
|
return fBufferedFile->Read(buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
Disk::Write(const void *buffer, size_t size)
|
Disk::Write(const void *buffer, size_t size)
|
||||||
{
|
{
|
||||||
return fFile.Write(buffer, size);
|
return fBufferedFile->Write(buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
Disk::ReadAt(off_t pos, void *buffer, size_t size)
|
Disk::ReadAt(off_t pos, void *buffer, size_t size)
|
||||||
{
|
{
|
||||||
return fFile.ReadAt(pos + fRawDiskOffset, buffer, size);
|
return fBufferedFile->ReadAt(pos + fRawDiskOffset, buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
Disk::WriteAt(off_t pos, const void *buffer, size_t size)
|
Disk::WriteAt(off_t pos, const void *buffer, size_t size)
|
||||||
{
|
{
|
||||||
return fFile.WriteAt(pos + fRawDiskOffset, buffer, size);
|
return fBufferedFile->WriteAt(pos + fRawDiskOffset, buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -731,14 +734,14 @@ Disk::Seek(off_t position, uint32 seekMode)
|
|||||||
// ToDo: only correct for seekMode == SEEK_SET, right??
|
// ToDo: only correct for seekMode == SEEK_SET, right??
|
||||||
if (seekMode != SEEK_SET)
|
if (seekMode != SEEK_SET)
|
||||||
puts("OH NO, I AM BROKEN!");
|
puts("OH NO, I AM BROKEN!");
|
||||||
return fFile.Seek(position + fRawDiskOffset, seekMode);
|
return fBufferedFile->Seek(position + fRawDiskOffset, seekMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
off_t
|
off_t
|
||||||
Disk::Position() const
|
Disk::Position() const
|
||||||
{
|
{
|
||||||
return fFile.Position() - fRawDiskOffset;
|
return fBufferedFile->Position() - fRawDiskOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <BufferIO.h>
|
||||||
#include <File.h>
|
#include <File.h>
|
||||||
#include <Path.h>
|
#include <Path.h>
|
||||||
|
|
||||||
@@ -91,7 +92,9 @@ class Disk : public BPositionIO
|
|||||||
|
|
||||||
status_t LoadBootBlock();
|
status_t LoadBootBlock();
|
||||||
|
|
||||||
|
protected:
|
||||||
BFile fFile;
|
BFile fFile;
|
||||||
|
BBufferIO* fBufferedFile;
|
||||||
BPath fPath;
|
BPath fPath;
|
||||||
off_t fRawDiskOffset;
|
off_t fRawDiskOffset;
|
||||||
off_t fSize;
|
off_t fSize;
|
||||||
|
|||||||
Reference in New Issue
Block a user