本文整理汇总了C++中VNode::GetDirID方法的典型用法代码示例。如果您正苦于以下问题:C++ VNode::GetDirID方法的具体用法?C++ VNode::GetDirID怎么用?C++ VNode::GetDirID使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VNode
的用法示例。
在下文中一共展示了VNode::GetDirID方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: new
// reiserfs_open
static status_t
reiserfs_open(fs_volume *fs, fs_vnode *_node, int openMode, void **cookie)
{
// FUNCTION_START();
Volume *volume = (Volume*)fs->private_volume;
VNode *node = (VNode*)_node->private_node;
FUNCTION(("node: (%Ld: %lu, %lu)\n", node->GetID(), node->GetDirID(),
node->GetObjectID()));
status_t error = B_OK;
// check the open mode
if ((openMode & O_RWMASK) == O_WRONLY || (openMode & O_RWMASK) == O_RDWR
|| (openMode & (O_TRUNC | O_CREAT))) {
error = B_READ_ONLY_DEVICE;
}
// create a StreamReader
if (error == B_OK) {
StreamReader *reader = new(nothrow) StreamReader(volume->GetTree(),
node->GetDirID(), node->GetObjectID());
if (reader) {
error = reader->Suspend();
if (error == B_OK)
*cookie = reader;
else
delete reader;
} else
error = B_NO_MEMORY;
}
RETURN_ERROR(error);
}
示例2:
// reiserfs_read
static status_t
reiserfs_read(fs_volume *fs, fs_vnode *_node, void *cookie, off_t pos,
void *buffer, size_t *bufferSize)
{
TOUCH(fs);
// FUNCTION_START();
// Volume *volume = (Volume*)fs->private_volume;
VNode *node = (VNode*)_node->private_node;
FUNCTION(("((%Ld: %lu, %lu), %Ld, %p, %lu)\n", node->GetID(),
node->GetDirID(), node->GetObjectID(), pos, buffer,
*bufferSize));
status_t error = B_OK;
// don't read anything but files
if (!node->IsFile()) {
if (node->IsDir())
error = B_IS_A_DIRECTORY;
else
error = B_BAD_VALUE;
}
// read
StreamReader *reader = (StreamReader*)cookie;
if (error == B_OK) {
error = reader->Resume();
if (error == B_OK) {
error = reader->ReadAt(pos, buffer, *bufferSize, bufferSize);
reader->Suspend();
}
}
RETURN_ERROR(error);
}
示例3: TOUCH
// reiserfs_close_dir
static status_t
reiserfs_close_dir(fs_volume *fs, fs_vnode *_node, void *cookie)
{
TOUCH(fs); TOUCH(cookie);
// FUNCTION_START();
VNode *node = (VNode*)_node->private_node;
FUNCTION(("node: (%Ld: %lu, %lu)\n", node->GetID(), node->GetDirID(),
node->GetObjectID()));
TOUCH(node);
return B_OK;
}
示例4: if
// reiserfs_lookup
static status_t
reiserfs_lookup(fs_volume* fs, fs_vnode* _dir, const char *entryName,
ino_t *vnid)
{
// FUNCTION_START();
Volume *volume = (Volume*)fs->private_volume;
VNode *dir = (VNode*)_dir->private_node;
FUNCTION(("dir: (%Ld: %lu, %lu), entry: `%s'\n", dir->GetID(), dir->GetDirID(),
dir->GetObjectID(), entryName));
status_t error = B_OK;
VNode *entryNode = NULL;
// check for non-directories
if (!dir->IsDir()) {
error = B_ENTRY_NOT_FOUND;
// special entries: "." and ".."
} else if (!strcmp(entryName, ".")) {
*vnid = dir->GetID();
if (volume->GetVNode(*vnid, &entryNode) != B_OK)
error = B_BAD_VALUE;
} else if (!strcmp(entryName, "..")) {
*vnid = dir->GetParentID();
if (volume->GetVNode(*vnid, &entryNode) != B_OK)
error = B_BAD_VALUE;
// ordinary entries
} else {
// find the entry
VNode foundNode;
error = volume->FindDirEntry(dir, entryName, &foundNode, true);
// hide non-file/dir/symlink entries, if the user desires that, and
// those entries explicitly set to hidden
if (error == B_OK
&& ((foundNode.IsEsoteric() && volume->GetHideEsoteric())
|| volume->IsNegativeEntry(foundNode.GetID()))) {
error = B_ENTRY_NOT_FOUND;
}
if (error == B_OK) {
*vnid = foundNode.GetID();
error = volume->GetVNode(*vnid, &entryNode);
}
}
// add to the entry cache
if (error == B_OK) {
entry_cache_add(volume->GetID(), dir->GetID(), entryName,
*vnid);
}
RETURN_ERROR(error);
}
示例5: Resume
// reiserfs_rewind_dir
static status_t
reiserfs_rewind_dir(fs_volume *fs, fs_vnode *_node, void *cookie)
{
TOUCH(fs);
// FUNCTION_START();
VNode *node = (VNode*)_node->private_node;
FUNCTION(("node: (%Ld: %lu, %lu)\n", node->GetID(), node->GetDirID(),
node->GetObjectID()));
TOUCH(node);
DirectoryCookie *iterator = (DirectoryCookie*)cookie;
status_t error = iterator->Rewind(); // no need to Resume()
if (error == B_OK)
error = iterator->Suspend();
RETURN_ERROR(error);
}
示例6: strlen
// reiserfs_read_dir
static status_t
reiserfs_read_dir(fs_volume *fs, fs_vnode *_node, void *cookie,
struct dirent *buffer, size_t bufferSize, uint32 *count)
{
// FUNCTION_START();
Volume *volume = (Volume*)fs->private_volume;
VNode *node = (VNode*)_node->private_node;
FUNCTION(("node: (%Ld: %lu, %lu)\n", node->GetID(), node->GetDirID(),
node->GetObjectID()));
DirectoryCookie *iterator = (DirectoryCookie*)cookie;
status_t error = iterator->Resume();
if (error == B_OK) {
// read one entry
DirItem item;
int32 index = 0;
DirEntry *entry = NULL;
bool done = false;
while (error == B_OK && !done
&& (error = iterator->GetNext(&item, &index, &entry)) == B_OK) {
uint32 dirID = entry->GetDirID();
uint32 objectID = entry->GetObjectID();
// skip hidden entries and entries the user specified to be hidden
if (entry->IsHidden() || volume->IsNegativeEntry(dirID, objectID))
continue;
// skip entry, if we can't get the stat data, or it is neither a
// file, a dir nor a symlink and the user desired to hide those.
StatData statData;
StatItem statItem;
if (volume->GetTree()->FindStatItem(dirID, objectID, &statItem)
!= B_OK
|| statItem.GetStatData(&statData) != B_OK
|| (statData.IsEsoteric() && volume->GetHideEsoteric())) {
continue;
}
if (error == B_OK) {
// get the name
size_t nameLen = 0;
const char *name = item.EntryNameAt(index, &nameLen);
if (!name || nameLen == 0) // bad data: skip it gracefully
continue;
// fill in the entry name -- checks whether the
// entry fits into the buffer
error = set_dirent_name(buffer, bufferSize, name,
nameLen);
if (error == B_OK) {
// fill in the other data
buffer->d_dev = volume->GetID();
buffer->d_ino = VNode::GetIDFor(dirID, objectID);
*count = 1;
PRINT(("Successfully read entry: dir: (%Ld: %ld, %ld), name: `%s', "
"id: (%Ld, %ld, %ld), reclen: %hu\n", node->GetID(), node->GetDirID(),
node->GetObjectID(), buffer->d_name, buffer->d_ino, dirID, objectID,
buffer->d_reclen));
if (!strcmp("..", buffer->d_name))
iterator->SetEncounteredDotDot(true);
done = true;
}
}
}
if (error == B_ENTRY_NOT_FOUND) {
if (iterator->EncounteredDotDot()) {
error = B_OK;
*count = 0;
} else {
// this is necessary for the root directory
// it usually has no ".." entry, so we simulate one
// get the name
const char *name = "..";
size_t nameLen = strlen(name);
// fill in the entry name -- checks whether the
// entry fits into the buffer
error = set_dirent_name(buffer, bufferSize, name,
nameLen);
if (error == B_OK) {
// fill in the other data
buffer->d_dev = volume->GetID();
buffer->d_ino = node->GetID();
// < That's not correct!
*count = 1;
PRINT(("faking `..' entry: dir: (%Ld: %ld, %ld), name: `%s', "
"id: (%Ld, %ld, %ld), reclen: %hu\n", node->GetID(), node->GetDirID(),
node->GetObjectID(), buffer->d_name, buffer->d_ino, node->GetDirID(),
node->GetObjectID(), buffer->d_reclen));
iterator->SetEncounteredDotDot(true);
}
}
}
iterator->Suspend();
}
PRINT(("returning %ld entries\n", *count));
RETURN_ERROR(error);
}