root/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingAttributeDirectoryCookie.cpp
/*
 * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */


#include "UnpackingAttributeDirectoryCookie.h"

#include "DebugSupport.h"
#include "PackageNode.h"


UnpackingAttributeDirectoryCookie::UnpackingAttributeDirectoryCookie(
        PackageNode* packageNode)
        :
        AutoPackageAttributeDirectoryCookie(),
        fPackageNode(packageNode),
        fAttribute(NULL)
{
        if (fPackageNode != NULL) {
                fPackageNode->AcquireReference();
                fAttribute = fPackageNode->Attributes().Head();
        }
}


UnpackingAttributeDirectoryCookie::~UnpackingAttributeDirectoryCookie()
{
        if (fPackageNode != NULL)
                fPackageNode->ReleaseReference();
}


/*static*/ status_t
UnpackingAttributeDirectoryCookie::Open(PackageNode* packageNode,
        AttributeDirectoryCookie*& _cookie)
{
        UnpackingAttributeDirectoryCookie* cookie = new(std::nothrow)
                UnpackingAttributeDirectoryCookie(packageNode);
        if (cookie == NULL)
                return B_NO_MEMORY;

        _cookie = cookie;
        return B_OK;
}


status_t
UnpackingAttributeDirectoryCookie::Rewind()
{
        if (fPackageNode != NULL)
                fAttribute = fPackageNode->Attributes().Head();

        return AutoPackageAttributeDirectoryCookie::Rewind();
}


String
UnpackingAttributeDirectoryCookie::CurrentCustomAttributeName()
{
        return fAttribute != NULL ? fAttribute->Name() : String();
}


String
UnpackingAttributeDirectoryCookie::NextCustomAttributeName()
{
        if (fAttribute != NULL)
                fAttribute = fPackageNode->Attributes().GetNext(fAttribute);
        return fAttribute != NULL ? fAttribute->Name() : String();
}