Use the new get_default_partition_content_name() to construct a useful

volume name -- ReiserFS volumes don't support names.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26404 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2008-07-13 12:52:05 +00:00
parent f9f2d81621
commit 0af6c60b15
3 changed files with 28 additions and 7 deletions
@@ -78,6 +78,7 @@ Volume::Volume()
fSettings(NULL), fSettings(NULL),
fNegativeEntries() fNegativeEntries()
{ {
fVolumeName[0] = '\0';
} }
// destructor // destructor
@@ -86,6 +87,7 @@ Volume::~Volume()
Unmount(); Unmount();
} }
// Identify // Identify
status_t status_t
Volume::Identify(int fd, partition_data *partition) Volume::Identify(int fd, partition_data *partition)
@@ -131,6 +133,10 @@ Volume::Mount(fs_volume *fsVolume, const char *path)
// read and analyze super block // read and analyze super block
if (error == B_OK) if (error == B_OK)
error = _ReadSuperBlock(); error = _ReadSuperBlock();
if (error == B_OK)
UpdateName(fsVolume->partition);
// create and init block cache // create and init block cache
if (error == B_OK) { if (error == B_OK) {
fBlockCache = new(nothrow) BlockCache; fBlockCache = new(nothrow) BlockCache;
@@ -248,9 +254,21 @@ Volume::CountFreeBlocks() const
const char * const char *
Volume::GetName() const Volume::GetName() const
{ {
return fSettings->GetVolumeName(); return fVolumeName;
} }
// UpdateName
void
Volume::UpdateName(partition_id partitionID)
{
if (get_default_partition_content_name(partitionID, "ReiserFS",
fVolumeName, sizeof(fVolumeName)) != B_OK) {
strlcpy(fVolumeName, "ReiserFS Volume", sizeof(fVolumeName));
}
}
// GetDeviceName // GetDeviceName
const char * const char *
Volume::GetDeviceName() const Volume::GetDeviceName() const
@@ -658,4 +676,3 @@ Volume::_InitNegativeEntries()
} }
} }
} }
@@ -53,6 +53,7 @@ public:
off_t CountBlocks() const; off_t CountBlocks() const;
off_t CountFreeBlocks() const; off_t CountFreeBlocks() const;
const char *GetName() const; const char *GetName() const;
void UpdateName(partition_id partitionID);
const char *GetDeviceName() const; const char *GetDeviceName() const;
BlockCache *GetBlockCache() const { return fBlockCache; } BlockCache *GetBlockCache() const { return fBlockCache; }
@@ -102,6 +103,7 @@ private:
char *fDeviceName; char *fDeviceName;
Settings *fSettings; Settings *fSettings;
List<ino_t> fNegativeEntries; List<ino_t> fNegativeEntries;
char fVolumeName[B_OS_NAME_LENGTH];
}; };
#endif // VOLUME_H #endif // VOLUME_H
@@ -1,6 +1,6 @@
// kernel_interface.cpp // kernel_interface.cpp
// //
// Copyright (c) 2003-2004, Ingo Weinhold ([email protected]) // Copyright (c) 2003-2008, Ingo Weinhold ([email protected])
// //
// This program is free software; you can redistribute it and/or modify // This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@@ -88,8 +88,10 @@ reiserfs_scan_partition(int fd, partition_data *partition, void *_cookie)
partition->content_size = volume->CountBlocks() partition->content_size = volume->CountBlocks()
* volume->GetBlockSize(); * volume->GetBlockSize();
partition->block_size = volume->GetBlockSize(); partition->block_size = volume->GetBlockSize();
// TODO: Construct name from partition layout?
partition->content_name = strdup("Untitled ReiserFS"); volume->UpdateName(partition->id);
// must be done after setting the content size
partition->content_name = strdup(volume->GetName());
if (partition->content_name == NULL) if (partition->content_name == NULL)
return B_NO_MEMORY; return B_NO_MEMORY;
@@ -163,9 +165,9 @@ reiserfs_read_fs_info(fs_volume* fs, struct fs_info *info)
info->io_size = kOptimalIOSize; info->io_size = kOptimalIOSize;
info->total_blocks = volume->CountBlocks(); info->total_blocks = volume->CountBlocks();
info->free_blocks = volume->CountFreeBlocks(); info->free_blocks = volume->CountFreeBlocks();
strncpy(info->device_name, volume->GetDeviceName(), strlcpy(info->device_name, volume->GetDeviceName(),
sizeof(info->device_name)); sizeof(info->device_name));
strncpy(info->volume_name, volume->GetName(), sizeof(info->volume_name)); strlcpy(info->volume_name, volume->GetName(), sizeof(info->volume_name));
return B_OK; return B_OK;
} }