[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: 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: