summaryrefslogtreecommitdiff
path: root/audio/cdparanoia/patches/patch-cd
blob: 535ab0a98a85e6570ca155d5932cbe21841b217c (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
$NetBSD: patch-cd,v 1.1.1.1 2000/01/19 08:03:00 itohy Exp $

--- interface/common_interface.c.orig	Tue Dec 14 13:28:00 1999
+++ interface/common_interface.c	Sat Jan 15 16:55:18 2000
@@ -13,19 +13,29 @@
 #include "utils.h"
 #include "smallft.h"
 
+#ifdef __linux__
 #include <linux/hdreg.h>
+#endif
 
 /* Test for presence of a cdrom by pinging with the 'CDROMVOLREAD' ioctl() */
 int ioctl_ping_cdrom(int fd){
+#ifdef __linux__
   struct cdrom_volctrl volctl;
   if (ioctl(fd, CDROMVOLREAD, &volctl)) 
     return(1); /* failure */
+#endif
+#ifdef __NetBSD__
+  struct ioc_vol volctl;
+  if (ioctl(fd, CDIOCGETVOL, &volctl)) 
+    return(1); /* failure */
+#endif
 
   return(0);
   /* success! */
 }
 
 
+#ifdef __linux__
 /* Use the ioctl thingy above ping the cdrom; this will get model info */
 char *atapi_drive_info(int fd){
   /* Work around the fact that the struct grew without warning in
@@ -46,6 +56,7 @@
   free(id);
   return(ret);
 }
+#endif
 
 int data_bigendianp(cdrom_drive *d){
   float lsb_votes=0;
@@ -171,7 +182,9 @@
    knows the leasoud/leadin size. */
 
 int FixupTOC(cdrom_drive *d,int tracks){
+#ifdef __linux__
   struct cdrom_multisession ms_str;
+#endif
   int j;
   
   /* First off, make sure the 'starting sector' is >=0 */
@@ -209,13 +222,24 @@
      CDROM device, not the generic device. */
 
   if (d->ioctl_fd != -1) {
+#ifdef __linux__
     int result;
 
     ms_str.addr_format = CDROM_LBA;
     result = ioctl(d->ioctl_fd, CDROMMULTISESSION, &ms_str);
     if (result == -1) return -1;
+# define ms_addr	(ms_str.addr.lba)
+#endif
+
+#ifdef __NetBSD__
+    int ms_addr;
+
+    ms_addr = 0;	/* last session */
+    if (ioctl(d->ioctl_fd, CDIOREADMSADDR, &ms_addr) == -1)
+      return -1;
+#endif
 
-    if (ms_str.addr.lba > 100) {
+    if (ms_addr > 100) {
 
       /* This is an odd little piece of code --Monty */
 
@@ -223,8 +247,8 @@
       /* adjust end of last audio track to be in the first session */
       for (j = tracks-1; j >= 0; j--) {
 	if (j > 0 && !IS_AUDIO(d,j) && IS_AUDIO(d,j-1)) {
-	  if (d->disc_toc[j].dwStartSector > ms_str.addr.lba - 11400) 
-	    d->disc_toc[j].dwStartSector = ms_str.addr.lba - 11400;
+	  if (d->disc_toc[j].dwStartSector > ms_addr - 11400) 
+	    d->disc_toc[j].dwStartSector = ms_addr - 11400;
 	  break;
 	}
       }