/* * Copyright 2002-2012, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _ENTRY_H #define _ENTRY_H #include #include #include #include class BDirectory; class BPath; struct entry_ref { entry_ref(); entry_ref(dev_t dev, ino_t dir, const char* name); entry_ref(const entry_ref& ref); ~entry_ref(); status_t set_name(const char* name); bool operator==(const entry_ref& ref) const; bool operator!=(const entry_ref& ref) const; entry_ref& operator=(const entry_ref& ref); dev_t device; ino_t directory; char* name; }; class BEntry : public BStatable { public: BEntry(); BEntry(const BDirectory* dir, const char* path, bool traverse = false); BEntry(const entry_ref* ref, bool traverse = false); BEntry(const char* path, bool traverse = false); BEntry(const BEntry& entry); virtual ~BEntry(); status_t InitCheck() const; bool Exists() const; const char* Name() const; virtual status_t GetStat(struct stat* stat) const; status_t SetTo(const BDirectory* dir, const char* path, bool traverse = false); status_t SetTo(const entry_ref* ref, bool traverse = false); status_t SetTo(const char* path, bool traverse = false); void Unset(); status_t GetRef(entry_ref* ref) const; status_t GetPath(BPath* path) const; status_t GetParent(BEntry* entry) const; status_t GetParent(BDirectory* dir) const; status_t GetName(char* buffer) const; status_t Rename(const char* path, bool clobber = false); status_t MoveTo(BDirectory* dir, const char* path = NULL, bool clobber = false); status_t Remove(); bool operator==(const BEntry& item) const; bool operator!=(const BEntry& item) const; BEntry& operator=(const BEntry& item); private: friend class BDirectory; friend class BFile; friend class BNode; friend class BSymLink; virtual void _PennyEntry1(); virtual void _PennyEntry2(); virtual void _PennyEntry3(); virtual void _PennyEntry4(); virtual void _PennyEntry5(); virtual void _PennyEntry6(); // BEntry implementation of BStatable::set_stat() virtual status_t set_stat(struct stat& stat, uint32 what); status_t _SetTo(int dir, const char* path, bool traverse); status_t _SetName(const char* name); status_t _Rename(BEntry& target, bool clobber); void _Dump(const char* name = NULL); status_t _GetStat(struct stat* stat) const; virtual status_t _GetStat(struct stat_beos* stat) const; private: int fDirFd; char* fName; status_t fCStatus; uint32 _reserved[4]; }; status_t get_ref_for_path(const char* path, entry_ref* ref); bool operator<(const entry_ref& a, const entry_ref& b); #endif // _ENTRY_H