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
This commit is contained in:
Scott Long 2016-04-13 15:43:11 +00:00
parent 9c4ec22290
commit 4b35e39c6a
2 changed files with 27 additions and 9 deletions

View File

@ -3463,15 +3463,33 @@ scsi_error_action(struct ccb_scsiio *csio, struct scsi_inquiry_data *inq_data,
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_string, size_t len)
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]);
return(cdb_string);
for (i = 0; i < cdb_len; i++)
sbuf_printf(sb, "%02hhx ", cdb_ptr[i]);
return;
}
const char *

View File

@ -3646,6 +3646,7 @@ const char * scsi_op_desc(u_int16_t opcode,
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);