diff src/cdrom/osf/SDL_syscdrom.c @ 1019:e3b3130f3af8

Date: Fri, 31 Dec 2004 04:14:09 +0900 From: Hayashi Naoyuki Subject: SDL patch for Tru64 UNIX 4.0X SDL-1.2.8 support only Tru64 5.X. This patch is for Tru64 UNIX 4.X.(tested on Tru64 UNIX 4.0G and 5.1B) SDL-1.2.8/configure.in: ld doesn't accept -pthread option. cc -pthread has same effect as -D_REENTRANT when compiling, and has same effect as -lpthread -lexc when linking. SDL-1.2.8/include/begin_code.h: Old Compaq C Compiler accept not inline but __inline. SDL-1.2.8/src/audio/SDL_mixer_MMX.c: SDL-1.2.8/src/audio/SDL_mixer_MMX.h: Old Compaq C Compiler doesn't accept //. SDL-1.2.8/src/cdrom/osf/SDL_syscdrom.c: When becoming Tru64 v5.0 from Tru64 v4.0, the arrangement of the cd-rom device was changed.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 02 Jan 2005 05:05:21 +0000
parents 9719e7f51a3a
children 3692456e7b0f
line wrap: on
line diff
--- a/src/cdrom/osf/SDL_syscdrom.c	Mon Dec 27 20:03:53 2004 +0000
+++ b/src/cdrom/osf/SDL_syscdrom.c	Sun Jan 02 05:05:21 2005 +0000
@@ -22,9 +22,10 @@
 
 /* Functions for system-level CD-ROM audio control */
 
-//#define DEBUG_CDROM 1
+/* #define DEBUG_CDROM 1 */
 
 #include <sys/types.h>
+#include <dirent.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <io/cam/cdrom.h>
@@ -141,11 +142,22 @@
 
 int  SDL_SYS_CDInit(void)
 {
-    /* checklist: /dev/rdisk/cdrom?c
+    /* checklist:
+     *
+     * Tru64 5.X (/dev/rdisk/cdrom?c)
+     * dir: /dev/rdisk, name: cdrom
+     *
+     * Digital UNIX 4.0X (/dev/rrz?c)
+     * dir: /dev, name: rrz
      *
      */
-    static char *checklist[] = {
-	"?0 rdisk/cdrom?",NULL};
+    struct {
+	char *dir;
+	char *name;
+    } checklist[] = {
+	{"/dev/rdisk", "cdrom"},
+	{"/dev", "rrz"},
+	{NULL, NULL}};
     char drive[32];
     char *SDLcdrom;
     int i, j, exists;
@@ -195,37 +207,32 @@
 	}
     }
     /* Scan the system for CD-ROM drives */
-    for ( i=0; checklist[i]; ++i ) {
-	if ( checklist[i][0] == '?' ) {
-	    char *insert;
-	    exists = 1;
-	    for ( j=checklist[i][1]; exists; ++j ) {
-		sprintf(drive, "/dev/%sc", &checklist[i][3]);
-		insert = strchr(drive, '?');
-		if ( insert != NULL ) {
-		    *insert = j;
-		}
-		switch (CheckDrive(drive, &stbuf)) {
-		    /* Drive exists and is a CD-ROM */
-		    case 1:
-			AddDrive(drive, &stbuf);
-			break;
-			/* Drive exists, but isn't a CD-ROM */
-		    case 0:
-			break;
-			/* Drive doesn't exist */
-		    case -1:
-			exists = 0;
-			break;
-		}
-	    }
+    for ( i = 0; checklist[i].dir; ++i) {
+	DIR *devdir;
+	struct dirent *devent;
+	int name_len;
+
+	devdir = opendir(checklist[i].dir);
+	if (devdir) {
+	    name_len = strlen(checklist[i].name);
+	    while (devent = readdir(devdir))
+		if (memcmp(checklist[i].name, devent->d_name, name_len) == 0)
+		    if (devent->d_name[devent->d_namlen-1] == 'c') {
+			sprintf(drive, "%s/%s", checklist[i].dir, devent->d_name);
+#ifdef DEBUG_CDROM
+			fprintf(stderr, "Try to add drive: %s\n", drive);
+#endif
+			if ( CheckDrive(drive, &stbuf) > 0 )
+			    AddDrive(drive, &stbuf);
+		    }
+	    closedir(devdir);
 	} else {
-	    sprintf(drive, "/dev/%s", checklist[i]);
-	    if ( CheckDrive(drive, &stbuf) > 0 ) {
-		AddDrive(drive, &stbuf);
-	    }
+#ifdef DEBUG_CDROM
+	    fprintf(stderr, "cannot open dir: %s\n", checklist[i].dir);
+#endif
 	}
     }
+
 /*
     SDLcdrom=malloc(sizeof(char) * 32);
     strcpy(SDLcdrom,"/dev/rdisk/cdrom0c");