// Volume.cpp #include "Volume.h" #include #include #include "Compatibility.h" #include "DebugSupport.h" #include "Node.h" #include "QueryManager.h" #include "VolumeManager.h" // constructor Volume::Volume(VolumeManager* volumeManager) : FSObject(), fLock("volume"), fVolumeManager(volumeManager), fParentVolume(NULL), fName(), fUnmounting(false) { } // destructor Volume::~Volume() { } // GetVolumeManager VolumeManager* Volume::GetVolumeManager() const { return fVolumeManager; } // SetParentVolume void Volume::SetParentVolume(Volume* parent) { AutoLocker _(fLock); fParentVolume = parent; } // GetParentVolume Volume* Volume::GetParentVolume() const { return fParentVolume; } // PutVolume void Volume::PutVolume() { fVolumeManager->PutVolume(this); } // Init status_t Volume::Init(const char* name) { if (!name || strlen(name) == 0) return B_BAD_VALUE; if (!fName.SetTo(name)) return B_NO_MEMORY; return B_OK; } // Uninit void Volume::Uninit() { } // GetName const char* Volume::GetName() const { return fName.GetString(); } // GetRootID vnode_id Volume::GetRootID() const { return GetRootNode()->GetID(); } // SetUnmounting void Volume::SetUnmounting(bool unmounting) { fUnmounting = unmounting; } // IsUnmounting bool Volume::IsUnmounting() const { return fUnmounting; } // HandleEvent void Volume::HandleEvent(VolumeEvent* event) { } // PrepareToUnmount void Volume::PrepareToUnmount() { fVolumeManager->GetQueryManager()->VolumeUnmounting(this); } // #pragma mark - // #pragma mark ----- client methods ----- // GetVNode status_t Volume::GetVNode(vnode_id vnid, Node** node) { return get_vnode(fVolumeManager->GetID(), vnid, (void**)node); } // PutVNode status_t Volume::PutVNode(vnode_id vnid) { return put_vnode(fVolumeManager->GetID(), vnid); } // NewVNode status_t Volume::NewVNode(vnode_id vnid, Node* node) { status_t error = new_vnode(fVolumeManager->GetID(), vnid, node); if (error == B_OK) node->SetKnownToVFS(true); return error; } // RemoveVNode status_t Volume::RemoveVNode(vnode_id vnid) { return remove_vnode(fVolumeManager->GetID(), vnid); } // UnremoveVNode status_t Volume::UnremoveVNode(vnode_id vnid) { return unremove_vnode(fVolumeManager->GetID(), vnid); } // IsVNodeRemoved int Volume::IsVNodeRemoved(vnode_id vnid) { return is_vnode_removed(fVolumeManager->GetID(), vnid); } // SendNotification int Volume::SendNotification(port_id port, int32 token, uint32 what, int32 op, nspace_id nsida, nspace_id nsidb, vnode_id vnida, vnode_id vnidb, vnode_id vnidc, const char *name) { PRINT("Volume::SendNotification(%" B_PRId32 ", %" B_PRId32 ", 0x%" B_PRIx32 ", 0x%" B_PRIx32 ", %" B_PRId32 ", %" B_PRId32 ", %" B_PRIdINO "," " %" B_PRIdINO ", %" B_PRIdINO ", \"%s\")\n", port, token, what, op, nsida, nsidb, vnida, vnidb, vnidc, name); return send_notification(port, token, what, op, nsida, nsidb, vnida, vnidb, vnidc, name); } // NotifyListener int Volume::NotifyListener(int32 opcode, nspace_id nsid, vnode_id vnida, vnode_id vnidb, vnode_id vnidc, const char *name) { return notify_listener(opcode, nsid, vnida, vnidb, vnidc, name); } // #pragma mark - // #pragma mark ----- FS ----- // Unmount status_t Volume::Unmount() { return B_BAD_VALUE; } // Sync status_t Volume::Sync() { return B_BAD_VALUE; } // ReadFSStat status_t Volume::ReadFSStat(fs_info* info) { return B_BAD_VALUE; } // WriteFSStat status_t Volume::WriteFSStat(struct fs_info* info, int32 mask) { return B_BAD_VALUE; } // #pragma mark - // #pragma mark ----- vnodes ----- // ReadVNode status_t Volume::ReadVNode(vnode_id vnid, char reenter, Node** _node) { return B_BAD_VALUE; } // WriteVNode status_t Volume::WriteVNode(Node* node, char reenter) { return B_BAD_VALUE; } // RemoveVNode status_t Volume::RemoveVNode(Node* node, char reenter) { return B_BAD_VALUE; } // #pragma mark - // #pragma mark ----- nodes ----- // FSync status_t Volume::FSync(Node* node) { return B_BAD_VALUE; } // ReadStat status_t Volume::ReadStat(Node* node, struct stat* st) { return B_BAD_VALUE; } // WriteStat status_t Volume::WriteStat(Node* node, struct stat *st, uint32 mask) { return B_BAD_VALUE; } // Access status_t Volume::Access(Node* node, int mode) { return B_BAD_VALUE; } // #pragma mark - // #pragma mark ----- files ----- // Create status_t Volume::Create(Node* dir, const char* name, int openMode, int mode, vnode_id* vnid, void** cookie) { return B_BAD_VALUE; } // Open status_t Volume::Open(Node* node, int openMode, void** cookie) { return B_BAD_VALUE; } // Close status_t Volume::Close(Node* node, void* cookie) { return B_BAD_VALUE; } // FreeCookie status_t Volume::FreeCookie(Node* node, void* cookie) { return B_BAD_VALUE; } // Read status_t Volume::Read(Node* node, void* cookie, off_t pos, void* _buffer, size_t bufferSize, size_t* _bytesRead) { return B_BAD_VALUE; } // Write status_t Volume::Write(Node* node, void* cookie, off_t pos, const void* _buffer, size_t bufferSize, size_t* bytesWritten) { return B_BAD_VALUE; } // IOCtl status_t Volume::IOCtl(Node* node, void* cookie, int cmd, void* buffer, size_t bufferSize) { return B_DEV_INVALID_IOCTL; } // SetFlags status_t Volume::SetFlags(Node* node, void* cookie, int flags) { return B_BAD_VALUE; } // #pragma mark - // #pragma mark ----- hard links / symlinks ----- // Link status_t Volume::Link(Node* dir, const char* name, Node* node) { return B_BAD_VALUE; } // Unlink status_t Volume::Unlink(Node* dir, const char* name) { return B_BAD_VALUE; } // Symlink status_t Volume::Symlink(Node* dir, const char* name, const char* target) { return B_BAD_VALUE; } // ReadLink status_t Volume::ReadLink(Node* node, char* buffer, size_t bufferSize, size_t* bytesRead) { return B_BAD_VALUE; } // Rename status_t Volume::Rename(Node* oldDir, const char* oldName, Node* newDir, const char* newName) { return B_BAD_VALUE; } // #pragma mark - // #pragma mark ----- directories ----- // MkDir status_t Volume::MkDir(Node* dir, const char* name, int mode) { return B_BAD_VALUE; } // RmDir status_t Volume::RmDir(Node* dir, const char* name) { return B_BAD_VALUE; } // OpenDir status_t Volume::OpenDir(Node* node, void** _cookie) { return B_BAD_VALUE; } // CloseDir status_t Volume::CloseDir(Node* node, void* cookie) { return B_BAD_VALUE; } // FreeDirCookie status_t Volume::FreeDirCookie(Node* node, void* _cookie) { return B_BAD_VALUE; } // ReadDir status_t Volume::ReadDir(Node* node, void* _cookie, struct dirent* buffer, size_t bufferSize, int32 count, int32* countRead) { return B_BAD_VALUE; } // RewindDir status_t Volume::RewindDir(Node* node, void* _cookie) { return B_BAD_VALUE; } // Walk status_t Volume::Walk(Node* dir, const char* entryName, char** resolvedPath, vnode_id* vnid) { return B_BAD_VALUE; } // #pragma mark - // #pragma mark ----- attributes ----- // OpenAttrDir status_t Volume::OpenAttrDir(Node* node, void** _cookie) { return B_BAD_VALUE; } // CloseAttrDir status_t Volume::CloseAttrDir(Node* node, void* cookie) { return B_BAD_VALUE; } // FreeAttrDirCookie status_t Volume::FreeAttrDirCookie(Node* node, void* _cookie) { return B_BAD_VALUE; } // ReadAttrDir status_t Volume::ReadAttrDir(Node* node, void* _cookie, struct dirent* buffer, size_t bufferSize, int32 count, int32* countRead) { return B_BAD_VALUE; } // RewindAttrDir status_t Volume::RewindAttrDir(Node* node, void* _cookie) { return B_BAD_VALUE; } // ReadAttr status_t Volume::ReadAttr(Node* node, const char* name, int type, off_t pos, void* _buffer, size_t bufferSize, size_t* _bytesRead) { return B_BAD_VALUE; } // WriteAttr status_t Volume::WriteAttr(Node* node, const char* name, int type, off_t pos, const void* _buffer, size_t bufferSize, size_t* bytesWritten) { return B_BAD_VALUE; } // RemoveAttr status_t Volume::RemoveAttr(Node* node, const char* name) { return B_BAD_VALUE; } // RenameAttr status_t Volume::RenameAttr(Node* node, const char* oldName, const char* newName) { return B_BAD_VALUE; } // StatAttr status_t Volume::StatAttr(Node* node, const char* name, struct attr_info* attrInfo) { return B_BAD_VALUE; } // #pragma mark - // #pragma mark ----- queries ----- // OpenQuery status_t Volume::OpenQuery(const char* queryString, uint32 flags, port_id port, int32 token, QueryIterator** iterator) { return B_BAD_VALUE; } // FreeQueryIterator void Volume::FreeQueryIterator(QueryIterator* iterator) { } // ReadQuery status_t Volume::ReadQuery(QueryIterator* iterator, struct dirent* buffer, size_t bufferSize, int32 count, int32* countRead) { return B_BAD_VALUE; }