root/src/add-ons/kernel/file_systems/nfs4/VnodeToInode.cpp
/*
 * Copyright 2012 Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *              Paweł Dziepak, pdziepak@quarnos.org
 */


#include "VnodeToInode.h"


Inode*
VnodeToInode::Get()
{
        if (fInode == NULL) {
                status_t result = fFileSystem->GetInode(fID, &fInode);
                if (result != B_OK)
                        fInode = NULL;
        }

        return fInode;
}


void
VnodeToInode::Replace(Inode* newInode)
{
        WriteLocker _(fLock);
        if (!IsRoot())
                delete fInode;

        fInode = newInode;
}


bool
VnodeToInode::Unlink(InodeNames* parent, const char* name)
{
        WriteLocker _(fLock);
        if (fInode != NULL && !IsRoot()) {
                return fInode->GetFileSystem()->InoIdMap()->RemoveName(fID, parent,
                        name);
        }

        return false;
}


void
VnodeToInode::Dump(void (*xprintf)(const char*, ...))
{
        xprintf("VTI\t%" B_PRIdINO " at %p\n", fID);

        ReadLocker locker;
        if (xprintf != kprintf)
                locker.SetTo(fLock, false);

        if (fInode != NULL)
                fInode->Dump(xprintf);
        else
                xprintf("NULL Inode");

        return;
}