1//----------------------------------------------------------------------
2//  This software is part of the Haiku distribution and is covered
3//  by the MIT License.
4//---------------------------------------------------------------------
5/*!
6	\file Entry.h
7	BEntry and entry_ref interface declarations.
8*/
9#ifndef _ENTRY_H
10#define _ENTRY_H
11
12#include <sys/types.h>
13#include <sys/stat.h>
14#include <SupportDefs.h>
15
16#include <Statable.h>
17
18#ifdef USE_OPENBEOS_NAMESPACE
19namespace OpenBeOS {
20#endif
21
22class	BDirectory;
23class	BPath;
24
25struct entry_ref {
26	entry_ref();
27  	entry_ref(dev_t dev, ino_t dir, const char *name);
28	entry_ref(const entry_ref &ref);
29	~entry_ref();
30
31  	status_t set_name(const char *name);
32
33	bool operator==(const entry_ref &ref) const;
34	bool operator!=(const entry_ref &ref) const;
35	entry_ref &operator=(const entry_ref &ref);
36
37	dev_t	device;
38	ino_t	directory;
39	char	*name;
40};
41
42class BEntry : public BStatable {
43public:
44	BEntry();
45	BEntry(const BDirectory *dir, const char *path, bool traverse = false);
46	BEntry(const entry_ref *ref, bool traverse = false);
47	BEntry(const char *path, bool traverse = false);
48	BEntry(const BEntry &entry);
49	virtual ~BEntry();
50
51	status_t InitCheck() const;
52	bool Exists() const;
53
54	const char* Name() const;
55
56	virtual status_t GetStat(struct stat *st) const;
57
58	status_t SetTo(const BDirectory *dir, const char *path,
59				   bool traverse = false);
60	status_t SetTo(const entry_ref *ref, 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
80private:
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	/*! Currently unused. */
94	uint32 _pennyData[4];
95
96	/*! BEntry implementation of BStatable::set_stat() */
97	virtual	status_t set_stat(struct stat &st, uint32 what);
98
99	status_t set(int dir, const char *path, bool traverse);
100
101	/*! File descriptor for the entry's parent directory. */
102	int fDirFd;
103
104	/*! Leaf name of the entry. */
105	char *fName;
106
107	/*! The object's initialization status. */
108	status_t fCStatus;
109
110	status_t set_name(const char *name);
111
112	status_t _Rename(BEntry& target, bool clobber);
113
114	void Dump(const char *name = NULL);
115};
116
117// C functions
118
119status_t get_ref_for_path(const char *path, entry_ref *ref);
120bool operator<(const entry_ref &a, const entry_ref &b);
121
122
123#ifdef USE_OPENBEOS_NAMESPACE
124};		// namespace OpenBeOS
125#endif
126
127#endif	// _ENTRY_H
128