コード例 #1
0
ファイル: haiku_kernel_emu.cpp プロジェクト: AmirAbrams/haiku
// unremove_vnode
status_t
unremove_vnode(fs_volume *_volume, ino_t vnodeID)
{
	HaikuKernelVolume* volume = HaikuKernelVolume::GetVolume(_volume);

	return UserlandFS::KernelEmu::unremove_vnode(volume->GetID(), vnodeID);
}
コード例 #2
0
ファイル: haiku_kernel_emu.cpp プロジェクト: AmirAbrams/haiku
// get_vnode_removed
status_t
get_vnode_removed(fs_volume *_volume, ino_t vnodeID, bool* removed)
{
	HaikuKernelVolume* volume = HaikuKernelVolume::GetVolume(_volume);

	return UserlandFS::KernelEmu::get_vnode_removed(volume->GetID(), vnodeID,
		removed);
}
コード例 #3
0
ファイル: haiku_kernel_emu.cpp プロジェクト: DonCN/haiku
// get_vnode
status_t
get_vnode(fs_volume *_volume, ino_t vnodeID, void **privateNode)
{
	HaikuKernelVolume* volume = HaikuKernelVolume::GetVolume(_volume);

	// get the node
	void* foundNode;
	status_t error = UserlandFS::KernelEmu::get_vnode(volume->GetID(), vnodeID,
		&foundNode);
	if (error != B_OK)
		return error;

	*privateNode = ((HaikuKernelNode*)foundNode)->private_node;

	return B_OK;
}
コード例 #4
0
ファイル: haiku_kernel_emu.cpp プロジェクト: AmirAbrams/haiku
status_t
vfs_lookup_vnode(dev_t mountID, ino_t vnodeID, struct vnode **_vnode)
{
	// get the volume
	HaikuKernelVolume* volume = dynamic_cast<HaikuKernelVolume*>(
		FileSystem::GetInstance()->VolumeWithID(mountID));
	if (volume == NULL)
		return B_BAD_VALUE;

	// get the node
	HaikuKernelNode* node = volume->NodeWithID(vnodeID);
	if (node == NULL)
		return B_BAD_VALUE;

	*_vnode = (struct vnode*)node;

	return B_OK;
}
コード例 #5
0
ファイル: haiku_kernel_emu.cpp プロジェクト: AmirAbrams/haiku
// new_vnode
status_t
new_vnode(fs_volume *_volume, ino_t vnodeID, void *privateNode,
	fs_vnode_ops *ops)
{
	HaikuKernelVolume* volume = HaikuKernelVolume::GetVolume(_volume);

	// translate to a wrapper node
	HaikuKernelNode* node;
	status_t error = volume->NewVNode(vnodeID, privateNode, ops, &node);
	if (error != B_OK)
		return error;

	// announce the new node
	error = UserlandFS::KernelEmu::new_vnode(volume->GetID(), vnodeID, node,
		node->capabilities->capabilities);
	if (error != B_OK)
		volume->UndoNewVNode(node);

	return error;
}
コード例 #6
0
ファイル: haiku_kernel_emu.cpp プロジェクト: AmirAbrams/haiku
// publish_vnode
status_t
publish_vnode(fs_volume *_volume, ino_t vnodeID, void *privateNode,
	fs_vnode_ops *ops, int type, uint32 flags)
{
	HaikuKernelVolume* volume = HaikuKernelVolume::GetVolume(_volume);

	// translate to a wrapper node
	HaikuKernelNode* node;
	status_t error = volume->PublishVNode(vnodeID, privateNode, ops, type,
		flags, &node);
	if (error != B_OK)
		return error;

	// publish the new node
	error = UserlandFS::KernelEmu::publish_vnode(volume->GetID(), vnodeID, node,
		type, flags, node->capabilities->capabilities);
	if (error != B_OK)
		volume->UndoPublishVNode(node);

	return error;
}
コード例 #7
0
// CreateVolume
status_t
HaikuKernelFileSystem::CreateVolume(Volume** _volume, dev_t id)
{
	// check initialization and parameters
	if (!fFSModule || !_volume)
		return B_BAD_VALUE;

	// create and init the volume
	HaikuKernelVolume* volume
		= new(std::nothrow) HaikuKernelVolume(this, id, fFSModule);
	if (!volume)
		return B_NO_MEMORY;

	status_t error = volume->Init();
	if (error != B_OK) {
		delete volume;
		return error;
	}

	*_volume = volume;
	return B_OK;
}