X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=changer-src%2Fscsi-aix.c;h=b768c7396cb1a396b79c24ff12bbbee735b7b618;hb=fd48f3e498442f0cbff5f3606c7c403d0566150e;hp=4696faf693c66d571d76a4b7a2adbd4aecf2a547;hpb=1194fb66aa28d9929c3f2bef3cc6c1c3f40a60a4;p=debian%2Famanda diff --git a/changer-src/scsi-aix.c b/changer-src/scsi-aix.c index 4696faf..b768c73 100644 --- a/changer-src/scsi-aix.c +++ b/changer-src/scsi-aix.c @@ -24,7 +24,7 @@ * file named AUTHORS, in the root directory of this distribution. */ /* - * $Id: scsi-aix.c,v 1.22 2005/10/15 13:20:47 martinea Exp $ + * $Id: scsi-aix.c,v 1.23 2006/05/25 01:47:07 johnfranks Exp $ * * Interface to execute SCSI commands on an AIX System * @@ -34,7 +34,7 @@ #include -#ifdef HAVE_AIX_LIKE_SCSI +#include #ifdef HAVE_SYS_TYPES_H #include @@ -61,10 +61,10 @@ #include #include -void SCSI_OS_Version() +void SCSI_OS_Version(void) { #ifndef lint - static char rcsid[] = "$Id: scsi-aix.c,v 1.22 2005/10/15 13:20:47 martinea Exp $"; + static char rcsid[] = "$Id: scsi-aix.c,v 1.23 2006/05/25 01:47:07 johnfranks Exp $"; DebugPrint(DEBUG_INFO, SECTION_INFO, "scsi-os-layer: %s\n",rcsid); #endif } @@ -126,14 +126,12 @@ int SCSI_OpenDevice(int ip) free(pDev[ip].inquiry); return(0); } - } else { - free(pDev[ip].inquiry); - pDev[ip].inquiry = NULL; - return(1); } - return(1); + free(pDev[ip].inquiry); + pDev[ip].inquiry = NULL; + return(1); } else { - dbprintf(("SCSI_OpenDevice %s failed\n", pDev[ip].dev)); + dbprintf(_("SCSI_OpenDevice %s failed\n"), pDev[ip].dev); return(0); } } else { @@ -161,11 +159,11 @@ int SCSI_CloseDevice(int DeviceFD) int SCSI_ExecuteCommand(int DeviceFD, Direction_T Direction, CDB_T CDB, - int CDB_Length, + size_t CDB_Length, void *DataBuffer, - int DataBufferLength, - char *RequestSenseBuf, - int RequestSenseLength) + size_t DataBufferLength, + RequestSense_T *RequestSenseBuf, + size_t RequestSenseLength) { extern OpenFiles_T *pDev; extern FILE * debug_file; @@ -179,6 +177,12 @@ int SCSI_ExecuteCommand(int DeviceFD, int isbusy = 0; int target = 3; + /* Basic sanity checks */ + assert(CDB_Length <= UCHAR_MAX); + assert(RequestSenseLength <= UCHAR_MAX); + + /* Clear buffer for cases where sense is not returned */ + memset(RequestSenseBuf, 0, RequestSenseLength); if (pDev[DeviceFD].avail == 0) { @@ -192,7 +196,7 @@ int SCSI_ExecuteCommand(int DeviceFD, scmd.cdblen = CDB_Length; scmd.data_buf = DataBuffer; scmd.datalen = DataBufferLength; - scmd.sense_buf = RequestSenseBuf; + scmd.sense_buf = (unsigned char *)RequestSenseBuf; scmd.senselen = RequestSenseLength; scmd.statusp = &sbyte; scmd.timeval = 60; @@ -212,9 +216,9 @@ int SCSI_ExecuteCommand(int DeviceFD, return(SCSI_OK); } else { - bzero(&ds, sizeof(struct sc_iocmd)); + bzero(&ds, SIZEOF(struct sc_iocmd)); bzero(RequestSenseBuf, RequestSenseLength); - bzero(&ExtendedRequestSense, sizeof(ExtendedRequestSense_T)); + bzero(&ExtendedRequestSense, SIZEOF(ExtendedRequestSense_T)); ds.flags = SC_ASYNC; /* Timeout */ @@ -235,7 +239,7 @@ int SCSI_ExecuteCommand(int DeviceFD, /* Sense Buffer is not available on AIX ?*/ /* ds.req_sense_length = 255; - ds.request_sense_ptr = (char *)RequestSense; + ds.request_sense_ptr = (unsigned char *)RequestSense; */ switch (Direction) { @@ -267,7 +271,7 @@ int SCSI_ExecuteCommand(int DeviceFD, SINQ[5] = 0x80; bcopy(SINQ, ds.scsi_cdb, 6); ds.command_length = 6; - ds.buffer = RequestSenseBuf; + ds.buffer = (unsigned char *)RequestSenseBuf; ds.data_length = RequestSenseLength; if (pDev[DeviceFD].devopen == 0) @@ -276,10 +280,10 @@ int SCSI_ExecuteCommand(int DeviceFD, Result = ioctl(pDev[DeviceFD].fd, STIOCMD, &ds); SCSI_CloseDevice(DeviceFD); return(SCSI_OK); - break; + case SC_BUSY_STATUS: return(SCSI_BUSY); - break; + case SC_CHECK_CONDITION: SINQ[0] = SC_COM_REQUEST_SENSE; SINQ[1] = 0; @@ -289,8 +293,8 @@ int SCSI_ExecuteCommand(int DeviceFD, SINQ[5] = 0x80; bcopy(SINQ, ds.scsi_cdb, 6); ds.command_length = 6; - ds.buffer = RequestSenseBuf; - ds.data_length = RequestSenseLength; + ds.buffer = (unsigned char *)RequestSenseBuf; + ds.data_length = (unsigned char)RequestSenseLength; if (pDev[DeviceFD].devopen == 0) if (SCSI_OpenDevice(DeviceFD) == 0) @@ -298,7 +302,7 @@ int SCSI_ExecuteCommand(int DeviceFD, Result = ioctl(pDev[DeviceFD].fd, STIOCMD, &ds); SCSI_CloseDevice(DeviceFD); return(SCSI_CHECK); - break; + default: /* * Makes no sense yet, may result in an endless loop @@ -307,17 +311,17 @@ int SCSI_ExecuteCommand(int DeviceFD, DecodeExtSense(&ExtendedRequestSense, "SCSI_ExecuteCommand:", debug_file); bcopy(&ExtendedRequestSense, RequestSenseBuf, RequestSenseLength); */ - dbprintf(("ioctl on %d return %d\n", pDev[DeviceFD].fd, Result)); - dbprintf(("ret: %d errno: %d (%s)\n", Result, errno, "")); - dbprintf(("data_length: %d\n", ds.data_length)); - dbprintf(("buffer: 0x%X\n", ds.buffer)); - dbprintf(("timeout_value: %d\n", ds.timeout_value)); - dbprintf(("status_validity: %d\n", ds.status_validity)); - dbprintf(("scsi_bus_status: 0x%X\n", ds.scsi_bus_status)); - dbprintf(("adapter_status: 0x%X\n", ds.adapter_status)); - dbprintf(("adap_q_status: 0x%X\n", ds.adap_q_status)); - dbprintf(("q_tag_msg: 0x%X\n", ds.q_tag_msg)); - dbprintf(("flags: 0X%X\n", ds.flags)); + dbprintf(_("ioctl on %d return %d\n"), pDev[DeviceFD].fd, Result); + dbprintf(_("ret: %d errno: %d (%s)\n"), Result, errno, ""); + dbprintf(_("data_length: %d\n"), ds.data_length); + dbprintf(_("buffer: 0x%X\n"), ds.buffer); + dbprintf(_("timeout_value: %d\n"), ds.timeout_value); + dbprintf(_("status_validity: %d\n"), ds.status_validity); + dbprintf(_("scsi_bus_status: 0x%X\n"), ds.scsi_bus_status); + dbprintf(_("adapter_status: 0x%X\n"), ds.adapter_status); + dbprintf(_("adap_q_status: 0x%X\n"), ds.adap_q_status); + dbprintf(_("q_tag_msg: 0x%X\n"), ds.q_tag_msg); + dbprintf(_("flags: 0X%X\n"), ds.flags); return(SCSI_ERROR); } } @@ -325,10 +329,9 @@ int SCSI_ExecuteCommand(int DeviceFD, } } -int SCSI_Scan() +int SCSI_Scan(void) { int fd; - extern int errno; struct sc_inquiry si; u_char buf[255]; int target; @@ -344,10 +347,10 @@ int SCSI_Scan() { for (lun = 0; lun < 7; lun++) { - printf("Target:Lun %d:%d\n", target,lun); + g_printf(_("Target:Lun %d:%d\n"), target,lun); if (ioctl(fd, SCIOSTART, IDLUN(target, lun)) == -1) { if (errno == EINVAL) { - printf("is in use\n"); + g_printf(_("is in use\n")); isbusy = 1; } else { return(1); @@ -356,19 +359,19 @@ int SCSI_Scan() isbusy = 0; } - bzero(&si, sizeof(si)); + bzero(&si, SIZEOF(si)); si.scsi_id = target; si.lun_id = lun; si.inquiry_len = 255; si.inquiry_ptr = (char *)&buf; if (ioctl(fd, SCIOINQU, &si) == -1) { - printf("SCIOINQU: %s\n", strerror(errno)); + g_printf("SCIOINQU: %s\n", strerror(errno)); } else { dump_hex(&buf, 255, DEBUG_INFO, SECTION_SCSI); - type = buf[0] & 0x1f; + type = buf[0] & 0x1lf; buf[8+28] = 0; - printf(stdout,"%-28s|Device Type %d\n",buf[8], type); + g_printf(_("%-28s|Device Type %d\n"),buf[8], type); } if (!isbusy && ioctl(fd, SCIOSTOP, IDLUN(target, lun)) == -1) return(1); @@ -400,7 +403,6 @@ int ScanBus(int print) return(-1); } -#endif /* * Local variables: * indent-tabs-mode: nil