1 /* 2 * Copyright 2011-2013, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7 #include "UnpackingNode.h" 8 9 #include "DebugSupport.h" 10 #include "Node.h" 11 #include "PackageNode.h" 12 13 14 UnpackingNode::~UnpackingNode() 15 { 16 } 17 18 19 status_t 20 UnpackingNode::CloneTransferPackageNodes(ino_t id, UnpackingNode*& _newNode) 21 { 22 return B_BAD_VALUE; 23 } 24 25 26 status_t 27 UnpackingNode::NodeInitVFS(dev_t deviceID, ino_t nodeID, 28 PackageNode* packageNode) 29 { 30 status_t error = B_OK; 31 if (packageNode != NULL) 32 error = packageNode->VFSInit(deviceID, nodeID); 33 34 return error; 35 } 36 37 38 void 39 UnpackingNode::NodeUninitVFS(PackageNode* packageNode, uint32& nodeFlags) 40 { 41 if (packageNode != NULL) { 42 if ((nodeFlags & NODE_FLAG_VFS_INIT_ERROR) == 0) 43 packageNode->VFSUninit(); 44 else 45 nodeFlags &= ~(uint32)NODE_FLAG_VFS_INIT_ERROR; 46 } 47 } 48 49 50 void 51 UnpackingNode::NodeReinitVFS(dev_t deviceID, ino_t nodeID, 52 PackageNode* packageNode, PackageNode* previousPackageNode, 53 uint32& nodeFlags) 54 { 55 if ((nodeFlags & NODE_FLAG_KNOWN_TO_VFS) == 0) 56 return; 57 58 if (packageNode != previousPackageNode) { 59 bool hadInitError = (nodeFlags & NODE_FLAG_VFS_INIT_ERROR) != 0; 60 nodeFlags &= ~(uint32)NODE_FLAG_VFS_INIT_ERROR; 61 62 if (packageNode != NULL) { 63 status_t error = packageNode->VFSInit(deviceID, nodeID); 64 if (error != B_OK) { 65 ERROR("UnpackingNode::NodeReinitVFS(): VFSInit() failed for " 66 "(%" B_PRIdDEV ", %" B_PRIdINO ")\n", deviceID, nodeID); 67 nodeFlags |= NODE_FLAG_VFS_INIT_ERROR; 68 } 69 } 70 71 if (previousPackageNode != NULL && !hadInitError) 72 previousPackageNode->VFSUninit(); 73 } 74 } 75