xref: /haiku/headers/os/storage/Entry.h (revision 0ce4c23d22fae64d10e5575687490fbdf8ee52b8)
1 /*
2  * Copyright 2002-2012, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _ENTRY_H
6 #define _ENTRY_H
7 
8 
9 #include <sys/types.h>
10 #include <sys/stat.h>
11 #include <SupportDefs.h>
12 
13 #include <Statable.h>
14 
15 
16 class BDirectory;
17 class BPath;
18 
19 
20 struct entry_ref {
21 								entry_ref();
22 								entry_ref(dev_t dev, ino_t dir,
23 									const char* name);
24 								entry_ref(const entry_ref& ref);
25 								~entry_ref();
26 
27 			status_t			set_name(const char* name);
28 
29 			bool				operator==(const entry_ref& ref) const;
30 			bool				operator!=(const entry_ref& ref) const;
31 			entry_ref&			operator=(const entry_ref& ref);
32 
33 			dev_t				device;
34 			ino_t				directory;
35 			char*				name;
36 };
37 
38 
39 class BEntry : public BStatable {
40 public:
41 								BEntry();
42 								BEntry(const BDirectory* dir, const char* path,
43 									bool traverse = false);
44 								BEntry(const entry_ref* ref,
45 									bool traverse = false);
46 								BEntry(const char* path, bool traverse = false);
47 								BEntry(const BEntry& entry);
48 	virtual						~BEntry();
49 
50 			status_t			InitCheck() const;
51 			bool				Exists() const;
52 
53 			const char*			Name() const;
54 
55 	virtual status_t			GetStat(struct stat* stat) const;
56 
57 			status_t			SetTo(const BDirectory* dir, const char* path,
58 								   bool traverse = false);
59 			status_t			SetTo(const entry_ref* ref,
60 									bool traverse = false);
61 			status_t			SetTo(const char* path, bool traverse = false);
62 			void				Unset();
63 
64 			status_t			GetRef(entry_ref* ref) const;
65 			status_t			GetPath(BPath* path) const;
66 			status_t			GetParent(BEntry* entry) const;
67 			status_t			GetParent(BDirectory* dir) const;
68 			status_t			GetName(char* buffer) const;
69 
70 			status_t			Rename(const char* path, bool clobber = false);
71 			status_t			MoveTo(BDirectory* dir, const char* path = NULL,
72 									bool clobber = false);
73 			status_t			Remove();
74 
75 			bool				operator==(const BEntry& item) const;
76 			bool				operator!=(const BEntry& item) const;
77 
78 			BEntry&				operator=(const BEntry& item);
79 
80 private:
81 			friend class BDirectory;
82 			friend class BFile;
83 			friend class BNode;
84 			friend class BSymLink;
85 
86 	virtual	void				_PennyEntry1();
87 	virtual	void				_PennyEntry2();
88 	virtual	void				_PennyEntry3();
89 	virtual	void				_PennyEntry4();
90 	virtual	void				_PennyEntry5();
91 	virtual	void				_PennyEntry6();
92 
93 	// BEntry implementation of BStatable::set_stat()
94 	virtual	status_t			set_stat(struct stat& stat, uint32 what);
95 			status_t			_SetTo(int dir, const char* path,
96 									bool traverse);
97 			status_t			_SetName(const char* name);
98 
99 			status_t			_Rename(BEntry& target, bool clobber);
100 
101 			void				_Dump(const char* name = NULL);
102 
103 			status_t			_GetStat(struct stat* stat) const;
104 	virtual status_t			_GetStat(struct stat_beos* stat) const;
105 
106 private:
107 			int					fDirFd;
108 			char*				fName;
109 			status_t			fCStatus;
110 
111 			uint32				_reserved[4];
112 };
113 
114 
115 status_t get_ref_for_path(const char* path, entry_ref* ref);
116 bool operator<(const entry_ref& a, const entry_ref& b);
117 
118 
119 #endif	// _ENTRY_H
120