aboutsummaryrefslogtreecommitdiff
path: root/backends/fs/amigaos4/amigaos4-fs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/fs/amigaos4/amigaos4-fs.cpp')
-rw-r--r--backends/fs/amigaos4/amigaos4-fs.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/backends/fs/amigaos4/amigaos4-fs.cpp b/backends/fs/amigaos4/amigaos4-fs.cpp
index 71ddd182e2..9d94fdc60c 100644
--- a/backends/fs/amigaos4/amigaos4-fs.cpp
+++ b/backends/fs/amigaos4/amigaos4-fs.cpp
@@ -87,7 +87,7 @@ public:
*/
virtual ~AmigaOSFilesystemNode();
- virtual bool exists() const { return true; } //FIXME: this is just a stub
+ virtual bool exists() const;
virtual String getDisplayName() const { return _sDisplayName; };
virtual String getName() const { return _sDisplayName; };
virtual String getPath() const { return _sPath; };
@@ -265,6 +265,25 @@ AmigaOSFilesystemNode::~AmigaOSFilesystemNode() {
LEAVE();
}
+bool AmigaOSFilesystemNode::exists() const {
+ if(_sPath.empty())
+ return false;
+
+ bool nodeExists = false;
+ ENTER();
+
+ BPTR pLock = IDOS->Lock((STRPTR)_sPath.c_str(), SHARED_LOCK);
+ if (pLock) {
+ if (IDOS->Examine(pLock, fib) != DOSFALSE) {
+ nodeExists = true;
+ }
+ IDOS->UnLock(pLock);
+ }
+
+ LEAVE();
+ return nodeExists;
+}
+
AbstractFilesystemNode *AmigaOSFilesystemNode::getChild(const String &n) const {
if (!_bIsDirectory) {
debug(6, "Not a directory");