[Scummvm-cvs-logs] SF.net SVN: scummvm:[34193] scummvm/trunk/backends/fs/posix/posix-fs.cpp

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Wed Aug 27 20:38:07 CEST 2008


Revision: 34193
          http://scummvm.svn.sourceforge.net/scummvm/?rev=34193&view=rev
Author:   fingolfin
Date:     2008-08-27 18:38:06 +0000 (Wed, 27 Aug 2008)

Log Message:
-----------
Slightly modified form of patch #2043093: OS/2 patches for posix-fs

Modified Paths:
--------------
    scummvm/trunk/backends/fs/posix/posix-fs.cpp

Modified: scummvm/trunk/backends/fs/posix/posix-fs.cpp
===================================================================
--- scummvm/trunk/backends/fs/posix/posix-fs.cpp	2008-08-27 18:21:03 UTC (rev 34192)
+++ scummvm/trunk/backends/fs/posix/posix-fs.cpp	2008-08-27 18:38:06 UTC (rev 34193)
@@ -31,6 +31,13 @@
 #include <dirent.h>
 #include <stdio.h>
 
+#ifdef __OS2__
+#define INCL_DOS
+#include <os2.h>
+#endif
+
+
+
 /**
  * Returns the last component of a given path.
  *
@@ -109,6 +116,38 @@
 bool POSIXFilesystemNode::getChildren(AbstractFSList &myList, ListMode mode, bool hidden) const {
 	assert(_isDirectory);
 
+#ifdef __OS2__
+    if (_path == "/") {
+        ULONG ulDrvNum;
+        ULONG ulDrvMap;
+
+        DosQueryCurrentDisk(&ulDrvNum, &ulDrvMap);
+
+        for (int i = 0; i < 26; i++) {
+            if (ulDrvMap & 1) {
+                char drive_root[4];
+
+                drive_root[0] = i + 'A';
+                drive_root[1] = ':';
+                drive_root[2] = '/';
+                drive_root[3] = 0;
+
+                POSIXFilesystemNode entry;
+
+                entry._isDirectory = true;
+                entry._isValid = true;
+                entry._path = drive_root;
+                entry._displayName = "[" + Common::String(drive_root, 2) + "]";
+                myList.push_back(new POSIXFilesystemNode(entry));
+            }
+
+            ulDrvMap >>= 1;
+        }
+        
+        return true;
+    }
+#endif
+
 	DIR *dirp = opendir(_path.c_str());
 	struct dirent *dp;
 
@@ -187,7 +226,12 @@
 	const char *start = _path.c_str();
 	const char *end = lastPathComponent(_path);
 
-	return new POSIXFilesystemNode(Common::String(start, end - start), true);
+#ifdef __OS2__
+    if (end == start)
+        return new POSIXFilesystemNode();
+#endif
+
+	return new POSIXFilesystemNode(Common::String(start, end), true);
 }
 
 #endif //#if defined(UNIX)


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list