From 0bc32891ba07c0a8ad03f5a567d0dd7aef60162c Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 13 Apr 2009 17:59:15 -0400 Subject: [PATCH] Added sys/mnttab.h CD-ROM detection. Fixes missing CD-ROM support on Solaris. --- CMakeLists.txt | 14 ++++++++++++++ src/platform_unix.c | 26 ++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d5f32de6..255bbe31 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -169,6 +169,20 @@ IF(UNIX) 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 + #include + 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) diff --git a/src/platform_unix.c b/src/platform_unix.c index 1f2736a8..980c0a6b 100644 --- a/src/platform_unix.c +++ b/src/platform_unix.c @@ -40,6 +40,10 @@ #include #endif +#ifdef PHYSFS_HAVE_SYS_MNTTAB_H +#include +#endif + #include "physfs_internal.h" @@ -101,6 +105,28 @@ void __PHYSFS_platformDetectAvailableCDs(PHYSFS_StringCallback cb, void *data) } /* 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 */