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