1/* 2 * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include "UnpackingAttributeDirectoryCookie.h" 8 9#include "DebugSupport.h" 10#include "PackageNode.h" 11 12 13UnpackingAttributeDirectoryCookie::UnpackingAttributeDirectoryCookie( 14 PackageNode* packageNode) 15 : 16 AutoPackageAttributeDirectoryCookie(), 17 fPackageNode(packageNode), 18 fAttribute(NULL) 19{ 20 if (fPackageNode != NULL) { 21 fPackageNode->AcquireReference(); 22 fAttribute = fPackageNode->Attributes().Head(); 23 } 24} 25 26 27UnpackingAttributeDirectoryCookie::~UnpackingAttributeDirectoryCookie() 28{ 29 if (fPackageNode != NULL) 30 fPackageNode->ReleaseReference(); 31} 32 33 34/*static*/ status_t 35UnpackingAttributeDirectoryCookie::Open(PackageNode* packageNode, 36 AttributeDirectoryCookie*& _cookie) 37{ 38 UnpackingAttributeDirectoryCookie* cookie = new(std::nothrow) 39 UnpackingAttributeDirectoryCookie(packageNode); 40 if (cookie == NULL) 41 return B_NO_MEMORY; 42 43 _cookie = cookie; 44 return B_OK; 45} 46 47 48status_t 49UnpackingAttributeDirectoryCookie::Rewind() 50{ 51 if (fPackageNode != NULL) 52 fAttribute = fPackageNode->Attributes().Head(); 53 54 return AutoPackageAttributeDirectoryCookie::Rewind(); 55} 56 57 58String 59UnpackingAttributeDirectoryCookie::CurrentCustomAttributeName() 60{ 61 return fAttribute != NULL ? fAttribute->Name() : String(); 62} 63 64 65String 66UnpackingAttributeDirectoryCookie::NextCustomAttributeName() 67{ 68 if (fAttribute != NULL) 69 fAttribute = fPackageNode->Attributes().GetNext(fAttribute); 70 return fAttribute != NULL ? fAttribute->Name() : String(); 71} 72