Use O_NONBLOCK when opening an sg device under Linux. Return

SANE_STATUS_DEVICE_BUSY if EBUSY. Check for buffer==0 for OS/2.
Henning Meier-Geinitz <henning@meier-geinitz.de>
DEVEL_2_0_BRANCH-1
Henning Geinitz 2002-04-13 18:56:39 +00:00
rodzic 2cbddc816e
commit 00e8ac71fd
1 zmienionych plików z 13 dodań i 1 usunięć

Wyświetl plik

@ -1110,13 +1110,19 @@ sanei_scsi_open (const char *dev, int *fdp,
} }
#endif /* defined(SGIOCSTL) || (USE == SOLARIS_INTERFACE) */ #endif /* defined(SGIOCSTL) || (USE == SOLARIS_INTERFACE) */
fd = open (dev, O_RDWR | O_EXCL); fd = open (dev, O_RDWR | O_EXCL
#if USE == LINUX_INTERFACE
| O_NONBLOCK
#endif
);
if (fd < 0) if (fd < 0)
{ {
SANE_Status status = SANE_STATUS_INVAL; SANE_Status status = SANE_STATUS_INVAL;
if (errno == EACCES) if (errno == EACCES)
status = SANE_STATUS_ACCESS_DENIED; status = SANE_STATUS_ACCESS_DENIED;
else if (errno == EBUSY)
status = SANE_STATUS_DEVICE_BUSY;
DBG (1, "sanei_scsi_open: open of `%s' failed: %s\n", DBG (1, "sanei_scsi_open: open of `%s' failed: %s\n",
dev, strerror (errno)); dev, strerror (errno));
@ -3576,6 +3582,12 @@ sanei_scsi_cmd2 (int fd,
SRB srb; /* SCSI Request Block */ SRB srb; /* SCSI Request Block */
/* xxx obsolete size_t cdb_size; /* xxx obsolete size_t cdb_size;
*/ */
if (aspi_buf == NULL) /* avoid SIGSEGV in memcpy() when calling
sanei_scsi_cmd2() while aspi-driver is closed */
{
DBG (1, "sanei_scsi_cmd: Error no device (aspi_buf == NULL)\n");
return SANE_STATUS_INVAL;
}
memset ((char *) &srb, 0, sizeof (srb)); /* Okay, I'm paranoid. */ memset ((char *) &srb, 0, sizeof (srb)); /* Okay, I'm paranoid. */
/* xxx obsolete cdb_size = CDB_SIZE (*(u_char *) src);*/ /* Size of command block. */ /* xxx obsolete cdb_size = CDB_SIZE (*(u_char *) src);*/ /* Size of command block. */