change format of fs_volume to match current kernel filesystem interface

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42016 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Alexander von Gluck IV
2011-06-07 18:07:25 +00:00
parent 8e4f760cb8
commit 3de080c186
5 changed files with 142 additions and 115 deletions
@@ -119,7 +119,7 @@ BlockReferenceManager::Table::Init(int32 size)
{ {
status_t error = (size > 0 ? B_OK : B_BAD_VALUE); status_t error = (size > 0 ? B_OK : B_BAD_VALUE);
if (error == B_OK) { if (error == B_OK) {
fReferences = new(nothrow) BlockReference[size]; fReferences = new(std::nothrow) BlockReference[size];
if (fReferences) if (fReferences)
fSize = size; fSize = size;
else else
@@ -3,6 +3,7 @@
#ifndef BLOCK_REFERENCE_MANAGER_H #ifndef BLOCK_REFERENCE_MANAGER_H
#define BLOCK_REFERENCE_MANAGER_H #define BLOCK_REFERENCE_MANAGER_H
#include <new>
#include "List.h" #include "List.h"
class AllocationInfo; class AllocationInfo;
@@ -93,8 +93,8 @@ typedef List<EntryListenerValue> EntryListenerList;
// Volume // Volume
class Volume { class Volume {
public: public:
Volume(); Volume(fs_volume* volume);
~Volume(); ~Volume();
status_t Mount(dev_t nsid); status_t Mount(dev_t nsid);
status_t Unmount(); status_t Unmount();
@@ -8,7 +8,7 @@
#include "cpp.h" #include "cpp.h"
//const struct nothrow_t nothrow = {}; const struct nothrow_t nothrow = {};
//extern "C" void __pure_virtual() //extern "C" void __pure_virtual()
//{ //{
@@ -85,37 +85,37 @@ ramfs_mount(dev_t nsid, const char* /*device*/, uint32 flags,
{ {
FUNCTION_START(); FUNCTION_START();
// parameters are ignored for now // parameters are ignored for now
status_t error = B_OK;
// fail, if read-only mounting is requested // fail, if read-only mounting is requested
if (flags & B_MOUNT_READ_ONLY) if (flags & B_MOUNT_READ_ONLY)
error = B_BAD_VALUE; return B_BAD_VALUE;
// allocate and init the volume
Volume *volume = NULL;
if (error == B_OK) {
volume = new(nothrow) Volume;
if (!volume)
SET_ERROR(error, B_NO_MEMORY);
if (error == B_OK)
error = volume->Mount(nsid);
}
// set the results
if (error == B_OK) {
*rootID = volume->GetRootDirectory()->GetID();
*_volume = volume;
}
// cleanup on failure
if (error != B_OK && volume)
delete volume;
RETURN_ERROR(error); // allocate and init the volume
Volume *volume = new(std::nothrow) Volume(_volume);
if (volume == NULL)
return B_NO_MEMORY;
status_t status = volume->Mount(nsid);
if (status != B_OK) {
delete volume;
RETURN_ERROR(status);
}
*rootID = volume->GetRootDirectory()->GetID();
_volume->private_volume = volume;
RETURN_ERROR(B_OK);
} }
// ramfs_unmount // ramfs_unmount
static status_t static status_t
ramfs_unmount(fs_volume fs) ramfs_unmount(fs_volume* _volume)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
status_t error = volume->Unmount(); status_t error = volume->Unmount();
if (error == B_OK) if (error == B_OK)
delete volume; delete volume;
@@ -126,10 +126,10 @@ ramfs_unmount(fs_volume fs)
// ramfs_read_fs_info // ramfs_read_fs_info
static status_t static status_t
ramfs_read_fs_info(fs_volume fs, struct fs_info *info) ramfs_read_fs_info(fs_volume* _volume, struct fs_info *info)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
status_t error = B_OK; status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
info->flags = B_FS_IS_PERSISTENT | B_FS_HAS_ATTR | B_FS_HAS_MIME info->flags = B_FS_IS_PERSISTENT | B_FS_HAS_ATTR | B_FS_HAS_MIME
@@ -149,11 +149,11 @@ ramfs_read_fs_info(fs_volume fs, struct fs_info *info)
// ramfs_write_fs_info // ramfs_write_fs_info
static status_t static status_t
ramfs_write_fs_info(fs_volume fs, const struct fs_info *info, uint32 mask) ramfs_write_fs_info(fs_volume* _volume, const struct fs_info *info, uint32 mask)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
status_t error = B_OK; status_t error = B_OK;
if (VolumeWriteLocker locker = volume) { if (VolumeWriteLocker locker = volume) {
if (mask & FS_WRITE_FSINFO_NAME) if (mask & FS_WRITE_FSINFO_NAME)
@@ -177,11 +177,12 @@ ramfs_sync(fs_volume /*fs*/)
// ramfs_lookup // ramfs_lookup
static status_t static status_t
ramfs_lookup(fs_volume fs, fs_vnode _dir, const char *entryName, ino_t *vnid, ramfs_lookup(fs_volume* _volume, fs_vnode _dir, const char *entryName, ino_t *vnid,
int *type) int *type)
{ {
// FUNCTION_START(); // FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Directory *dir = dynamic_cast<Directory*>((Node*)_dir); Directory *dir = dynamic_cast<Directory*>((Node*)_dir);
FUNCTION(("dir: (%llu), entry: `%s'\n", (dir ? dir->GetID() : -1), entryName)); FUNCTION(("dir: (%llu), entry: `%s'\n", (dir ? dir->GetID() : -1), entryName));
@@ -224,11 +225,11 @@ SET_ERROR(error, error);
// ramfs_read_vnode // ramfs_read_vnode
static status_t static status_t
ramfs_read_vnode(fs_volume fs, ino_t vnid, fs_vnode *node, bool reenter) ramfs_read_vnode(fs_volume* _volume, ino_t vnid, fs_vnode *node, bool reenter)
{ {
// FUNCTION_START(); // FUNCTION_START();
FUNCTION(("node: %Ld\n", vnid)); FUNCTION(("node: %Ld\n", vnid));
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *foundNode = NULL; Node *foundNode = NULL;
status_t error = B_OK; status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
@@ -257,10 +258,11 @@ ramfs_write_vnode(fs_volume /*fs*/, fs_vnode DARG(_node), bool /*reenter*/)
// ramfs_remove_vnode // ramfs_remove_vnode
static status_t static status_t
ramfs_remove_vnode(fs_volume fs, fs_vnode _node, bool /*reenter*/) ramfs_remove_vnode(fs_volume* _volume, fs_vnode _node, bool /*reenter*/)
{ {
FUNCTION(("node: %Ld\n", ((Node*)_node)->GetID())); FUNCTION(("node: %Ld\n", ((Node*)_node)->GetID()));
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
status_t error = B_OK; status_t error = B_OK;
if (VolumeWriteLocker locker = volume) { if (VolumeWriteLocker locker = volume) {
@@ -277,12 +279,13 @@ FUNCTION(("node: %Ld\n", ((Node*)_node)->GetID()));
// ramfs_ioctl // ramfs_ioctl
static status_t static status_t
ramfs_ioctl(fs_volume fs, fs_vnode /*node*/, fs_cookie /*cookie*/, uint32 cmd, ramfs_ioctl(fs_volume* _volume, fs_vnode /*node*/, fs_cookie /*cookie*/, uint32 cmd,
void *buffer, size_t /*length*/) void *buffer, size_t /*length*/)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
status_t error = B_OK; status_t error = B_OK;
switch (cmd) { switch (cmd) {
case RAMFS_IOCTL_GET_ALLOCATION_INFO: case RAMFS_IOCTL_GET_ALLOCATION_INFO:
@@ -344,11 +347,12 @@ ramfs_fsync(fs_volume /*fs*/, fs_vnode /*node*/)
// ramfs_read_symlink // ramfs_read_symlink
static status_t static status_t
ramfs_read_symlink(fs_volume fs, fs_vnode _node, char *buffer, ramfs_read_symlink(fs_volume* _volume, fs_vnode _node, char *buffer,
size_t *bufferSize) size_t *bufferSize)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
status_t error = B_OK; status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
@@ -376,11 +380,12 @@ ramfs_read_symlink(fs_volume fs, fs_vnode _node, char *buffer,
// ramfs_create_symlink // ramfs_create_symlink
static status_t static status_t
ramfs_create_symlink(fs_volume fs, fs_vnode _dir, const char *name, ramfs_create_symlink(fs_volume* _volume, fs_vnode _dir, const char *name,
const char *path, int mode) const char *path, int mode)
{ {
FUNCTION(("name: `%s', path: `%s'\n", name, path)); FUNCTION(("name: `%s', path: `%s'\n", name, path));
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Directory *dir = dynamic_cast<Directory*>((Node*)_dir); Directory *dir = dynamic_cast<Directory*>((Node*)_dir);
status_t error = B_OK; status_t error = B_OK;
// check name // check name
@@ -432,10 +437,11 @@ ramfs_create_symlink(fs_volume fs, fs_vnode _dir, const char *name,
// ramfs_link // ramfs_link
static status_t static status_t
ramfs_link(fs_volume fs, fs_vnode _dir, const char *name, fs_vnode _node) ramfs_link(fs_volume* _volume, fs_vnode _dir, const char *name, fs_vnode _node)
{ {
FUNCTION(("name: `%s'\n", name)); FUNCTION(("name: `%s'\n", name));
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Directory *dir = dynamic_cast<Directory*>((Node*)_dir); Directory *dir = dynamic_cast<Directory*>((Node*)_dir);
Node *node = (Node*)_node; Node *node = (Node*)_node;
status_t error = B_OK; status_t error = B_OK;
@@ -474,10 +480,11 @@ ramfs_link(fs_volume fs, fs_vnode _dir, const char *name, fs_vnode _node)
// ramfs_unlink // ramfs_unlink
static status_t static status_t
ramfs_unlink(fs_volume fs, fs_vnode _dir, const char *name) ramfs_unlink(fs_volume* _volume, fs_vnode _dir, const char *name)
{ {
FUNCTION(("name: `%s'\n", name)); FUNCTION(("name: `%s'\n", name));
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Directory *dir = dynamic_cast<Directory*>((Node*)_dir); Directory *dir = dynamic_cast<Directory*>((Node*)_dir);
status_t error = B_OK; status_t error = B_OK;
// check name // check name
@@ -517,10 +524,11 @@ ramfs_unlink(fs_volume fs, fs_vnode _dir, const char *name)
// ramfs_rename // ramfs_rename
static status_t static status_t
ramfs_rename(fs_volume fs, fs_vnode _oldDir, const char *oldName, ramfs_rename(fs_volume* _volume, fs_vnode _oldDir, const char *oldName,
fs_vnode _newDir, const char *newName) fs_vnode _newDir, const char *newName)
{ {
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Directory *oldDir = dynamic_cast<Directory*>((Node*)_oldDir); Directory *oldDir = dynamic_cast<Directory*>((Node*)_oldDir);
Directory *newDir = dynamic_cast<Directory*>((Node*)_newDir); Directory *newDir = dynamic_cast<Directory*>((Node*)_newDir);
status_t error = B_OK; status_t error = B_OK;
@@ -633,11 +641,12 @@ oldDir->GetID(), oldName, newDir->GetID(), newName));
// ramfs_access // ramfs_access
static status_t static status_t
ramfs_access(fs_volume fs, fs_vnode _node, int mode) ramfs_access(fs_volume* _volume, fs_vnode _node, int mode)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
status_t error = B_OK; status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
error = node->CheckPermissions(mode); error = node->CheckPermissions(mode);
@@ -648,12 +657,13 @@ ramfs_access(fs_volume fs, fs_vnode _node, int mode)
// ramfs_read_stat // ramfs_read_stat
static status_t static status_t
ramfs_read_stat(fs_volume fs, fs_vnode _node, struct stat *st) ramfs_read_stat(fs_volume* _volume, fs_vnode _node, struct stat *st)
{ {
// FUNCTION_START(); // FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
FUNCTION(("node: %Ld\n", node->GetID()));
FUNCTION(("node: %Ld\n", node->GetID()));
status_t error = B_OK; status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
st->st_dev = volume->GetID(); st->st_dev = volume->GetID();
@@ -675,12 +685,13 @@ FUNCTION(("node: %Ld\n", node->GetID()));
// ramfs_write_stat // ramfs_write_stat
static status_t static status_t
ramfs_write_stat(fs_volume fs, fs_vnode _node, const struct stat *st, ramfs_write_stat(fs_volume* _volume, fs_vnode _node, const struct stat *st,
uint32 mask) uint32 mask)
{ {
FUNCTION(("mask: %lx\n", mask)); Volume* volume = (Volume*)_volume->private_volume;
Volume *volume = (Volume*)fs;
Node *node = (Node*)_node; Node *node = (Node*)_node;
FUNCTION(("mask: %lx\n", mask));
status_t error = B_OK; status_t error = B_OK;
if (VolumeWriteLocker locker = volume) { if (VolumeWriteLocker locker = volume) {
NodeMTimeUpdater mTimeUpdater(node); NodeMTimeUpdater mTimeUpdater(node);
@@ -747,12 +758,13 @@ private:
// ramfs_create // ramfs_create
static status_t static status_t
ramfs_create(fs_volume fs, fs_vnode _dir, const char *name, int openMode, ramfs_create(fs_volume* _volume, fs_vnode _dir, const char *name, int openMode,
int mode, fs_cookie *_cookie, ino_t *vnid) int mode, fs_cookie *_cookie, ino_t *vnid)
{ {
// FUNCTION_START(); // FUNCTION_START();
FUNCTION(("name: `%s', open mode: %x, mode: %x\n", name, openMode, mode)); FUNCTION(("name: `%s', open mode: %x, mode: %x\n", name, openMode, mode));
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Directory *dir = dynamic_cast<Directory*>((Node*)_dir); Directory *dir = dynamic_cast<Directory*>((Node*)_dir);
status_t error = B_OK; status_t error = B_OK;
// check name // check name
@@ -831,12 +843,13 @@ ramfs_create(fs_volume fs, fs_vnode _dir, const char *name, int openMode,
// ramfs_open // ramfs_open
static status_t static status_t
ramfs_open(fs_volume fs, fs_vnode _node, int openMode, fs_cookie *_cookie) ramfs_open(fs_volume* _volume, fs_vnode _node, int openMode, fs_cookie *_cookie)
{ {
// FUNCTION_START(); // FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
FUNCTION(("node: %Ld\n", node->GetID()));
FUNCTION(("node: %Ld\n", node->GetID()));
status_t error = B_OK; status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
// directory can be opened read-only // directory can be opened read-only
@@ -872,12 +885,13 @@ FUNCTION(("node: %Ld\n", node->GetID()));
// ramfs_close // ramfs_close
static status_t static status_t
ramfs_close(fs_volume fs, fs_vnode _node, fs_cookie /*cookie*/) ramfs_close(fs_volume* _volume, fs_vnode _node, fs_cookie /*cookie*/)
{ {
// FUNCTION_START(); // FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
FUNCTION(("node: %Ld\n", node->GetID()));
FUNCTION(("node: %Ld\n", node->GetID()));
status_t error = B_OK; status_t error = B_OK;
// notify listeners // notify listeners
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
@@ -900,13 +914,14 @@ ramfs_free_cookie(fs_volume /*fs*/, fs_vnode /*_node*/, fs_cookie _cookie)
// ramfs_read // ramfs_read
static status_t static status_t
ramfs_read(fs_volume fs, fs_vnode _node, fs_cookie _cookie, off_t pos, ramfs_read(fs_volume* _volume, fs_vnode _node, fs_cookie _cookie, off_t pos,
void *buffer, size_t *bufferSize) void *buffer, size_t *bufferSize)
{ {
// FUNCTION_START(); // FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
FileCookie *cookie = (FileCookie*)_cookie; FileCookie *cookie = (FileCookie*)_cookie;
// FUNCTION(("((%lu, %lu), %Ld, %p, %lu)\n", node->GetDirID(), // FUNCTION(("((%lu, %lu), %Ld, %p, %lu)\n", node->GetDirID(),
// node->GetObjectID(), pos, buffer, *bufferSize)); // node->GetObjectID(), pos, buffer, *bufferSize));
status_t error = B_OK; status_t error = B_OK;
@@ -935,12 +950,13 @@ ramfs_read(fs_volume fs, fs_vnode _node, fs_cookie _cookie, off_t pos,
// ramfs_write // ramfs_write
static status_t static status_t
ramfs_write(fs_volume fs, fs_vnode _node, fs_cookie _cookie, off_t pos, ramfs_write(fs_volume* _volume, fs_vnode _node, fs_cookie _cookie, off_t pos,
const void *buffer, size_t *bufferSize) const void *buffer, size_t *bufferSize)
{ {
// FUNCTION_START(); // FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
FileCookie *cookie = (FileCookie*)_cookie; FileCookie *cookie = (FileCookie*)_cookie;
// FUNCTION(("((%lu, %lu), %Ld, %p, %lu)\n", node->GetDirID(), // FUNCTION(("((%lu, %lu), %Ld, %p, %lu)\n", node->GetDirID(),
// node->GetObjectID(), pos, buffer, *bufferSize)); // node->GetObjectID(), pos, buffer, *bufferSize));
@@ -1061,10 +1077,11 @@ vint32 DirectoryCookie::fNextIteratorID = 0;
// ramfs_create_dir // ramfs_create_dir
static status_t static status_t
ramfs_create_dir(fs_volume fs, fs_vnode _dir, const char *name, int mode) ramfs_create_dir(fs_volume* _volume, fs_vnode _dir, const char *name, int mode)
{ {
FUNCTION(("name: `%s', mode: %x\n", name, mode)); FUNCTION(("name: `%s', mode: %x\n", name, mode));
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Directory *dir = dynamic_cast<Directory*>((Node*)_dir); Directory *dir = dynamic_cast<Directory*>((Node*)_dir);
status_t error = B_OK; status_t error = B_OK;
// check name // check name
@@ -1116,10 +1133,11 @@ ramfs_create_dir(fs_volume fs, fs_vnode _dir, const char *name, int mode)
// ramfs_remove_dir // ramfs_remove_dir
static status_t static status_t
ramfs_remove_dir(fs_volume fs, fs_vnode _dir, const char *name) ramfs_remove_dir(fs_volume* _volume, fs_vnode _dir, const char *name)
{ {
FUNCTION(("name: `%s'\n", name)); FUNCTION(("name: `%s'\n", name));
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Directory *dir = dynamic_cast<Directory*>((Node*)_dir); Directory *dir = dynamic_cast<Directory*>((Node*)_dir);
status_t error = B_OK; status_t error = B_OK;
// check name // check name
@@ -1217,13 +1235,14 @@ ramfs_free_dir_cookie(fs_volume /*fs*/, fs_vnode /*_node*/, fs_cookie _cookie)
// ramfs_read_dir // ramfs_read_dir
static status_t static status_t
ramfs_read_dir(fs_volume fs, fs_vnode DARG(_node), fs_cookie _cookie, ramfs_read_dir(fs_volume* _volume, fs_vnode DARG(_node), fs_cookie _cookie,
struct dirent *buffer, size_t bufferSize, uint32 *count) struct dirent *buffer, size_t bufferSize, uint32 *count)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
DARG(Node *node = (Node*)_node; ) DARG(Node *node = (Node*)_node; )
FUNCTION(("dir: (%Lu)\n", node->GetID()));
FUNCTION(("dir: (%Lu)\n", node->GetID()));
DirectoryCookie *cookie = (DirectoryCookie*)_cookie; DirectoryCookie *cookie = (DirectoryCookie*)_cookie;
status_t error = B_OK; status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
@@ -1276,11 +1295,12 @@ ramfs_rewind_dir(fs_volume /*fs*/, fs_vnode /*_node*/, fs_cookie _cookie)
// ramfs_open_attr_dir // ramfs_open_attr_dir
static status_t static status_t
ramfs_open_attr_dir(fs_volume fs, fs_vnode _node, fs_cookie *cookie) ramfs_open_attr_dir(fs_volume* _volume, fs_vnode _node, fs_cookie *cookie)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
status_t error = B_OK; status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
// check permissions // check permissions
@@ -1331,11 +1351,12 @@ ramfs_free_attr_dir_cookie(fs_volume /*fs*/, fs_vnode /*_node*/,
// ramfs_read_attr_dir // ramfs_read_attr_dir
static status_t static status_t
ramfs_read_attr_dir(fs_volume fs, fs_vnode _node, fs_cookie cookie, ramfs_read_attr_dir(fs_volume* _volume, fs_vnode _node, fs_cookie cookie,
struct dirent *buffer, size_t bufferSize, uint32 *count) struct dirent *buffer, size_t bufferSize, uint32 *count)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
AttributeIterator *iterator = (AttributeIterator*)cookie; AttributeIterator *iterator = (AttributeIterator*)cookie;
status_t error = B_OK; status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
@@ -1424,11 +1445,11 @@ private:
// ramfs_create_attr // ramfs_create_attr
static status_t static status_t
ramfs_create_attr(fs_volume fs, fs_vnode _node, const char *name, uint32 type, ramfs_create_attr(fs_volume* _volume, fs_vnode _node, const char *name, uint32 type,
int openMode, fs_cookie *_cookie) int openMode, fs_cookie *_cookie)
{ {
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
if (VolumeWriteLocker locker = volume) { if (VolumeWriteLocker locker = volume) {
@@ -1494,13 +1515,14 @@ ramfs_create_attr(fs_volume fs, fs_vnode _node, const char *name, uint32 type,
// ramfs_open_attr // ramfs_open_attr
static status_t static status_t
ramfs_open_attr(fs_volume fs, fs_vnode _node, const char *name, int openMode, ramfs_open_attr(fs_volume* _volume, fs_vnode _node, const char *name, int openMode,
fs_cookie *_cookie) fs_cookie *_cookie)
{ {
// FUNCTION_START(); // FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
FUNCTION(("node: %lld\n", node->GetID()));
FUNCTION(("node: %lld\n", node->GetID()));
status_t error = B_OK; status_t error = B_OK;
if (VolumeWriteLocker locker = volume) { if (VolumeWriteLocker locker = volume) {
@@ -1552,12 +1574,13 @@ FUNCTION(("node: %lld\n", node->GetID()));
// ramfs_close_attr // ramfs_close_attr
static status_t static status_t
ramfs_close_attr(fs_volume fs, fs_vnode _node, fs_cookie cookie) ramfs_close_attr(fs_volume* _volume, fs_vnode _node, fs_cookie cookie)
{ {
// FUNCTION_START(); // FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
FUNCTION(("node: %lld\n", node->GetID()));
FUNCTION(("node: %lld\n", node->GetID()));
status_t error = B_OK; status_t error = B_OK;
// notify listeners // notify listeners
@@ -1581,15 +1604,15 @@ ramfs_free_attr_cookie(fs_volume /*fs*/, fs_vnode /*_node*/, fs_cookie _cookie)
// ramfs_read_attr // ramfs_read_attr
static status_t static status_t
ramfs_read_attr(fs_volume fs, fs_vnode _node, fs_cookie _cookie, off_t pos, ramfs_read_attr(fs_volume* _volume, fs_vnode _node, fs_cookie _cookie, off_t pos,
void *buffer, size_t *bufferSize) void *buffer, size_t *bufferSize)
{ {
// FUNCTION_START(); // FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
AttributeCookie *cookie = (AttributeCookie*)_cookie; AttributeCookie *cookie = (AttributeCookie*)_cookie;
status_t error = B_OK;
status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
// find the attribute // find the attribute
Attribute *attribute = NULL; Attribute *attribute = NULL;
@@ -1611,15 +1634,15 @@ ramfs_read_attr(fs_volume fs, fs_vnode _node, fs_cookie _cookie, off_t pos,
// ramfs_write_attr // ramfs_write_attr
static status_t static status_t
ramfs_write_attr(fs_volume fs, fs_vnode _node, fs_cookie _cookie, off_t pos, ramfs_write_attr(fs_volume* _volume, fs_vnode _node, fs_cookie _cookie, off_t pos,
const void *buffer, size_t *bufferSize) const void *buffer, size_t *bufferSize)
{ {
// FUNCTION_START(); // FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
AttributeCookie *cookie = (AttributeCookie*)_cookie; AttributeCookie *cookie = (AttributeCookie*)_cookie;
status_t error = B_OK;
status_t error = B_OK;
// Don't allow writing the reserved attributes. // Don't allow writing the reserved attributes.
const char *name = cookie->GetName(); const char *name = cookie->GetName();
if (name[0] == '\0' || !strcmp(name, "name") if (name[0] == '\0' || !strcmp(name, "name")
@@ -1657,11 +1680,11 @@ ramfs_write_attr(fs_volume fs, fs_vnode _node, fs_cookie _cookie, off_t pos,
// ramfs_read_attr_stat // ramfs_read_attr_stat
static status_t static status_t
ramfs_read_attr_stat(fs_volume fs, fs_vnode _node, fs_cookie _cookie, ramfs_read_attr_stat(fs_volume* _volume, fs_vnode _node, fs_cookie _cookie,
struct stat *st) struct stat *st)
{ {
// FUNCTION_START(); // FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
AttributeCookie *cookie = (AttributeCookie*)_cookie; AttributeCookie *cookie = (AttributeCookie*)_cookie;
status_t error = B_OK; status_t error = B_OK;
@@ -1698,13 +1721,14 @@ ramfs_rename_attr(fs_volume /*fs*/, fs_vnode /*_fromNode*/,
// ramfs_remove_attr // ramfs_remove_attr
static status_t static status_t
ramfs_remove_attr(fs_volume fs, fs_vnode _node, const char *name) ramfs_remove_attr(fs_volume* _volume, fs_vnode _node, const char *name)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
Node *node = (Node*)_node; Node *node = (Node*)_node;
status_t error = B_OK; status_t error = B_OK;
if (VolumeWriteLocker locker = volume) { if (VolumeWriteLocker locker = volume) {
NodeMTimeUpdater mTimeUpdater(node); NodeMTimeUpdater mTimeUpdater(node);
@@ -1744,10 +1768,10 @@ public:
// ramfs_open_index_dir // ramfs_open_index_dir
static status_t static status_t
ramfs_open_index_dir(fs_volume fs, fs_cookie *_cookie) ramfs_open_index_dir(fs_volume* _volume, fs_cookie *_cookie)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
status_t error = B_OK; status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
// check whether an index directory exists // check whether an index directory exists
@@ -1784,13 +1808,14 @@ ramfs_free_index_dir_cookie(fs_volume /*fs*/, fs_cookie _cookie)
// ramfs_read_index_dir // ramfs_read_index_dir
static status_t static status_t
ramfs_read_index_dir(fs_volume fs, fs_cookie _cookie, struct dirent *buffer, ramfs_read_index_dir(fs_volume* _volume, fs_cookie _cookie, struct dirent *buffer,
size_t bufferSize, uint32 *count) size_t bufferSize, uint32 *count)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
IndexDirCookie *cookie = (IndexDirCookie*)_cookie; IndexDirCookie *cookie = (IndexDirCookie*)_cookie;
status_t error = B_OK; status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
// get the next index // get the next index
Index *index = volume->GetIndexDirectory()->IndexAt( Index *index = volume->GetIndexDirectory()->IndexAt(
@@ -1830,12 +1855,13 @@ ramfs_rewind_index_dir(fs_volume /*fs*/, fs_cookie _cookie)
// ramfs_create_index // ramfs_create_index
static status_t static status_t
ramfs_create_index(fs_volume fs, const char *name, uint32 type, ramfs_create_index(fs_volume* _volume, const char *name, uint32 type,
uint32 /*flags*/) uint32 /*flags*/)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
status_t error = B_OK; status_t error = B_OK;
// only root is allowed to manipulate the indices // only root is allowed to manipulate the indices
if (geteuid() != 0) { if (geteuid() != 0) {
SET_ERROR(error, B_NOT_ALLOWED); SET_ERROR(error, B_NOT_ALLOWED);
@@ -1859,10 +1885,10 @@ ramfs_create_index(fs_volume fs, const char *name, uint32 type,
// ramfs_remove_index // ramfs_remove_index
static status_t static status_t
ramfs_remove_index(fs_volume fs, const char *name) ramfs_remove_index(fs_volume* _volume, const char *name)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
status_t error = B_OK; status_t error = B_OK;
// only root is allowed to manipulate the indices // only root is allowed to manipulate the indices
if (geteuid() != 0) { if (geteuid() != 0) {
@@ -1888,10 +1914,10 @@ ramfs_remove_index(fs_volume fs, const char *name)
// ramfs_read_index_stat // ramfs_read_index_stat
static status_t static status_t
ramfs_read_index_stat(fs_volume fs, const char *name, struct stat *st) ramfs_read_index_stat(fs_volume* _volume, const char *name, struct stat *st)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume*)fs; Volume* volume = (Volume*)_volume->private_volume;
status_t error = B_OK; status_t error = B_OK;
if (VolumeReadLocker locker = volume) { if (VolumeReadLocker locker = volume) {
// get the index directory // get the index directory
@@ -1925,13 +1951,13 @@ ramfs_read_index_stat(fs_volume fs, const char *name, struct stat *st)
// ramfs_open_query // ramfs_open_query
static status_t static status_t
ramfs_open_query(fs_volume fs, const char *queryString, uint32 flags, ramfs_open_query(fs_volume* _volume, const char *queryString, uint32 flags,
port_id port, uint32 token, fs_cookie *cookie) port_id port, uint32 token, fs_cookie *cookie)
{ {
FUNCTION_START(); FUNCTION_START();
PRINT(("query = \"%s\", flags = %lu, port_id = %ld, token = %ld\n", queryString, flags, port, token)); PRINT(("query = \"%s\", flags = %lu, port_id = %ld, token = %ld\n", queryString, flags, port, token));
Volume *volume = (Volume *)fs; Volume* volume = (Volume*)_volume->private_volume;
// lock the volume // lock the volume
VolumeReadLocker locker(volume); VolumeReadLocker locker(volume);
@@ -1976,11 +2002,11 @@ ramfs_close_query(fs_volume /*fs*/, fs_cookie /*cookie*/)
// ramfs_free_query_cookie // ramfs_free_query_cookie
static status_t static status_t
ramfs_free_query_cookie(fs_volume fs, fs_cookie cookie) ramfs_free_query_cookie(fs_volume* _volume, fs_cookie cookie)
{ {
FUNCTION_START(); FUNCTION_START();
Volume *volume = (Volume *)fs; Volume* volume = (Volume*)_volume->private_volume;
// lock the volume // lock the volume
VolumeReadLocker locker(volume); VolumeReadLocker locker(volume);
@@ -1997,12 +2023,12 @@ ramfs_free_query_cookie(fs_volume fs, fs_cookie cookie)
// ramfs_read_query // ramfs_read_query
static status_t static status_t
ramfs_read_query(fs_volume fs, fs_cookie cookie, struct dirent *buffer, ramfs_read_query(fs_volume* _volume, fs_cookie cookie, struct dirent *buffer,
size_t bufferSize, uint32 *count) size_t bufferSize, uint32 *count)
{ {
FUNCTION_START(); FUNCTION_START();
Query *query = (Query *)cookie; Query *query = (Query *)cookie;
Volume *volume = (Volume *)fs; Volume* volume = (Volume*)_volume->private_volume;
// lock the volume // lock the volume
VolumeReadLocker locker(volume); VolumeReadLocker locker(volume);