--- cdparanoia-III-alpha9.8/interface/scsi_interface.c.env 2004-09-30 11:36:29.495045730 -0400 +++ cdparanoia-III-alpha9.8/interface/scsi_interface.c 2004-09-30 11:35:52.261283378 -0400 @@ -177,8 +177,11 @@ * "allocation, so be more conservative: 32kB max until I test more * thoroughly". We're not currently honoring that, because we should * always get -ENOMEM. + * + * Updated: but we don't always get -ENOMEM. Sometimes USB drives + * still fail the wrong way. This needs some kernel-land investigation. */ -#if 0 +#if 1 cur=(cur>1024*32?1024*32:cur); #endif d->nsectors=cur/CD_FRAMESIZE_RAW; --- cdparanoia-III-alpha9.8/interface/scan_devices.c.env 2004-09-30 11:30:55.422135762 -0400 +++ cdparanoia-III-alpha9.8/interface/scan_devices.c 2004-09-30 11:34:04.815523677 -0400 @@ -104,6 +104,7 @@ cdrom_drive *cdda_identify(const char *device, int messagedest,char **messages){ struct stat st; cdrom_drive *d=NULL; + char *transport = getenv("CDDA_TRANSPORT"); idmessage(messagedest,messages,"Checking %s for cdrom...",device); if(stat(device,&st)){ @@ -120,11 +121,15 @@ #endif #ifdef SG_IO - d=cdda_identify_scsi(device,NULL,messagedest,messages); - if(!d)d=cdda_identify_cooked(device,messagedest,messages); -#else - if(!d)d=cdda_identify_scsi(device,NULL,messagedest,messages); - d=cdda_identify_cooked(device,messagedest,messages); + if (transport && !strcasecmp(transport, "cooked")) { +#endif + d=cdda_identify_cooked(device,messagedest,messages); + if(!d)d=cdda_identify_scsi(device,NULL,messagedest,messages); +#ifdef SG_IO + } else { + d=cdda_identify_scsi(device,NULL,messagedest,messages); + if(!d)d=cdda_identify_cooked(device,messagedest,messages); + } #endif #ifdef CDDA_TEST