Bug#660022: cdparanoia (Re: transition status)
tag 660403 + patch
thanks
On Sat, 2012-02-25 at 16:19 +0000, Adam D. Barratt wrote:
> However, the build failure doesn't look like it's unfixable
> (or incredibly hard to fix), so I imagine they'd suggest fixing the bug
> instead; it's certainly what I'd suggest.
In fact, it wasn't particularly hard at all, especially given the k3b
patch to use for inspiration. The attached diff makes the package build
again, although I don't have a suitable kfreebsd-* system available
right now to test it on.
Testing and comments welcome.
Regards,
Adam
diff -Nru cdparanoia-3.10.2+debian/debian/changelog cdparanoia-3.10.2+debian/debian/changelog
--- cdparanoia-3.10.2+debian/debian/changelog 2010-11-06 16:55:13.000000000 +0000
+++ cdparanoia-3.10.2+debian/debian/changelog 2012-02-25 17:36:55.000000000 +0000
@@ -1,3 +1,10 @@
+cdparanoia (3.10.2+debian-10.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Update for new libcam API (Closes: #660403)
+
+ -- Adam D. Barratt <adam@adam-barratt.org.uk> Sat, 25 Feb 2012 17:35:40 +0000
+
cdparanoia (3.10.2+debian-10) unstable; urgency=low
[ Rogério Brito ]
diff -Nru cdparanoia-3.10.2+debian/debian/patches/05-kfreebsd.patch cdparanoia-3.10.2+debian/debian/patches/05-kfreebsd.patch
--- cdparanoia-3.10.2+debian/debian/patches/05-kfreebsd.patch 2010-11-06 15:16:33.000000000 +0000
+++ cdparanoia-3.10.2+debian/debian/patches/05-kfreebsd.patch 2012-02-25 17:35:21.000000000 +0000
@@ -686,7 +686,7 @@
/* process a complete scsi command. */
static int sg2_handle_scsi_cmd(cdrom_drive *d,
unsigned char *cmd,
-@@ -432,6 +455,88 @@
+@@ -432,6 +455,91 @@
return sg2_handle_scsi_cmd(d,cmd,cmd_len,in_size,out_size,bytefill,bytecheck,sense);
}
@@ -740,8 +740,11 @@
+ return TR_EREAD;
+ }
+
-+ if (d->private_data->ccb->csio.sense_data.error_code & SSD_ERRCODE) {
-+ switch (d->private_data->ccb->csio.sense_data.flags & SSD_KEY) {
++ int errorCode, senseKey, addSenseCode, addSenseCodeQual;
++ scsi_extract_sense( &(d->private_data->ccb->csio.sense_data), &errorCode, &senseKey, &addSenseCode,
++ &addSenseCodeQual );
++ if (errorCode) {
++ switch (senseKey) {
+ case SSD_KEY_NO_SENSE:
+ errno = EIO;
+ return TR_UNKNOWN;
@@ -752,8 +755,8 @@
+ return TR_BUSY;
+ case SSD_KEY_MEDIUM_ERROR:
+ errno = EIO;
-+ if (d->private_data->ccb->csio.sense_data.add_sense_code == 0x0c &&
-+ d->private_data->ccb->csio.sense_data.add_sense_code_qual == 0x09)
++ if (addSenseCode == 0x0c &&
++ addSenseCodeQual == 0x09)
+ return TR_STREAMING;
+ else
+ return TR_MEDIUM;
@@ -813,34 +816,43 @@
static int mode_sense_atapi(cdrom_drive *d,int size,int page){
unsigned char sense[SG_MAX_SENSE];
-@@ -1080,9 +1209,15 @@
+@@ -1080,10 +1210,20 @@
+ 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",
+#if defined(__linux__)
+ sprintf(b," Sense key: %x ASC: %x ASCQ: %x\n",
(int)(sense[2]&0xf),
(int)(sense[12]),
(int)(sense[13]));
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-+ d->private_data->ccb->csio.sense_data.flags & SSD_KEY,
-+ d->private_data->ccb->csio.sense_data.add_sense_code,
-+ d->private_data->ccb->csio.sense_data.add_sense_code_qual);
++ int errorCode, senseKey, addSenseCode, addSenseCodeQual;
++ scsi_extract_sense( &(d->private_data->ccb->csio.sense_data), &errorCode, &senseKey, &addSenseCode,
++ &addSenseCodeQual );
++ sprintf(b," Sense key: %x ASC: %x ASCQ: %x\n",
++ senseKey,
++ addSenseCode,
++ addSenseCodeQual);
+#endif
cdmessage(d,b);
sprintf(b," Transport error: %s\n",strerror_tr[err]);
cdmessage(d,b);
-@@ -1092,9 +1227,15 @@
+@@ -1092,10 +1228,19 @@
+
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",
+#if defined(__linux__)
+ fprintf(stderr," Sense key: %x ASC: %x ASCQ: %x\n",
(int)(sense[2]&0xf),
(int)(sense[12]),
(int)(sense[13]));
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-+ d->private_data->ccb->csio.sense_data.flags & SSD_KEY,
-+ d->private_data->ccb->csio.sense_data.add_sense_code,
-+ d->private_data->ccb->csio.sense_data.add_sense_code_qual);
++ scsi_extract_sense( &(d->private_data->ccb->csio.sense_data), &errorCode, &senseKey, &addSenseCode,
++ &addSenseCodeQual );
++ fprintf(stderr," Sense key: %x ASC: %x ASCQ: %x\n",
++ senseKey,
++ addSenseCode,
++ addSenseCodeQual);
+#endif
fprintf(stderr," Transport error: %s\n",strerror_tr[err]);
fprintf(stderr," System error: %s\n",strerror(errno));
Reply to: