diff options
author | itohy <itohy> | 2000-01-19 08:03:00 +0000 |
---|---|---|
committer | itohy <itohy> | 2000-01-19 08:03:00 +0000 |
commit | 423a06c00a2393e275a3b606609556caec0eace8 (patch) | |
tree | 52e81050c889053884deae5bb60da2b8cdbd355a /audio/cdparanoia/patches/patch-cg | |
parent | 9876d1dcd07d4a9dfa535384376dbe2c5cef8af3 (diff) | |
download | pkgsrc-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-cg | 187 |
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)); + } |