diff options
Diffstat (limited to 'audio/sound-juicer/files/patch-src::sj-util.c')
-rw-r--r-- | audio/sound-juicer/files/patch-src::sj-util.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/audio/sound-juicer/files/patch-src::sj-util.c b/audio/sound-juicer/files/patch-src::sj-util.c new file mode 100644 index 000000000000..ac2bcfbd80a6 --- /dev/null +++ b/audio/sound-juicer/files/patch-src::sj-util.c @@ -0,0 +1,85 @@ +--- src/sj-util.c.orig Wed Jan 7 20:38:00 2004 ++++ src/sj-util.c Fri Jan 23 10:48:36 2004 +@@ -120,6 +120,9 @@ + gtk_widget_destroy (dialog); + goto done; + } ++#ifdef __FreeBSD__ ++ ioctl (fd, CDIOCALLOW); ++#endif + result = ioctl (fd, CDROMEJECT); + if (result == -1) { + GtkWidget *dialog; +@@ -148,21 +151,33 @@ + tray_is_opened (const char *device) + { + int fd, status; +- ++ ++#if defined(__linux__) + fd = open (device, O_RDONLY | O_NONBLOCK | O_EXCL); + if (fd < 0) { + return FALSE; + } +- ++ + status = ioctl (fd, CDROM_DRIVE_STATUS, CDSL_CURRENT); ++ close (fd); + if (status < 0) { +- close (fd); + return FALSE; + } + +- close (fd); +- + return status == CDS_TRAY_OPEN; ++#elif defined(__FreeBSD__) ++ struct ioc_toc_header h; ++ ++ fd = open (device, O_RDONLY | O_NONBLOCK | O_EXCL); ++ if (fd < 0) { ++ return FALSE; ++ } ++ ++ status = ioctl (fd, CDIOREADTOCHEADER, &h); ++ close (fd); ++ ++ return status < 0; ++#endif + } + + gboolean is_audio_cd (const char *device) +@@ -170,6 +185,10 @@ + CDMediaType type; + int fd, status; + ++ if (tray_is_opened (device)) { ++ return FALSE; ++ } ++ + type = guess_media_type (device); + switch (type) { + case CD_MEDIA_TYPE_CD: +@@ -189,15 +208,18 @@ + return FALSE; + } + ++#if defined(__linux__) + status = ioctl (fd, CDROM_DISC_STATUS, CDSL_CURRENT); ++ close (fd); + if (status < 0) { +- close (fd); + return FALSE; + } +- +- close (fd); +- + return status == CDS_AUDIO; ++#elif defined (__FreeBSD__) ++ return TRUE; ++#else ++ return TRUE; ++#endif + } + + /* Pass NULL to use g_free */ |