diff -ur mc.orig/extraconf.h mc/extraconf.h
--- mc.orig/extraconf.h	Thu Sep 12 21:55:47 2002
+++ mc/extraconf.h	Mon Mar 24 17:26:09 2003
@@ -41,7 +41,7 @@
 #    define WITH_BACKGROUND
 #endif
 
-#if defined (__QNX__) && !defined(__QNXNTO__) && !defined (HAVE_INFOMOUNT_LIST)
+#if defined (__QNX__) && !defined (HAVE_INFOMOUNT_LIST)
 #    define HAVE_INFOMOUNT_QNX
 #endif
 
diff -ur mc.orig/src/fsusage.c mc/src/fsusage.c
--- mc.orig/src/fsusage.c	Mon Sep 23 06:43:23 2002
+++ mc/src/fsusage.c	Mon Mar 24 16:49:19 2003
@@ -108,6 +108,28 @@
 
 int get_fs_usage (char *path, struct fs_usage *fsp)
 {
+#ifdef __QNXNTO__
+#define CONVERT_BLOCKS(b) fs_adjust_blocks ((b), vfs.f_frsize, 512)
+    struct statvfs vfs;
+    int fd;
+
+/* Root directory is mount point for too many file systems, including
+   resource managers name space. We should cheat here */
+
+    fd = open ( strcmp (path, "/") ? path : "/tmp", O_RDONLY);
+    if ( fd == -1 || fstatvfs (fd, &vfs) == -1 ) {
+        fsp->fsu_blocks = fsp->fsu_bfree = fsp->fsu_files = fsp->fsu_ffree = 0;
+	return -1;
+    }
+    fsp->fsu_blocks = CONVERT_BLOCKS (vfs.f_blocks);
+    fsp->fsu_bfree = CONVERT_BLOCKS (vfs.f_bfree);
+    fsp->fsu_bavail = CONVERT_BLOCKS (vfs.f_bavail);    
+
+/* Those two values are always filled with zeroes in QNX 6.2
+   Looks like they aren't implemented yet */
+    fsp->fsu_files = vfs.f_files;
+    fsp->fsu_ffree = vfs.f_favail;
+#endif /* __QNXNTO__ */
 #ifdef STAT_STATFS3_OSF1
     struct statfs fsd;
 
@@ -164,8 +186,7 @@
 #endif
 #endif
 #endif
-
-#ifdef STAT_STATVFS		/* SVR4.  */
+#if defined(STAT_STATVFS) && !defined(__QNXNTO__) /* SVR4.  */
     struct statvfs fsd;
 
     if (statvfs (path, &fsd) < 0)
@@ -175,7 +196,7 @@
   fs_adjust_blocks ((b), fsd.f_frsize ? fsd.f_frsize : fsd.f_bsize, 512)
 #endif
 
-#if defined(CONVERT_BLOCKS) && !defined(STAT_STATFS2_FS_DATA) && !defined(STAT_READ_FILSYS)	/* !Ultrix && !SVR2.  */
+#if defined(CONVERT_BLOCKS) && !defined(STAT_STATFS2_FS_DATA) && !defined(STAT_READ_FILSYS) && !defined(__QNXNTO__) /* !Ultrix && !SVR2.  */
     fsp->fsu_blocks = CONVERT_BLOCKS (fsd.f_blocks);
     fsp->fsu_bfree = CONVERT_BLOCKS (fsd.f_bfree);
     fsp->fsu_bavail = CONVERT_BLOCKS (fsd.f_bavail);
diff -ur mc.orig/src/info.c mc/src/info.c
--- mc.orig/src/info.c	Thu Feb 20 21:40:46 2003
+++ mc/src/info.c	Mon Mar 24 17:06:14 2003
@@ -104,7 +104,7 @@
 	/* Note: all cases are fall-throughs */
 	
     default:
-
+#ifndef __QNXNTO__
     case 16:
 	widget_move (&info->widget, 16, 3);
 	if (myfs_stats.nfree >0 || myfs_stats.nodes > 0)
@@ -115,7 +115,7 @@
 		    myfs_stats.nodes);
 	else
 	    addstr (_("No node information"));
