sanei/sanei_scsi.c: improved error handling for Linux

DEVEL_2_0_BRANCH-1
Abel Deuring 2002-12-07 18:10:45 +00:00
rodzic 820ac413e7
commit aa85bb0192
2 zmienionych plików z 19 dodań i 4 usunięć

Wyświetl plik

@ -1,3 +1,6 @@
2002-12-07 Abel Deuring <a.deuring@satzbau-gmbh.de>
* sanei/sanei_scsi.c: improved error handling
2002-12-07 Karl Heinz Kremer <khk@khk.net> 2002-12-07 Karl Heinz Kremer <khk@khk.net>
* backend/epson.c: Fixed problem with dropout color * backend/epson.c: Fixed problem with dropout color

Wyświetl plik

@ -2082,7 +2082,15 @@ sanei_scsi_req_wait (void *id)
/* check for errors, but let the sense_handler decide.... */ /* check for errors, but let the sense_handler decide.... */
if ( (req->sgdata.cdb.hdr.result != 0) || if ( (req->sgdata.cdb.hdr.result != 0) ||
((req->sgdata.cdb.hdr.sense_buffer[0] & 0x7f) != 0)) ( (req->sgdata.cdb.hdr.sense_buffer[0] & 0x7f) != 0))
#ifdef HAVE_SG_TARGET_STATUS
/* this is messy... Sometimes it happens that we have
a valid looking sense buffer, but the DRIVER_SENSE
bit is not set. Moreover, we can check this only for
not tooo old SG drivers
*/
&& (req->sgdata.cdb.hdr.driver_status & DRIVER_SENSE)
#endif
{ {
SANEI_SCSI_Sense_Handler handler SANEI_SCSI_Sense_Handler handler
= fd_info[req->fd].sense_handler; = fd_info[req->fd].sense_handler;
@ -2151,8 +2159,11 @@ sanei_scsi_req_wait (void *id)
{ {
/* check for errors, but let the sense_handler decide.... */ /* check for errors, but let the sense_handler decide.... */
if ( ((req->sgdata.sg3.hdr.info & SG_INFO_CHECK) != 0) if ( ((req->sgdata.sg3.hdr.info & SG_INFO_CHECK) != 0)
|| (req->sgdata.sg3.hdr.sb_len_wr > 0 && || ( (req->sgdata.sg3.hdr.sb_len_wr > 0)
((req->sgdata.sg3.sense_buffer[0] & 0x7f) != 0))) && ((req->sgdata.sg3.sense_buffer[0] & 0x7f) != 0)
&& (req->sgdata.sg3.hdr.driver_status & DRIVER_SENSE)
)
)
{ {
SANEI_SCSI_Sense_Handler handler SANEI_SCSI_Sense_Handler handler
= fd_info[req->fd].sense_handler; = fd_info[req->fd].sense_handler;
@ -2204,7 +2215,8 @@ sanei_scsi_req_wait (void *id)
*/ */
else if ( ((req->sgdata.sg3.hdr.status & 0x2a) == 0) else if ( ((req->sgdata.sg3.hdr.status & 0x2a) == 0)
&& (req->sgdata.sg3.hdr.host_status == SG_ERR_DID_OK) && (req->sgdata.sg3.hdr.host_status == SG_ERR_DID_OK)
&& (req->sgdata.sg3.hdr.driver_status == SG_ERR_DRIVER_OK)) && ((req->sgdata.sg3.hdr.driver_status & ~SG_ERR_DRIVER_SENSE)
== SG_ERR_DRIVER_OK))
status = SANE_STATUS_GOOD; status = SANE_STATUS_GOOD;
else else
status = SANE_STATUS_IO_ERROR; status = SANE_STATUS_IO_ERROR;