Author: scottl
Date: Wed Apr 13 15:43:11 2016
New Revision: 297925
URL: https://svnweb.freebsd.org/changeset/base/297925

Log:
  Add scsi_cdb_sbuf() for handling CDB strings.  Reimplement scsi_cdb_string()
  in terms of it.
  
  Reviewed by:  imp, mav, ken
  MFC after:    3 days
  Sponsored by: Netflix
  Differential Revision:        D5934

Modified:
  head/sys/cam/scsi/scsi_all.c
  head/sys/cam/scsi/scsi_all.h

Modified: head/sys/cam/scsi/scsi_all.c
==============================================================================
--- head/sys/cam/scsi/scsi_all.c        Wed Apr 13 15:22:43 2016        
(r297924)
+++ head/sys/cam/scsi/scsi_all.c        Wed Apr 13 15:43:11 2016        
(r297925)
@@ -3464,14 +3464,32 @@ scsi_error_action(struct ccb_scsiio *csi
 char *
 scsi_cdb_string(u_int8_t *cdb_ptr, char *cdb_string, size_t len)
 {
+       struct sbuf sb;
+       int error;
+
+       if (len == 0)
+               return ("");
+
+       sbuf_new(&sb, cdb_string, len, SBUF_FIXEDLEN);
+
+       scsi_cdb_sbuf(cdb_ptr, &sb);
+
+       /* ENOMEM just means that the fixed buffer is full, OK to ignore */
+       error = sbuf_finish(&sb);
+       if (error != 0 && error != ENOMEM)
+               return ("");
+
+       return(sbuf_data(&sb));
+}
+
+void
+scsi_cdb_sbuf(u_int8_t *cdb_ptr, struct sbuf *sb)
+{
        u_int8_t cdb_len;
        int i;
 
        if (cdb_ptr == NULL)
-               return("");
-
-       /* Silence warnings */
-       cdb_len = 0;
+               return;
 
        /*
         * This is taken from the SCSI-3 draft spec.
@@ -3508,12 +3526,11 @@ scsi_cdb_string(u_int8_t *cdb_ptr, char 
                        cdb_len = 12;
                        break;
        }
-       *cdb_string = '\0';
+
        for (i = 0; i < cdb_len; i++)
-               snprintf(cdb_string + strlen(cdb_string),
-                        len - strlen(cdb_string), "%02hhx ", cdb_ptr[i]);
+               sbuf_printf(sb, "%02hhx ", cdb_ptr[i]);
 
-       return(cdb_string);
+       return;
 }
 
 const char *

Modified: head/sys/cam/scsi/scsi_all.h
==============================================================================
--- head/sys/cam/scsi/scsi_all.h        Wed Apr 13 15:22:43 2016        
(r297924)
+++ head/sys/cam/scsi/scsi_all.h        Wed Apr 13 15:43:11 2016        
(r297925)
@@ -3646,6 +3646,7 @@ const char *      scsi_op_desc(u_int16_t opco
                             struct scsi_inquiry_data *inq_data);
 char *         scsi_cdb_string(u_int8_t *cdb_ptr, char *cdb_string,
                                size_t len);
+void           scsi_cdb_sbuf(u_int8_t *cdb_ptr, struct sbuf *sb);
 
 void           scsi_print_inquiry(struct scsi_inquiry_data *inq_data);
 void           scsi_print_inquiry_short(struct scsi_inquiry_data *inq_data);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to