summaryrefslogtreecommitdiff
path: root/audio/gnome2-media/patches/patch-ag
blob: 2508f720a2e62c7dab8d6e712f81b486e36ef43a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
$NetBSD: patch-ag,v 1.1 2003/12/31 02:30:22 xtraeme Exp $

--- gnome-cd/bsd-cdrom.c.orig	2003-01-11 06:23:03.000000000 -0600
+++ gnome-cd/bsd-cdrom.c
@@ -20,7 +20,7 @@
 #endif
 #include <errno.h>
 
-#include "freebsd-cdrom.h"
+#include "bsd-cdrom.h"
 
 #define CD_FRAMES	75
 
@@ -166,7 +166,12 @@ freebsd_cdrom_update_cd (GnomeCDRom *cdr
 {
 	FreeBSDCDRom *lcd = FREEBSD_CDROM (cdrom);
 	FreeBSDCDRomPrivate *priv;
+#ifdef __FreeBSD__
 	struct ioc_read_toc_single_entry tocentry;
+#else
+	struct ioc_read_toc_entry tocentries;
+	struct cd_toc_entry tocentry;
+#endif
 	int i, j;
 	GError *error;
 
@@ -190,29 +195,53 @@ freebsd_cdrom_update_cd (GnomeCDRom *cdr
 
 	freebsd_cdrom_invalidate (lcd);
 	priv->track_info = g_malloc ((priv->number_tracks + 1) * sizeof (FreeBSDCDRomTrackInfo));
+#ifdef __FreeBSD__
 	for (i = 0, j = priv->track0; i < priv->number_tracks; i++, j++) {
 		tocentry.track = j;
 		tocentry.address_format = CD_MSF_FORMAT;
+#else
+	tocentries.data_len = sizeof(tocentry);
+	tocentries.data = &tocentry;
+	for (i = 0, j = priv->track0; i < priv->number_tracks; i++, j++) {
+		tocentries.starting_track = j;
+		tocentries.address_format = CD_MSF_FORMAT;
+#endif
 
-		if (ioctl (cdrom->fd, CDIOREADTOCENTRY, &tocentry) < 0) {
+		if (ioctl (cdrom->fd, CDIOREADTOCENTRYS, &tocentries) < 0) {
 			g_warning ("IOCtl failed");
 			continue;
 		}
 
 		priv->track_info[i].track = j;
+#ifdef __FreeBSD__
 		priv->track_info[i].audio_track = tocentry.entry.control == 0 ? 1 : 0;
 		ASSIGN_MSF (priv->track_info[i].address, tocentry.entry.addr.msf);
+#else
+		priv->track_info[i].audio_track = tocentry.control == 0 ? 1 : 0;
+		ASSIGN_MSF (priv->track_info[i].address, tocentry.addr.msf);
+#endif
 	}
 
+#ifdef __FreeBSD__
 	/* On FreeBSD, the leadout track is the track LAST_TRACK + 1. */
 	tocentry.track = priv->number_tracks + 1;
 	tocentry.address_format = CD_MSF_FORMAT;
 	if (ioctl (cdrom->fd, CDIOREADTOCENTRY, &tocentry) < 0) {
+#else
+	/* On NetBSD, the leadout track is the track 0xAA. */
+	tocentries.starting_track = 0xAA;
+	tocentries.address_format = CD_MSF_FORMAT;
+	if (ioctl (cdrom->fd, CDIOREADTOCENTRYS, &tocentries) < 0) {
+#endif
 		g_warning ("Error getting leadout");
 		freebsd_cdrom_invalidate (lcd);
 		return;
 	}
+#ifdef __FreeBSD__
 	ASSIGN_MSF (priv->track_info[priv->number_tracks].address, tocentry.entry.addr.msf);
+#else
+	ASSIGN_MSF (priv->track_info[priv->number_tracks].address, tocentry.addr.msf);
+#endif
 	calculate_track_lengths (lcd);
 
 	freebsd_cdrom_close (lcd);
@@ -232,11 +261,18 @@ freebsd_cdrom_eject (GnomeCDRom *cdrom,
 		return FALSE;
 	}
 
+#ifdef __FreeBSD__
 	if (gnome_cdrom_get_status (cdrom, &status, error) == FALSE) {
 		freebsd_cdrom_close (lcd);
 		g_free (status);
 		return FALSE;
 	}
+#else
+	status = g_new0 (GnomeCDRomStatus, 1);
+	status->volume = 0;
+	status->cd = GNOME_CDROM_STATUS_OK;
+	ioctl(cdrom->fd, CDIOCALLOW);
+#endif
 
 	if (status->cd != GNOME_CDROM_STATUS_TRAY_OPEN) {
 		if (ioctl (cdrom->fd, CDIOCEJECT, 0) < 0) {
@@ -862,7 +898,19 @@ freebsd_cdrom_get_status (GnomeCDRom *cd
 		return FALSE;
 	}
 #endif
+#ifdef __FreeBSD__
 	/* FIXME: Figure out how to do this on FreeBSD */
+#else
+	if (ioctl (cdrom->fd, CDIOREADTOCHEADER, priv->tochdr) < 0) {
+		realstatus->cd = GNOME_CDROM_STATUS_NO_DISC;
+		realstatus->audio = GNOME_CDROM_AUDIO_NOTHING;
+		realstatus->track = -1;
+
+		freebsd_cdrom_close (lcd);
+		return TRUE;
+	}
+	subchnl.track = 0;
+#endif
 	realstatus->cd = GNOME_CDROM_STATUS_OK;
 
 	subchnl.address_format = CD_MSF_FORMAT;