xref: /haiku/headers/os/storage/Statable.h (revision 850f2d1e58cc443f77353c7fc0ce0c158c1fd328)
1 /*
2  * Copyright 2002-2014 Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _STATABLE_H
6 #define _STATABLE_H
7 
8 
9 #include <SupportDefs.h>
10 
11 #include <sys/types.h>
12 #include <sys/stat.h>
13 
14 
15 struct node_ref;
16 struct stat_beos;
17 class BVolume;
18 
19 
20 class BStatable {
21 public:
22 #if __GNUC__ > 3
23 	virtual ~BStatable();
24 #endif
25 
26 private:
27 	virtual status_t _GetStat(struct stat_beos* stat) const = 0;
28 		// provided for BeOS compatibility
29 
30 public:
31 	virtual status_t GetStat(struct stat* stat) const = 0;
32 
33 	bool IsFile() const;
34 	bool IsDirectory() const;
35 	bool IsSymLink() const;
36 
37 	status_t GetNodeRef(node_ref* ref) const;
38 
39 	status_t GetOwner(uid_t* owner) const;
40 	status_t SetOwner(uid_t owner);
41 
42 	status_t GetGroup(gid_t* group) const;
43 	status_t SetGroup(gid_t group);
44 
45 	status_t GetPermissions(mode_t* permissions) const;
46 	status_t SetPermissions(mode_t permissions);
47 
48 	status_t GetSize(off_t* size) const;
49 
50 	status_t GetModificationTime(time_t* mtime) const;
51 	status_t SetModificationTime(time_t mtime);
52 
53 	status_t GetCreationTime(time_t* ctime) const;
54 	status_t SetCreationTime(time_t ctime);
55 
56 	status_t GetAccessTime(time_t* atime) const;
57 	status_t SetAccessTime(time_t atime);
58 
59 	status_t GetVolume(BVolume* volume) const;
60 
61 	class Private;
62 
63 private:
64 	friend class BEntry;
65 	friend class BNode;
66 	friend class Private;
67 
68 	virtual	void _OhSoStatable2();
69 	virtual	void _OhSoStatable3();
70 	uint32 _reserved[4];
71 
72 	virtual	status_t set_stat(struct stat &st, uint32 what) = 0;
73 };
74 
75 #endif // _STATABLE_H
76