1 //---------------------------------------------------------------------- 2 // This software is part of the OpenBeOS distribution and is covered 3 // by the OpenBeOS license. 4 //--------------------------------------------------------------------- 5 /*! 6 \file Directory.h 7 BDirectory interface declaration. 8 */ 9 10 #ifndef _DIRECTORY_H 11 #define _DIRECTORY_H 12 13 #include <Node.h> 14 #include <EntryList.h> 15 #include <StorageDefs.h> 16 #include <StorageDefs.Private.h> 17 18 #ifdef USE_OPENBEOS_NAMESPACE 19 namespace OpenBeOS { 20 #endif 21 22 class BFile; 23 class BSymLink; 24 25 /*! 26 \class BDirectory 27 \brief A directory in the filesystem 28 29 Provides an interface for manipulating directories and their contents. 30 31 \author <a href='mailto:bonefish@users.sf.net'>Ingo Weinhold</a> 32 \author <a href="mailto:tylerdauwalder@users.sf.net">Tyler Dauwalder</a> 33 34 \version 0.0.0 35 */ 36 class BDirectory : public BNode, public BEntryList { 37 public: 38 BDirectory(); 39 BDirectory(const BDirectory &dir); 40 BDirectory(const entry_ref *ref); 41 BDirectory(const node_ref *nref); 42 BDirectory(const BEntry *entry); 43 BDirectory(const char *path); 44 BDirectory(const BDirectory *dir, const char *path); 45 46 virtual ~BDirectory(); 47 48 status_t SetTo(const entry_ref *ref); 49 status_t SetTo(const node_ref *nref); 50 status_t SetTo(const BEntry *entry); 51 status_t SetTo(const char *path); 52 status_t SetTo(const BDirectory *dir, const char *path); 53 54 status_t GetEntry(BEntry *entry) const; 55 56 status_t FindEntry(const char *path, BEntry *entry, 57 bool traverse = false) const; 58 59 bool Contains(const char *path, int32 nodeFlags = B_ANY_NODE) const; 60 bool Contains(const BEntry *entry, int32 nodeFlags = B_ANY_NODE) const; 61 62 status_t GetStatFor(const char *path, struct stat *st) const; 63 64 virtual status_t GetNextEntry(BEntry *entry, bool traverse = false); 65 virtual status_t GetNextRef(entry_ref *ref); 66 virtual int32 GetNextDirents(dirent *buf, size_t bufSize, 67 int32 count = INT_MAX); 68 virtual status_t Rewind(); 69 virtual int32 CountEntries(); 70 71 status_t CreateDirectory(const char *path, BDirectory *dir); 72 status_t CreateFile(const char *path, BFile *file, 73 bool failIfExists = false); 74 status_t CreateSymLink(const char *path, const char *linkToPath, 75 BSymLink *link); 76 77 BDirectory &operator=(const BDirectory &dir); 78 79 private: 80 friend class BNode; 81 82 virtual void _ErectorDirectory1(); 83 virtual void _ErectorDirectory2(); 84 virtual void _ErectorDirectory3(); 85 virtual void _ErectorDirectory4(); 86 virtual void _ErectorDirectory5(); 87 virtual void _ErectorDirectory6(); 88 89 private: 90 virtual void close_fd(); 91 int get_fd() const; 92 93 status_t set_dir_fd(int fd); 94 95 private: 96 uint32 _reservedData[7]; 97 int fDirFd; 98 node_ref fDirNodeRef; 99 100 friend class BEntry; 101 friend class BFile; 102 }; 103 104 105 // C functions 106 107 status_t create_directory(const char *path, mode_t mode); 108 109 110 #ifdef USE_OPENBEOS_NAMESPACE 111 }; // namespace OpenBeOS 112 #endif 113 114 #endif // _DIRECTORY_H 115 116 117