-	
+#endif /* __QNXNTO__ */	
     case 15:
 	widget_move (&info->widget, 15, 3);
 	if (myfs_stats.avail > 0 || myfs_stats.total > 0){
diff -ur mc.orig/src/mountlist.c mc/src/mountlist.c
--- mc.orig/src/mountlist.c	Thu Feb 20 21:40:46 2003
+++ mc/src/mountlist.c	Mon Mar 24 17:35:32 2003
@@ -77,9 +77,15 @@
 #endif
 
 #ifdef HAVE_INFOMOUNT_QNX
-#include <sys/disk.h>
-#include <sys/fsys.h>
-#endif
+# ifndef __QNXNTO__
+#  include <sys/disk.h>
+#  include <sys/fsys.h>
+# else
+#  include <libgen.h>
+#  include <sys/statvfs.h>
+#  include <sys/dcmd_blk.h>
+# endif  /* __QNXNTO__ */
+#endif /* HAVE_INFOMOUNT_QNX */
 
 #include "global.h"
 #include "mountlist.h"
@@ -484,24 +490,35 @@
 static struct mount_entry *
 read_filesystem_list(int need_fs_type, int all_fs)
 {
+	static struct mount_entry *me = NULL;
+	char 			   dev[_POSIX_NAME_MAX], dir[_POSIX_PATH_MAX];
+	int			   fd;
+#ifndef __QNXNTO__
 	struct _disk_entry	de;
 	struct statfs		fs;
-	int					i, fd;
-	char				*tp, dev[_POSIX_NAME_MAX], dir[_POSIX_PATH_MAX];
-
-	static struct mount_entry	*me = NULL;
-
+	int			i;
+	char			*tp;
+#else
+	DIR 			*dirp;
+	struct dirent		*dp;
+	char 			path[PATH_MAX];
+	struct stat		st;
+	struct statvfs		vfs;
+#endif /* __QNXNTO__ */
 	if (me)
 	{
+#ifndef __QNXNTO__	
 		if (me->me_devname) free(me->me_devname);
 		if (me->me_mountdir) free(me->me_mountdir);
 		if (me->me_type) free(me->me_type);
+#endif /* __QNXNTO__ */
 	}
 	else
 		me = (struct mount_entry *)malloc(sizeof(struct mount_entry));
 
 	if (!getcwd(dir, _POSIX_PATH_MAX)) return (NULL);
 
+#ifndef __QNXNTO__
 	if ((fd = open(dir, O_RDONLY)) == -1) return (NULL);
 
 	i = disk_get_entry(fd, &de);
@@ -537,6 +554,45 @@
 	fprintf(stderr, "fsys_get_mount_dev():\n\tdevice='%s'\n", dev);
 	fprintf(stderr, "fsys_get_mount_pt():\n\tmount point='%s'\n", dir);
 #endif /* DEBUG */
+#else /* __QNXNTO__ */
+	me->me_devname = g_strdup ("unknown");
+        me->me_mountdir = g_strdup ("unknown");	
+	if ( statvfs ( strcmp (dir, "/") ? dir : "/tmp", &vfs) != -1 )
+	    me->me_type = g_strdup (vfs.f_basetype);
+	else 
+	    me->me_type = g_strdup ("unknown");
+	me->me_dev = 0;
+	fd = open (dir, O_ACCMODE);
+	if (fd != -1 && -1 != devctl( fd, DCMD_FSYS_MOUNTED_AT, 
+		dev, sizeof dev, 0) ) 
+	{
+	    close (fd);
+	    me->me_mountdir = g_strdup( dev );
+
+	    dirp = opendir ("/dev");
+	    while ( (dp = readdir (dirp)) != NULL) {
+		g_snprintf( path, sizeof (path), "/dev/%s", dp->d_name);
+		if ( strncmp (dp->d_name, "fd", 2) && /* skip slow floppy */
+		    stat(path, &st) != -1 &&
+		    S_ISBLK(st.st_mode) ) 
+		{
+		    fd = open (path, O_ACCMODE);
+		    if (fd != -1 && 
+		        -1 != devctl (fd, DCMD_FSYS_MOUNTED_BY,
+		    	dir, sizeof (dir), 0 )) 
+		    {
+			if ( !strcmp (dev, dir) ) {
+		            me->me_devname = g_strdup (path);
+		            break; 
+			}
+		    }
+		} 
+	    } 
+	    closedir (dirp);
+	} else {
+	    close (fd);
+	}
+#endif /* __QNXNTO__ */
 
 	return (me);
 }
@@ -591,12 +647,11 @@
 ** also accomodates QNX's ability to mount filesystems on the fly.
 */
 	struct mount_entry	*entry;
-    struct fs_usage		fs_use;
+	struct fs_usage		fs_use;
 
 	if ((entry = read_filesystem_list(0, 0)) != NULL)
 	{
 		get_fs_usage(entry->me_mountdir, &fs_use);
-
 		myfs_stats->type = entry->me_dev;
 		myfs_stats->typename = entry->me_type;
 		myfs_stats->mpoint = entry->me_mountdir;
