xref: /haiku/headers/os/storage/Path.h (revision f8da8f3477d3c18142e59d17d05a545982faa5a8)
1 /*
2  * Copyright 2002-2012, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _PATH_H
6 #define _PATH_H
7 
8 
9 #include <Flattenable.h>
10 #include <Message.h>
11 #include <StorageDefs.h>
12 
13 
14 // Forward declarations
15 class BDirectory;
16 class BEntry;
17 struct entry_ref;
18 
19 
20 class BPath : public BFlattenable {
21 public:
22 							BPath();
23 							BPath(const BPath& path);
24 							BPath(const entry_ref* ref);
25 							BPath(const BEntry* entry);
26 							BPath(const char* dir, const char* leaf = NULL,
27 								bool normalize = false);
28 							BPath(const BDirectory* dir,
29 								const char* leaf = NULL,
30 								bool normalize = false);
31 
32 	virtual					~BPath();
33 
34 			status_t		InitCheck() const;
35 
36 			status_t		SetTo(const entry_ref* ref);
37 			status_t		SetTo(const BEntry* entry);
38 			status_t		SetTo(const char* path, const char* leaf = NULL,
39 								bool normalize = false);
40 			status_t		SetTo(const BDirectory* dir,
41 								const char* leaf = NULL,
42 								bool normalize = false);
43 			void			Unset();
44 
45 			status_t		Append(const char* path, bool normalize = false);
46 
47 			const char*		Path() const;
48 			const char*		Leaf() const;
49 			status_t		GetParent(BPath* path) const;
50 			bool			IsAbsolute() const;
51 
52 			bool			operator==(const BPath& item) const;
53 			bool			operator==(const char* path) const;
54 			bool			operator!=(const BPath& item) const;
55 			bool			operator!=(const char* path) const;
56 			BPath&			operator=(const BPath& item);
57 			BPath&			operator=(const char* path);
58 
59 	// BFlattenable protocol
60 	virtual	bool			IsFixedSize() const;
61 	virtual	type_code		TypeCode() const;
62 	virtual	ssize_t			FlattenedSize() const;
63 	virtual	status_t		Flatten(void* buffer, ssize_t size) const;
64 	virtual	bool			AllowsTypeCode(type_code code) const;
65 	virtual	status_t		Unflatten(type_code code, const void* buffer,
66 								ssize_t size);
67 
68 private:
69 	virtual void			_WarPath1();
70 	virtual void			_WarPath2();
71 	virtual void			_WarPath3();
72 
73 			status_t		_SetPath(const char* path);
74 	static	bool			_MustNormalize(const char* path, status_t* _error);
75 
76 			uint32			_reserved[4];
77 
78 			char*			fName;
79 								// Pointer to the path string of the object.
80 			status_t		fCStatus;
81 								// The initialization status of the object.
82 };
83 
84 #endif	// _PATH_H
85