1*5a1d355fSStephan Aßmus // Entry.cpp
2*5a1d355fSStephan Aßmus
3*5a1d355fSStephan Aßmus #include "Entry.h"
4*5a1d355fSStephan Aßmus
5*5a1d355fSStephan Aßmus #include "Directory.h"
6*5a1d355fSStephan Aßmus #include "FDManager.h"
7*5a1d355fSStephan Aßmus #include "Path.h"
8*5a1d355fSStephan Aßmus #include "Volume.h"
9*5a1d355fSStephan Aßmus #include "VolumeManager.h"
10*5a1d355fSStephan Aßmus
11*5a1d355fSStephan Aßmus // #pragma mark -
12*5a1d355fSStephan Aßmus
13*5a1d355fSStephan Aßmus // Entry
14*5a1d355fSStephan Aßmus
15*5a1d355fSStephan Aßmus // constructor
Entry(Volume * volume,Directory * directory,const char * name,Node * node)16*5a1d355fSStephan Aßmus Entry::Entry(Volume* volume, Directory* directory, const char* name, Node* node)
17*5a1d355fSStephan Aßmus : fVolume(volume),
18*5a1d355fSStephan Aßmus fDirectory(directory),
19*5a1d355fSStephan Aßmus fName(name),
20*5a1d355fSStephan Aßmus fNode(node),
21*5a1d355fSStephan Aßmus fDirEntryLink()
22*5a1d355fSStephan Aßmus {
23*5a1d355fSStephan Aßmus }
24*5a1d355fSStephan Aßmus
25*5a1d355fSStephan Aßmus // destructor
~Entry()26*5a1d355fSStephan Aßmus Entry::~Entry()
27*5a1d355fSStephan Aßmus {
28*5a1d355fSStephan Aßmus }
29*5a1d355fSStephan Aßmus
30*5a1d355fSStephan Aßmus // InitCheck
31*5a1d355fSStephan Aßmus status_t
InitCheck() const32*5a1d355fSStephan Aßmus Entry::InitCheck() const
33*5a1d355fSStephan Aßmus {
34*5a1d355fSStephan Aßmus return (fName.GetLength() > 0 ? B_OK : B_NO_MEMORY);
35*5a1d355fSStephan Aßmus }
36*5a1d355fSStephan Aßmus
37*5a1d355fSStephan Aßmus // GetVolume
38*5a1d355fSStephan Aßmus Volume*
GetVolume() const39*5a1d355fSStephan Aßmus Entry::GetVolume() const
40*5a1d355fSStephan Aßmus {
41*5a1d355fSStephan Aßmus return fVolume;
42*5a1d355fSStephan Aßmus }
43*5a1d355fSStephan Aßmus
44*5a1d355fSStephan Aßmus // GetDirectory
45*5a1d355fSStephan Aßmus Directory*
GetDirectory() const46*5a1d355fSStephan Aßmus Entry::GetDirectory() const
47*5a1d355fSStephan Aßmus {
48*5a1d355fSStephan Aßmus return fDirectory;
49*5a1d355fSStephan Aßmus }
50*5a1d355fSStephan Aßmus
51*5a1d355fSStephan Aßmus // GetEntryRef
52*5a1d355fSStephan Aßmus NoAllocEntryRef
GetEntryRef() const53*5a1d355fSStephan Aßmus Entry::GetEntryRef() const
54*5a1d355fSStephan Aßmus {
55*5a1d355fSStephan Aßmus return NoAllocEntryRef(fVolume->GetID(), fDirectory->GetID(),
56*5a1d355fSStephan Aßmus fName.GetString());
57*5a1d355fSStephan Aßmus }
58*5a1d355fSStephan Aßmus
59*5a1d355fSStephan Aßmus // GetVolumeID
60*5a1d355fSStephan Aßmus dev_t
GetVolumeID() const61*5a1d355fSStephan Aßmus Entry::GetVolumeID() const
62*5a1d355fSStephan Aßmus {
63*5a1d355fSStephan Aßmus return fVolume->GetID();
64*5a1d355fSStephan Aßmus }
65*5a1d355fSStephan Aßmus
66*5a1d355fSStephan Aßmus // GetDirectoryID
67*5a1d355fSStephan Aßmus ino_t
GetDirectoryID() const68*5a1d355fSStephan Aßmus Entry::GetDirectoryID() const
69*5a1d355fSStephan Aßmus {
70*5a1d355fSStephan Aßmus return fDirectory->GetID();
71*5a1d355fSStephan Aßmus }
72*5a1d355fSStephan Aßmus
73*5a1d355fSStephan Aßmus // GetName
74*5a1d355fSStephan Aßmus const char*
GetName() const75*5a1d355fSStephan Aßmus Entry::GetName() const
76*5a1d355fSStephan Aßmus {
77*5a1d355fSStephan Aßmus return fName.GetString();
78*5a1d355fSStephan Aßmus }
79*5a1d355fSStephan Aßmus
80*5a1d355fSStephan Aßmus // GetNode
81*5a1d355fSStephan Aßmus Node*
GetNode() const82*5a1d355fSStephan Aßmus Entry::GetNode() const
83*5a1d355fSStephan Aßmus {
84*5a1d355fSStephan Aßmus return fNode;
85*5a1d355fSStephan Aßmus }
86*5a1d355fSStephan Aßmus
87*5a1d355fSStephan Aßmus // GetPath
88*5a1d355fSStephan Aßmus status_t
GetPath(Path * path)89*5a1d355fSStephan Aßmus Entry::GetPath(Path* path)
90*5a1d355fSStephan Aßmus {
91*5a1d355fSStephan Aßmus return VolumeManager::GetDefault()->GetPath(this, path);
92*5a1d355fSStephan Aßmus }
93*5a1d355fSStephan Aßmus
94*5a1d355fSStephan Aßmus // Exists
95*5a1d355fSStephan Aßmus bool
Exists() const96*5a1d355fSStephan Aßmus Entry::Exists() const
97*5a1d355fSStephan Aßmus {
98*5a1d355fSStephan Aßmus NoAllocEntryRef entryRef(GetEntryRef());
99*5a1d355fSStephan Aßmus BEntry bEntry;
100*5a1d355fSStephan Aßmus return (FDManager::SetEntry(&bEntry, &entryRef) == B_OK && bEntry.Exists());
101*5a1d355fSStephan Aßmus }
102*5a1d355fSStephan Aßmus
103*5a1d355fSStephan Aßmus // IsActualEntry
104*5a1d355fSStephan Aßmus bool
IsActualEntry() const105*5a1d355fSStephan Aßmus Entry::IsActualEntry() const
106*5a1d355fSStephan Aßmus {
107*5a1d355fSStephan Aßmus return (fName.GetLength() > 0 && fName != "." && fName != "..");
108*5a1d355fSStephan Aßmus }
109