[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