git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@54386 e17a0e51-4ae3-4d35-97c3-1a29b211df97
This commit is contained in:
parent
83e06df409
commit
e52097ddfe
|
@ -4,6 +4,11 @@ July 9, 2010 Wei Mingzhi <whistler_wmz@users.sf.net>
|
|||
* plugins/dfcdrom/Makefile.am: Added cdr-solaris.c.
|
||||
* plugins/dfcdrom/cdr-freebsd.c: Return 0 for PlayCDDA()/StopCDDA().
|
||||
* gui/ConfDlg.c: Don't use dlerror() to check for symbol load failure.
|
||||
* plugins/dfcdrom/cdr.c: Make cdHandle singleton as it could be different
|
||||
type on some OS and we don't need to open multiple handles.
|
||||
* plugins/dfcdrom/cdr.h: Likewise.
|
||||
* plugins/dfcdrom/cdr-linux.c: Likewise.
|
||||
* plugins/dfcdrom/cdrcfg-0.1df/main.c: Added device listing for Solaris.
|
||||
|
||||
July 8, 2010 Wei Mingzhi <whistler_wmz@users.sf.net>
|
||||
|
||||
|
|
|
@ -25,13 +25,15 @@
|
|||
|
||||
char *LibName = N_("CD-ROM Drive Reader");
|
||||
|
||||
static int handle = -1;
|
||||
|
||||
int OpenCdHandle(const char *dev) {
|
||||
int h, parameter;
|
||||
int parameter;
|
||||
char spindown;
|
||||
|
||||
h = open(dev, O_RDONLY);
|
||||
handle = open(dev, O_RDONLY);
|
||||
|
||||
if (h != -1) {
|
||||
if (handle != -1) {
|
||||
if (SpinDown != SPINDOWN_VENDOR_SPECIFIC) {
|
||||
if (SpinDown > SPINDOWN_1S) {
|
||||
parameter = (1 << (SpinDown - SPINDOWN_1S));
|
||||
|
@ -39,19 +41,19 @@ int OpenCdHandle(const char *dev) {
|
|||
parameter = 1;
|
||||
}
|
||||
|
||||
ioctl(h, IOCATASSPINDOWN, ¶meter);
|
||||
ioctl(handle, IOCATASSPINDOWN, ¶meter);
|
||||
|
||||
parameter = CdrSpeed * 177;
|
||||
if (parameter == 0) parameter = CDR_MAX_SPEED;
|
||||
|
||||
ioctl(h, CDRIOCREADSPEED, ¶meter);
|
||||
ioctl(handle, CDRIOCREADSPEED, ¶meter);
|
||||
}
|
||||
}
|
||||
|
||||
return h;
|
||||
return (h == -1) ? -1 : 0;
|
||||
}
|
||||
|
||||
void CloseCdHandle(int handle) {
|
||||
void CloseCdHandle() {
|
||||
int parameter;
|
||||
|
||||
parameter = 0;
|
||||
|
@ -61,24 +63,30 @@ void CloseCdHandle(int handle) {
|
|||
ioctl(handle, CDRIOCREADSPEED, ¶meter);
|
||||
|
||||
close(handle);
|
||||
|
||||
handle = -1;
|
||||
}
|
||||
|
||||
long GetTN(int handle, unsigned char *buffer) {
|
||||
int IsCdHandleOpen () {
|
||||
return (handle != -1);
|
||||
}
|
||||
|
||||
long GetTN(unsigned char *buffer) {
|
||||
buffer[0] = 0;
|
||||
buffer[1] = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
long GetTD(int handle, unsigned char track, unsigned char *buffer) {
|
||||
long GetTD(unsigned char track, unsigned char *buffer) {
|
||||
memset(buffer + 1, 0, 3);
|
||||
return 0;
|
||||
}
|
||||
|
||||
long GetTE(int handle, unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
|
||||
long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
long ReadSector(int handle, crdata *cr) {
|
||||
long ReadSector(crdata *cr) {
|
||||
unsigned int lba = msf_to_lba(cr->msf.cdmsf_min0, cr->msf.cdmsf_sec0,
|
||||
cr->msf.cdmsf_frame0);
|
||||
|
||||
|
@ -99,19 +107,19 @@ long ReadSector(int handle, crdata *cr) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
long PlayCDDA(int handle, unsigned char *sector) {
|
||||
long PlayCDDA(unsigned char *sector) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
long StopCDDA(int handle) {
|
||||
long StopCDDA() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
long GetStatus(int handle, int playing, struct CdrStat *stat) {
|
||||
long GetStatus(int playing, struct CdrStat *stat) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned char *ReadSub(int handle, const unsigned char *time) {
|
||||
unsigned char *ReadSub(const unsigned char *time) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,33 +25,40 @@
|
|||
|
||||
char *LibName = N_("CD-ROM Drive Reader");
|
||||
|
||||
static int handle = -1;
|
||||
|
||||
int OpenCdHandle(const char *dev) {
|
||||
int h;
|
||||
char spindown;
|
||||
|
||||
h = open(dev, O_RDONLY);
|
||||
handle = open(dev, O_RDONLY);
|
||||
|
||||
if (h != -1) {
|
||||
ioctl(h, CDROM_LOCKDOOR, 0);
|
||||
// ioctl(h, CDROMSTART, NULL);
|
||||
if (handle != -1) {
|
||||
ioctl(handle, CDROM_LOCKDOOR, 0);
|
||||
// ioctl(handle, CDROMSTART, NULL);
|
||||
|
||||
spindown = (char)SpinDown;
|
||||
ioctl(h, CDROMSETSPINDOWN, &spindown);
|
||||
ioctl(handle, CDROMSETSPINDOWN, &spindown);
|
||||
|
||||
ioctl(h, CDROM_SELECT_SPEED, CdrSpeed);
|
||||
ioctl(handle, CDROM_SELECT_SPEED, CdrSpeed);
|
||||
}
|
||||
|
||||
return h;
|
||||
return (handle == -1) ? -1 : 0;
|
||||
}
|
||||
|
||||
void CloseCdHandle(int handle) {
|
||||
void CloseCdHandle() {
|
||||
char spindown = SPINDOWN_VENDOR_SPECIFIC;
|
||||
ioctl(handle, CDROMSETSPINDOWN, &spindown);
|
||||
|
||||
close(handle);
|
||||
|
||||
handle = -1;
|
||||
}
|
||||
|
||||
long GetTN(int handle, unsigned char *buffer) {
|
||||
int IsCdHandleOpen () {
|
||||
return (handle != -1);
|
||||
}
|
||||
|
||||
long GetTN(unsigned char *buffer) {
|
||||
struct cdrom_tochdr toc;
|
||||
|
||||
if (ioctl(handle, CDROMREADTOCHDR, &toc) == -1)
|
||||
|
@ -63,7 +70,7 @@ long GetTN(int handle, unsigned char *buffer) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
long GetTD(int handle, unsigned char track, unsigned char *buffer) {
|
||||
long GetTD(unsigned char track, unsigned char *buffer) {
|
||||
struct cdrom_tocentry entry;
|
||||
|
||||
if (track == 0)
|
||||
|
@ -81,7 +88,7 @@ long GetTD(int handle, unsigned char track, unsigned char *buffer) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
long GetTE(int handle, unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
|
||||
long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
|
||||
struct cdrom_tocentry entry;
|
||||
char msf[3];
|
||||
|
||||
|
@ -100,19 +107,19 @@ long GetTE(int handle, unsigned char track, unsigned char *m, unsigned char *s,
|
|||
return 0;
|
||||
}
|
||||
|
||||
long ReadSector(int handle, crdata *cr) {
|
||||
long ReadSector(crdata *cr) {
|
||||
if (ioctl(handle, CDROMREADRAW, cr) == -1)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
long PlayCDDA(int handle, unsigned char *sector) {
|
||||
long PlayCDDA(unsigned char *sector) {
|
||||
struct cdrom_msf addr;
|
||||
unsigned char ptmp[4];
|
||||
|
||||
// 0 is the last track of every cdrom, so play up to there
|
||||
if (GetTD(handle, 0, ptmp) == -1)
|
||||
if (GetTD(0, ptmp) == -1)
|
||||
return -1;
|
||||
|
||||
addr.cdmsf_min0 = sector[0];
|
||||
|
@ -128,7 +135,7 @@ long PlayCDDA(int handle, unsigned char *sector) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
long StopCDDA(int handle) {
|
||||
long StopCDDA() {
|
||||
struct cdrom_subchnl sc;
|
||||
|
||||
sc.cdsc_format = CDROM_MSF;
|
||||
|
@ -145,7 +152,7 @@ long StopCDDA(int handle) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
long GetStatus(int handle, int playing, struct CdrStat *stat) {
|
||||
long GetStatus(int playing, struct CdrStat *stat) {
|
||||
struct cdrom_subchnl sc;
|
||||
int ret;
|
||||
char spindown;
|
||||
|
@ -193,7 +200,7 @@ long GetStatus(int handle, int playing, struct CdrStat *stat) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
unsigned char *ReadSub(int handle, const unsigned char *time) {
|
||||
unsigned char *ReadSub(const unsigned char *time) {
|
||||
static struct SubQ subq;
|
||||
struct cdrom_subchnl subchnl;
|
||||
int ret;
|
||||
|
|
|
@ -29,41 +29,45 @@ int OpenCdHandle(const char *dev) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
void CloseCdHandle(int handle) {
|
||||
void CloseCdHandle() {
|
||||
}
|
||||
|
||||
long GetTN(int handle, unsigned char *buffer) {
|
||||
int IsCdHandleOpen () {
|
||||
return 0;
|
||||
}
|
||||
|
||||
long GetTN(unsigned char *buffer) {
|
||||
buffer[0] = 0;
|
||||
buffer[1] = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
long GetTD(int handle, unsigned char track, unsigned char *buffer) {
|
||||
long GetTD(unsigned char track, unsigned char *buffer) {
|
||||
memset(buffer + 1, 0, 3);
|
||||
return 0;
|
||||
}
|
||||
|
||||
long GetTE(int handle, unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
|
||||
long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
long ReadSector(int handle, crdata *cr) {
|
||||
long ReadSector(crdata *cr) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
long PlayCDDA(int handle, unsigned char *sector) {
|
||||
long PlayCDDA(unsigned char *sector) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
long StopCDDA(int handle) {
|
||||
long StopCDDA() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
long GetStatus(int handle, int playing, struct CdrStat *stat) {
|
||||
long GetStatus(int playing, struct CdrStat *stat) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned char *ReadSub(int handle, const unsigned char *time) {
|
||||
unsigned char *ReadSub(const unsigned char *time) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,41 +29,45 @@ int OpenCdHandle(const char *dev) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
void CloseCdHandle(int handle) {
|
||||
void CloseCdHandle() {
|
||||
}
|
||||
|
||||
long GetTN(int handle, unsigned char *buffer) {
|
||||
int IsCdHandleOpen () {
|
||||
return 0;
|
||||
}
|
||||
|
||||
long GetTN(unsigned char *buffer) {
|
||||
buffer[0] = 0;
|
||||
buffer[1] = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
long GetTD(int handle, unsigned char track, unsigned char *buffer) {
|
||||
long GetTD(unsigned char track, unsigned char *buffer) {
|
||||
memset(buffer + 1, 0, 3);
|
||||
return 0;
|
||||
}
|
||||
|
||||
long GetTE(int handle, unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
|
||||
long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
long ReadSector(int handle, crdata *cr) {
|
||||
long ReadSector(crdata *cr) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
long PlayCDDA(int handle, unsigned char *sector) {
|
||||
long PlayCDDA(unsigned char *sector) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
long StopCDDA(int handle) {
|
||||
long StopCDDA() {
|
||||
return -1;
|
||||
}
|
||||
|
||||
long GetStatus(int handle, int playing, struct CdrStat *stat) {
|
||||
long GetStatus(int playing, struct CdrStat *stat) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned char *ReadSub(int handle, const unsigned char *time) {
|
||||
unsigned char *ReadSub(const unsigned char *time) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,6 @@ int cacheaddr;
|
|||
crdata cr;
|
||||
|
||||
unsigned char lastTime[3];
|
||||
int cdHandle;
|
||||
pthread_t thread;
|
||||
int subqread;
|
||||
volatile int stopth, found, locked, playing;
|
||||
|
@ -70,9 +69,7 @@ void *CdrThread(void *arg);
|
|||
extern char *LibName;
|
||||
|
||||
long CDRinit(void) {
|
||||
cdHandle = -1;
|
||||
thread = -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -83,11 +80,10 @@ long CDRshutdown(void) {
|
|||
long CDRopen(void) {
|
||||
LoadConf();
|
||||
|
||||
if (cdHandle > 0)
|
||||
if (IsCdHandleOpen())
|
||||
return 0; /* it's already open */
|
||||
|
||||
cdHandle = OpenCdHandle(CdromDev);
|
||||
if (cdHandle == -1) { // if we can't open the cdrom we'll works as a null plugin
|
||||
if (OpenCdHandle(CdromDev) == -1) { // if we can't open the cdrom we'll works as a null plugin
|
||||
fprintf(stderr, "CDR: Could not open %s\n", CdromDev);
|
||||
}
|
||||
|
||||
|
@ -125,12 +121,11 @@ long CDRopen(void) {
|
|||
}
|
||||
|
||||
long CDRclose(void) {
|
||||
if (cdHandle < 1) return 0;
|
||||
if (!IsCdHandleOpen()) return 0;
|
||||
|
||||
if (playing) CDRstop();
|
||||
|
||||
CloseCdHandle(cdHandle);
|
||||
cdHandle = -1;
|
||||
CloseCdHandle();
|
||||
|
||||
if (thread != -1) {
|
||||
if (locked == 0) {
|
||||
|
@ -160,13 +155,13 @@ long CDRclose(void) {
|
|||
// byte 0 - start track
|
||||
// byte 1 - end track
|
||||
long CDRgetTN(unsigned char *buffer) {
|
||||
if (cdHandle < 1) {
|
||||
if (!IsCdHandleOpen()) {
|
||||
buffer[0] = 1;
|
||||
buffer[1] = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return GetTN(cdHandle, buffer);
|
||||
return GetTN(buffer);
|
||||
}
|
||||
|
||||
// return Track Time
|
||||
|
@ -175,17 +170,17 @@ long CDRgetTN(unsigned char *buffer) {
|
|||
// byte 1 - second
|
||||
// byte 2 - minute
|
||||
long CDRgetTD(unsigned char track, unsigned char *buffer) {
|
||||
if (cdHandle < 1) {
|
||||
if (!IsCdHandleOpen()) {
|
||||
memset(buffer + 1, 0, 3);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return GetTD(cdHandle, track, buffer);
|
||||
return GetTD(track, buffer);
|
||||
}
|
||||
|
||||
// normal reading
|
||||
long ReadNormal() {
|
||||
if (ReadSector(cdHandle, &cr) == -1)
|
||||
if (ReadSector(&cr) == -1)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
|
@ -270,7 +265,7 @@ void *CdrThread(void *arg) {
|
|||
for (i = 0; i < CacheSize; i++) {
|
||||
memcpy(&cdcache[i].cr.msf, curTime, 3);
|
||||
PRINTF("reading %d:%d:%d\n", curTime[0], curTime[1], curTime[2]);
|
||||
cdcache[i].ret = ReadSector(cdHandle, &cdcache[i].cr);
|
||||
cdcache[i].ret = ReadSector(&cdcache[i].cr);
|
||||
|
||||
PRINTF("readed %x:%x:%x\n", cdcache[i].cr.buf[12], cdcache[i].cr.buf[13], cdcache[i].cr.buf[14]);
|
||||
if (cdcache[i].ret == -1) break;
|
||||
|
@ -301,7 +296,7 @@ void *CdrThread(void *arg) {
|
|||
// byte 2 - frame
|
||||
// uses bcd format
|
||||
long CDRreadTrack(unsigned char *time) {
|
||||
if (cdHandle < 1) {
|
||||
if (!IsCdHandleOpen()) {
|
||||
memset(cr.buf, 0, DATA_SIZE);
|
||||
return 0;
|
||||
}
|
||||
|
@ -330,7 +325,7 @@ unsigned char *CDRgetBuffer(void) {
|
|||
// byte 2 - frame
|
||||
// does NOT uses bcd format
|
||||
long CDRplay(unsigned char *sector) {
|
||||
if (cdHandle < 1)
|
||||
if (!IsCdHandleOpen())
|
||||
return 0;
|
||||
|
||||
// If play was called with the same time as the previous call,
|
||||
|
@ -345,7 +340,7 @@ long CDRplay(unsigned char *sector) {
|
|||
|
||||
initial_time = msf_to_lba(sector[0], sector[1], sector[2]);
|
||||
|
||||
if (PlayCDDA(cdHandle, sector) == 0) {
|
||||
if (PlayCDDA(sector) == 0) {
|
||||
playing = 1;
|
||||
return 0;
|
||||
}
|
||||
|
@ -355,10 +350,10 @@ long CDRplay(unsigned char *sector) {
|
|||
|
||||
// stops cdda audio
|
||||
long CDRstop(void) {
|
||||
if (cdHandle < 1)
|
||||
if (!IsCdHandleOpen())
|
||||
return 0;
|
||||
|
||||
if (StopCDDA(cdHandle) == 0) {
|
||||
if (StopCDDA() == 0) {
|
||||
playing = 0;
|
||||
initial_time = 0;
|
||||
|
||||
|
@ -388,10 +383,10 @@ long CDRstop(void) {
|
|||
// byte 2 - frame
|
||||
|
||||
long CDRgetStatus(struct CdrStat *stat) {
|
||||
if (cdHandle < 1)
|
||||
if (!IsCdHandleOpen())
|
||||
return -1;
|
||||
|
||||
return GetStatus(cdHandle, playing, stat);
|
||||
return GetStatus(playing, stat);
|
||||
}
|
||||
|
||||
unsigned char *CDRgetBufferSub(void) {
|
||||
|
@ -402,7 +397,7 @@ unsigned char *CDRgetBufferSub(void) {
|
|||
|
||||
if (ReadMode == THREADED) pthread_mutex_lock(&mut);
|
||||
|
||||
p = ReadSub(cdHandle, lastTime);
|
||||
p = ReadSub(lastTime);
|
||||
|
||||
if (ReadMode == THREADED) pthread_mutex_unlock(&mut);
|
||||
|
||||
|
@ -427,8 +422,8 @@ long CDRreadCDDA(unsigned char m, unsigned char s, unsigned char f, unsigned cha
|
|||
|
||||
// get Track End Time
|
||||
long CDRgetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
|
||||
if (cdHandle < 1) return -1;
|
||||
return GetTE(cdHandle, track, m, s, f);
|
||||
if (!IsCdHandleOpen()) return -1;
|
||||
return GetTE(track, m, s, f);
|
||||
}
|
||||
|
||||
void ExecCfg(char *arg) {
|
||||
|
@ -469,11 +464,9 @@ void CDRabout() {
|
|||
|
||||
long CDRtest(void) {
|
||||
#ifndef USE_NULL
|
||||
cdHandle = open(CdromDev, O_RDONLY);
|
||||
if (cdHandle == -1)
|
||||
if (OpenCdHandle(CdromDev) == -1)
|
||||
return -1;
|
||||
close(cdHandle);
|
||||
cdHandle = -1;
|
||||
CloseCdHandle();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -74,7 +74,7 @@ struct cdrom_msf {
|
|||
#define CD_FRAMESIZE_SUB 96
|
||||
#define CD_MSF_OFFSET 150
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#if defined (__FreeBSD__)
|
||||
|
||||
#include <sys/ata.h>
|
||||
#include <sys/cdio.h>
|
||||
|
@ -83,6 +83,14 @@ struct cdrom_msf {
|
|||
|
||||
#define DEV_DEF "/dev/acd0"
|
||||
|
||||
#elif defined (__sun)
|
||||
|
||||
#include <sys/cdio.h>
|
||||
|
||||
/* The CD-ROM device name seems to vary on different computers on Solaris, so
|
||||
let user set this. */
|
||||
#define DEV_DEF ""
|
||||
|
||||
#else
|
||||
|
||||
#define DEV_DEF ""
|
||||
|
@ -178,14 +186,15 @@ unsigned int msf_to_lba(char m, char s, char f);
|
|||
void lba_to_msf(unsigned int s, char *msf);
|
||||
|
||||
int OpenCdHandle();
|
||||
void CloseCdHandle(int handle);
|
||||
long GetTN(int handle, unsigned char *buffer);
|
||||
long GetTD(int handle, unsigned char track, unsigned char *buffer);
|
||||
long GetTE(int handle, unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f);
|
||||
long ReadSector(int handle, crdata *cr);
|
||||
long PlayCDDA(int handle, unsigned char *sector);
|
||||
long StopCDDA(int handle);
|
||||
long GetStatus(int handle, int playing, struct CdrStat *stat);
|
||||
unsigned char *ReadSub(int handle, const unsigned char *time);
|
||||
void CloseCdHandle();
|
||||
int IsCdHandleOpen();
|
||||
long GetTN(unsigned char *buffer);
|
||||
long GetTD(unsigned char track, unsigned char *buffer);
|
||||
long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f);
|
||||
long ReadSector(crdata *cr);
|
||||
long PlayCDDA(unsigned char *sector);
|
||||
long StopCDDA();
|
||||
long GetStatus(int playing, struct CdrStat *stat);
|
||||
unsigned char *ReadSub(const unsigned char *time);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -107,14 +107,41 @@ void fill_drives_list(GtkWidget *widget) {
|
|||
"/dev/scd2",
|
||||
"/dev/scd3",
|
||||
"/dev/optcd",
|
||||
NULL};
|
||||
""};
|
||||
#elif defined (__FreeBSD__)
|
||||
static const char *cdrom_devices[] = {
|
||||
"/dev/acd0",
|
||||
"/dev/acd1",
|
||||
"/dev/acd2",
|
||||
"/dev/acd3",
|
||||
NULL};
|
||||
""};
|
||||
#elif defined (__sun)
|
||||
char cdrom_devices[256][256];
|
||||
FILE *fp;
|
||||
char buf[256], *devname, *nick;
|
||||
|
||||
memset(cdrom_devices, 0, sizeof(cdrom_devices));
|
||||
|
||||
i = 0;
|
||||
|
||||
fp = popen("eject -l", "r");
|
||||
|
||||
if (fp != NULL) {
|
||||
while (!feof(fp) && i < 256) {
|
||||
fgets(buf, 256, fp);
|
||||
|
||||
devname = strtok(buf, " ");
|
||||
nick = strtok(NULL, " ");
|
||||
|
||||
if (devname == NULL || nick == NULL) continue;
|
||||
|
||||
if (strstr(nick, "cdrom") != NULL) {
|
||||
strcpy(cdrom_devices[i], devname);
|
||||
}
|
||||
}
|
||||
|
||||
pclose(fp);
|
||||
}
|
||||
#else
|
||||
static const char *cdrom_devices[] = { NULL };
|
||||
#endif
|
||||
|
@ -126,7 +153,7 @@ void fill_drives_list(GtkWidget *widget) {
|
|||
gtk_list_store_set(store, &iter, 0, CdromDev, -1);
|
||||
|
||||
// scan cdrom_devices for real cdrom and add them to list
|
||||
while (cdrom_devices[i] != NULL) {
|
||||
while (cdrom_devices[i][0] != '\0') {
|
||||
// check that is not our current dev (already in list)
|
||||
if (strcmp(cdrom_devices[i], CdromDev) != 0) {
|
||||
// check that is a cdrom device
|
||||
|
|
Loading…
Reference in New Issue