From 5f9f63dea31941bd8b7c5ca5fe87555d08e8385d Mon Sep 17 00:00:00 2001 From: cebix <> Date: Wed, 27 Mar 2002 20:11:12 +0000 Subject: [PATCH] support for Linux devfs --- BasiliskII/src/Unix/sys_unix.cpp | 48 ++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/BasiliskII/src/Unix/sys_unix.cpp b/BasiliskII/src/Unix/sys_unix.cpp index a6165377..da8ff7ac 100644 --- a/BasiliskII/src/Unix/sys_unix.cpp +++ b/BasiliskII/src/Unix/sys_unix.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #ifdef __NR__llseek _syscall5(int, _llseek, unsigned int, fd, unsigned long, hi, unsigned long, lo, loff_t *, res, unsigned int, wh); @@ -120,8 +121,24 @@ void SysMountFirstFloppy(void) void SysAddFloppyPrefs(void) { #if defined(__linux__) - PrefsAddString("floppy", "/dev/fd0u1440"); - PrefsAddString("floppy", "/dev/fd1u1440"); + if (access("/dev/.devfsd", F_OK)) { + PrefsAddString("floppy", "/dev/fd0u1440"); + PrefsAddString("floppy", "/dev/fd1u1440"); + } else { + DIR *fd_dir = opendir("/dev/floppy"); + if (fd_dir) { + struct dirent *floppy_dev; + while ((floppy_dev = readdir(fd_dir)) != NULL) { + if (strstr(floppy_dev->d_name, "u1440") != NULL) { + char *fd_dev = new char[20]; + sprintf(fd_dev, "/dev/floppy/%s", floppy_dev->d_name); + PrefsAddString("floppy", fd_dev); + delete[] fd_dev; + } + } + closedir(fd_dir); + } + } #elif defined(__NetBSD__) PrefsAddString("floppy", "/dev/fd0a"); PrefsAddString("floppy", "/dev/fd1a"); @@ -176,7 +193,23 @@ void SysAddCDROMPrefs(void) return; #if defined(__linux__) - PrefsAddString("cdrom", "/dev/cdrom"); + if (access("/dev/.devfsd", F_OK)) + PrefsAddString("cdrom", "/dev/cdrom"); + else { + DIR *cd_dir = opendir("/dev/cdroms"); + if (cd_dir) { + struct dirent *cdrom_dev; + while ((cdrom_dev = readdir(cd_dir)) != NULL) { + if (strcmp(cdrom_dev->d_name, ".") != 0 && strcmp(cdrom_dev->d_name, "..") != 0) { + char *cd_dev = new char[20]; + strcpy(cd_dev, "/dev/cdroms/%s", cdrom_dev->d_name); + PrefsAddString("cdrom", cd_dev); + delete[] cd_dev; + } + } + closedir(cd_dir); + } + } #elif defined(__FreeBSD__) PrefsAddString("cdrom", "/dev/cd0c"); #elif defined(__NetBSD__) @@ -192,8 +225,13 @@ void SysAddCDROMPrefs(void) void SysAddSerialPrefs(void) { #if defined(__linux__) - PrefsAddString("seriala", "/dev/ttyS0"); - PrefsAddString("serialb", "/dev/ttyS1"); + if (access("/dev/.devfsd", F_OK)) { + PrefsAddString("seriala", "/dev/ttyS0"); + PrefsAddString("serialb", "/dev/ttyS1"); + } else { + PrefsAddString("seriala", "/dev/tts/0"); + PrefsAddString("serialb", "/dev/tts/1"); + } #elif defined(__FreeBSD__) PrefsAddString("seriala", "/dev/cuaa0"); PrefsAddString("serialb", "/dev/cuaa1");