Added sys/mnttab.h CD-ROM detection. Fixes missing CD-ROM support on Solaris.
authorRyan C. Gordon <icculus@icculus.org>
Mon, 13 Apr 2009 17:59:15 -0400
changeset 990 c25717b5c165
parent 989 70132355a297
child 991 9748fd040468
Added sys/mnttab.h CD-ROM detection. Fixes missing CD-ROM support on Solaris.
CMakeLists.txt
src/platform_unix.c
--- a/CMakeLists.txt	Mon Apr 13 17:58:35 2009 -0400
+++ b/CMakeLists.txt	Mon Apr 13 17:59:15 2009 -0400
@@ -169,6 +169,20 @@
             SET(PHYSFS_HAVE_CDROM_SUPPORT TRUE)
         ENDIF(HAVE_MNTENT_H)
 
+        # !!! FIXME: Solaris fails this, because mnttab.h implicitly
+        # !!! FIXME:  depends on other system headers.  :(
+        #CHECK_INCLUDE_FILE(sys/mnttab.h HAVE_SYS_MNTTAB_H)
+        CHECK_C_SOURCE_COMPILES("
+            #include <stdio.h>
+            #include <sys/mnttab.h>
+            int main(int argc, char **argv) { return 0; }
+        " HAVE_SYS_MNTTAB_H)
+
+        IF(HAVE_SYS_MNTTAB_H)
+            ADD_DEFINITIONS(-DPHYSFS_HAVE_SYS_MNTTAB_H=1)
+            SET(PHYSFS_HAVE_CDROM_SUPPORT TRUE)
+        ENDIF(HAVE_SYS_MNTTAB_H)
+
         CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
         IF(HAVE_PTHREAD_H)
             SET(PHYSFS_HAVE_THREAD_SUPPORT TRUE)
--- a/src/platform_unix.c	Mon Apr 13 17:58:35 2009 -0400
+++ b/src/platform_unix.c	Mon Apr 13 17:59:15 2009 -0400
@@ -40,6 +40,10 @@
 #include <mntent.h>
 #endif
 
+#ifdef PHYSFS_HAVE_SYS_MNTTAB_H
+#include <sys/mnttab.h>
+#endif
+
 #include "physfs_internal.h"
 
 
@@ -101,6 +105,28 @@
     } /* while */
 
     endmntent(mounts);
+
+#elif (defined PHYSFS_HAVE_SYS_MNTTAB_H)
+    FILE *mounts = fopen(MNTTAB, "r");
+    struct mnttab ent;
+
+    BAIL_IF_MACRO(mounts == NULL, ERR_IO_ERROR, /*return void*/);
+    while (getmntent(mounts, &ent) == 0)
+    {
+        int add_it = 0;
+        if (strcmp(ent.mnt_fstype, "hsfs") == 0)
+            add_it = 1;
+
+        /* add other mount types here */
+
+        if (add_it)
+            cb(data, ent.mnt_mountp);
+    } /* while */
+
+    fclose(mounts);
+
+#else
+#error Unknown platform. Should have defined PHYSFS_NO_CDROM_SUPPORT, perhaps.
 #endif
 } /* __PHYSFS_platformDetectAvailableCDs */