Imported Upstream version 3.1.0
[debian/amanda] / changer-src / scsi-aix.c
index 4696faf693c66d571d76a4b7a2adbd4aecf2a547..b768c7396cb1a396b79c24ff12bbbee735b7b618 100644 (file)
@@ -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 <amanda.h>
 
-#ifdef HAVE_AIX_LIKE_SCSI
+#include <scsi-defs.h>
 
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #include <scsi-defs.h>
 #include <gscdds.h>
 
-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