kopia lustrzana https://gitlab.com/sane-project/backends
2003-07-17 Abel Deuring <a.deuring@satzbau-gmbh.de>
* sanei/sanei_scsi.c: improved SCSI error handling in sanei_scsi_cmd2 for FREEBSD_CAM_INTERFACEmerge-requests/1/head
rodzic
8007efa1a3
commit
ee430a8af6
|
@ -1,3 +1,8 @@
|
||||||
|
2003-07-17 Abel Deuring <a.deuring@satzbau-gmbh.de>
|
||||||
|
|
||||||
|
* sanei/sanei_scsi.c: improved SCSI error handling in
|
||||||
|
sanei_scsi_cmd2 for FREEBSD_CAM_INTERFACE
|
||||||
|
|
||||||
2003-07-17 Henning Meier-Geinitz <henning@meier-geinitz.de>
|
2003-07-17 Henning Meier-Geinitz <henning@meier-geinitz.de>
|
||||||
|
|
||||||
* sanei/sanei_usb.c: Enable close_on_exec in sanei_usb_open.
|
* sanei/sanei_usb.c: Enable close_on_exec in sanei_usb_open.
|
||||||
|
|
|
@ -2768,22 +2768,19 @@ SANE_Status sanei_scsi_cmd2(int fd,
|
||||||
const void *src, size_t src_size,
|
const void *src, size_t src_size,
|
||||||
void *dst, size_t * dst_size) {
|
void *dst, size_t * dst_size) {
|
||||||
|
|
||||||
/* xxx obsolete size_t cdb_size;
|
|
||||||
*/
|
|
||||||
struct cam_device *dev;
|
struct cam_device *dev;
|
||||||
union ccb *ccb;
|
union ccb *ccb;
|
||||||
int rv;
|
int rv;
|
||||||
u_int32_t ccb_flags;
|
u_int32_t ccb_flags;
|
||||||
char* data_buf;
|
char* data_buf;
|
||||||
size_t data_len;
|
size_t data_len;
|
||||||
|
SANE_Status status;
|
||||||
|
|
||||||
if (fd < 0 || fd > CAM_MAXDEVS || cam_devices[fd] == NULL) {
|
if (fd < 0 || fd > CAM_MAXDEVS || cam_devices[fd] == NULL) {
|
||||||
fprintf(stderr, "attempt to reference invalid unit %d\n", fd);
|
fprintf(stderr, "attempt to reference invalid unit %d\n", fd);
|
||||||
return SANE_STATUS_INVAL;
|
return SANE_STATUS_INVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* xxx obsolete: cdb_size = CDB_SIZE (*(u_char *) src);
|
|
||||||
*/
|
|
||||||
dev = cam_devices[fd];
|
dev = cam_devices[fd];
|
||||||
ccb = cam_getccb(dev);
|
ccb = cam_getccb(dev);
|
||||||
|
|
||||||
|
@ -2836,19 +2833,29 @@ SANE_Status sanei_scsi_cmd2(int fd,
|
||||||
DBG (1, "sanei_scsi_cmd: scsi returned with status %d\n",
|
DBG (1, "sanei_scsi_cmd: scsi returned with status %d\n",
|
||||||
(ccb->ccb_h.status & CAM_STATUS_MASK));
|
(ccb->ccb_h.status & CAM_STATUS_MASK));
|
||||||
|
|
||||||
if((ccb->ccb_h.status & CAM_STATUS_MASK)
|
switch (ccb->ccb_h.status & CAM_STATUS_MASK)
|
||||||
== SANE_STATUS_DEVICE_BUSY)
|
{
|
||||||
return SANE_STATUS_DEVICE_BUSY;
|
case CAM_BUSY:
|
||||||
|
case CAM_SEL_TIMEOUT:
|
||||||
|
case CAM_SCSI_BUSY:
|
||||||
|
status = SANE_STATUS_DEVICE_BUSY;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
status = SANE_STATUS_IO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
handler = fd_info[fd].sense_handler;
|
handler = fd_info[fd].sense_handler;
|
||||||
if (handler) {
|
if (handler && (ccb->ccb_h.status & CAM_AUTOSNS_VALID)) {
|
||||||
SANE_Status st = (*handler) (fd, ((u_char*)(&ccb->csio.sense_data)),
|
SANE_Status st = (*handler)
|
||||||
|
(fd, ((u_char*)(&ccb->csio.sense_data)),
|
||||||
fd_info[fd].sense_handler_arg);
|
fd_info[fd].sense_handler_arg);
|
||||||
cam_freeccb(ccb);
|
cam_freeccb(ccb);
|
||||||
return st;
|
return st;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
return SANE_STATUS_IO_ERROR;
|
cam_freeccb(ccb);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cam_freeccb(ccb);
|
cam_freeccb(ccb);
|
||||||
return SANE_STATUS_GOOD;
|
return SANE_STATUS_GOOD;
|
||||||
|
|
Ładowanie…
Reference in New Issue