summaryrefslogtreecommitdiff
path: root/audio/cdparanoia/patches/patch-cg
diff options
context:
space:
mode:
authoritohy <itohy>2000-01-19 08:03:00 +0000
committeritohy <itohy>2000-01-19 08:03:00 +0000
commit423a06c00a2393e275a3b606609556caec0eace8 (patch)
tree52e81050c889053884deae5bb60da2b8cdbd355a /audio/cdparanoia/patches/patch-cg
parent9876d1dcd07d4a9dfa535384376dbe2c5cef8af3 (diff)
downloadpkgsrc-423a06c00a2393e275a3b606609556caec0eace8.tar.gz
An attempt to port cdparanoia-III-alpha9.7.
CD-DA extraction tool with excessive data corrections, such as jitter, loss of data, etc. This will soon be obsoleted by cdparanoia IV, I hope.... Most SCSI/ATAPI CD-ROM drives should work fine. However, the ATAPI stuff is totally untested, and if it happened to work, it was a miracle. :-) Currently, - the feature to search for CD-ROM device is not implemented and the -g option is required, - the libraries are not installed.
Diffstat (limited to 'audio/cdparanoia/patches/patch-cg')
-rw-r--r--audio/cdparanoia/patches/patch-cg187
1 files changed, 187 insertions, 0 deletions
diff --git a/audio/cdparanoia/patches/patch-cg b/audio/cdparanoia/patches/patch-cg
new file mode 100644
index 00000000000..8fc7441d687
--- /dev/null
+++ b/audio/cdparanoia/patches/patch-cg
@@ -0,0 +1,187 @@
+$NetBSD: patch-cg,v 1.1.1.1 2000/01/19 08:03:00 itohy Exp $
+
+--- interface/scsi_interface.c.orig Tue Dec 14 13:28:03 1999
++++ interface/scsi_interface.c Tue Jan 18 08:33:33 2000
+@@ -32,6 +32,7 @@
+ #endif
+
+ static int look_for_dougg(cdrom_drive *d){
++#ifdef __linux__
+ /* are we using the new SG driver by Doug Gilbert? If so, our memory
+ strategy will be different. */
+ int reserved,table;
+@@ -78,6 +79,9 @@
+ }
+
+ return(1);
++#else
++ return(0);
++#endif
+ }
+
+ static void find_bloody_big_buff_size(cdrom_drive *d){
+@@ -142,6 +146,7 @@
+
+ }
+
++#ifdef __linux__
+ static void clear_garbage(cdrom_drive *d){
+ fd_set fdset;
+ struct timeval tv;
+@@ -172,20 +177,28 @@
+ flag=1;
+ }
+ }
++#endif
+
+ /* process a complete scsi command. */
+ static int handle_scsi_cmd(cdrom_drive *d,
+ unsigned int cmd_len,
+ unsigned int in_size,
+ unsigned int out_size,
+- unsigned char bytefill,
++ unsigned int bfill,
+ int bytecheck){
++ unsigned char bytefill = bfill;
+ int status = 0;
++#ifdef __linux__
+ struct sg_header *sg_hd=(struct sg_header *)d->sg;
+ long writebytes=SG_OFF+cmd_len+in_size;
++#endif
++#ifdef __NetBSD__
++ scsireq_t *sreq = (scsireq_t *)d->sg;
++#endif
+
+ /* generic scsi device services */
+
++#ifdef __linux__
+ /* clear out any possibly preexisting garbage */
+ clear_garbage(d);
+
+@@ -291,11 +304,53 @@
+ if(errno==0)errno=EIO;
+ return(TR_EREAD);
+ }
++#endif /* __linux__ */
++
++#ifdef __NetBSD__
++ if (in_size && out_size) {
++ warnx("handle_scsi_cmd: in and out is not supported");
++ abort();
++ }
++ memset(sreq, 0, sizeof(scsireq_t));
++ sreq->cmdlen = cmd_len;
++ memcpy(sreq->cmd, d->sg_buffer, cmd_len);
++ if (in_size) {
++ sreq->flags = SCCMD_WRITE;
++ sreq->databuf = d->sg_buffer + cmd_len;
++ sreq->datalen = out_size;
++ }
++ if (out_size) {
++ sreq->flags = SCCMD_READ;
++ sreq->databuf = d->sg_buffer;
++ sreq->datalen = out_size;
++ if(bytecheck)
++ memset(d->sg_buffer, bytefill, out_size);
++ }
++ sreq->senselen = SENSEBUFLEN;
++ sreq->timeout = 10000; /* 10s */
+
+- if(sg_hd->sense_buffer[0]){
++ status = ioctl(d->cdda_fd, SCIOCCOMMAND, (void *) sreq);
++ if (status < 0)
++ return(TR_ILLEGAL);
++#endif
++
++#ifdef __linux__
++ if(sg_hd->sense_buffer[0])
++#endif
++#ifdef __NetBSD__
++ if (sreq->sense[0])
++#endif
++ {
++#ifdef __linux__
+ char key=sg_hd->sense_buffer[2]&0xf;
+ char ASC=sg_hd->sense_buffer[12];
+ char ASCQ=sg_hd->sense_buffer[13];
++#endif
++#ifdef __NetBSD__
++ char key = sreq->sense[2]&0xf;
++ char ASC = sreq->sense[12];
++ char ASCQ = sreq->sense[13];
++#endif
+ switch(key){
+ case 0:
+ if(errno==0)errno=EIO;
+@@ -333,9 +388,20 @@
+ commands still get through. Perhaps no data comes back even
+ though the target reports success? */
+
+- if(bytecheck && in_size+cmd_len<out_size){
++#ifdef __linux__
++ if(bytecheck && in_size+cmd_len<out_size)
++#endif
++#ifdef __NetBSD__
++ if(bytecheck && out_size)
++#endif
++ {
+ long i,flag=0;
++#ifdef __linux__
+ for(i=in_size;i<out_size;i++)
++#endif
++#ifdef __NetBSD__
++ for(i=0;i<out_size;i++)
++#endif
+ if(d->sg_buffer[i]!=bytefill){
+ flag=1;
+ break;
+@@ -840,16 +906,29 @@
+ while(1) {
+ if((err=map(d,(p?buffer:NULL),begin,sectors))){
+ if(d->report_all){
++#ifdef __linux__
+ struct sg_header *sg_hd=(struct sg_header *)d->sg;
++#endif
++#ifdef __NetBSD__
++ scsireq_t *sreq=(scsireq_t *)d->sg;
++#endif
+ char b[256];
+
+ sprintf(b,"scsi_read error: sector=%ld length=%ld retry=%d\n",
+ begin,sectors,retry_count);
+ cdmessage(d,b);
+ sprintf(b," Sense key: %x ASC: %x ASCQ: %x\n",
++#ifdef __linux__
+ (int)(sg_hd->sense_buffer[2]&0xf),
+ (int)(sg_hd->sense_buffer[12]),
+- (int)(sg_hd->sense_buffer[13]));
++ (int)(sg_hd->sense_buffer[13])
++#endif
++#ifdef __NetBSD__
++ (int)(sreq->sense[2]&0xf),
++ (int)(sreq->sense[12]),
++ (int)(sreq->sense[13])
++#endif
++ );
+ cdmessage(d,b);
+ sprintf(b," Transport error: %s\n",strerror_tr[err]);
+ cdmessage(d,b);
+@@ -859,9 +938,17 @@
+ fprintf(stderr,"scsi_read error: sector=%ld length=%ld retry=%d\n",
+ begin,sectors,retry_count);
+ fprintf(stderr," Sense key: %x ASC: %x ASCQ: %x\n",
++#ifdef __linux__
+ (int)(sg_hd->sense_buffer[2]&0xf),
+ (int)(sg_hd->sense_buffer[12]),
+- (int)(sg_hd->sense_buffer[13]));
++ (int)(sg_hd->sense_buffer[13])
++#endif
++#ifdef __NetBSD__
++ (int)(sreq->sense[2]&0xf),
++ (int)(sreq->sense[12]),
++ (int)(sreq->sense[13])
++#endif
++ );
+ fprintf(stderr," Transport error: %s\n",strerror_tr[err]);
+ fprintf(stderr," System error: %s\n",strerror(errno));
+ }