svn commit: r327762 - head/sbin/camcontrol

Scott Long scottl at FreeBSD.org
Wed Jan 10 05:52:25 UTC 2018


Author: scottl
Date: Wed Jan 10 05:52:24 2018
New Revision: 327762
URL: https://svnweb.freebsd.org/changeset/base/327762

Log:
  Refactor code related to 'camcontrol devlist'
  
  Obtained from:	Netflix

Modified:
  head/sbin/camcontrol/camcontrol.c

Modified: head/sbin/camcontrol/camcontrol.c
==============================================================================
--- head/sbin/camcontrol/camcontrol.c	Wed Jan 10 05:29:02 2018	(r327761)
+++ head/sbin/camcontrol/camcontrol.c	Wed Jan 10 05:52:24 2018	(r327762)
@@ -275,6 +275,11 @@ camcontrol_optret getoption(struct camcontrol_opts *ta
 static int getdevlist(struct cam_device *device);
 #endif /* MINIMALISTIC */
 static int getdevtree(int argc, char **argv, char *combinedopt);
+static int print_dev_scsi(struct device_match_result *dev_result, char *tmpstr);
+static int print_dev_ata(struct device_match_result *dev_result, char *tmpstr);
+static int print_dev_semb(struct device_match_result *dev_result, char *tmpstr);
+static int print_dev_mmcsd(struct device_match_result *dev_result,
+    char *tmpstr);
 static int print_dev_nvme(struct device_match_result *dev_result, char *tmpstr);
 #ifndef MINIMALISTIC
 static int testunitready(struct cam_device *device, int task_attr,
@@ -555,8 +560,7 @@ getdevtree(int argc, char **argv, char *combinedopt)
 			}
 			case DEV_MATCH_DEVICE: {
 				struct device_match_result *dev_result;
-				char vendor[16], product[48], revision[16];
-				char fw[5], tmpstr[256];
+				char tmpstr[256];
 
 				if (busonly == 1)
 					break;
@@ -573,57 +577,30 @@ getdevtree(int argc, char **argv, char *combinedopt)
 					skip_device = 0;
 
 				if (dev_result->protocol == PROTO_SCSI) {
-				    cam_strvis(vendor, dev_result->inq_data.vendor,
-					   sizeof(dev_result->inq_data.vendor),
-					   sizeof(vendor));
-				    cam_strvis(product,
-					   dev_result->inq_data.product,
-					   sizeof(dev_result->inq_data.product),
-					   sizeof(product));
-				    cam_strvis(revision,
-					   dev_result->inq_data.revision,
-					  sizeof(dev_result->inq_data.revision),
-					   sizeof(revision));
-				    sprintf(tmpstr, "<%s %s %s>", vendor, product,
-					revision);
+					if (print_dev_scsi(dev_result,
+					    &tmpstr[0]) != 0) {
+						skip_device = 1;
+						break;
+					}
 				} else if (dev_result->protocol == PROTO_ATA ||
 				    dev_result->protocol == PROTO_SATAPM) {
-				    cam_strvis(product,
-					   dev_result->ident_data.model,
-					   sizeof(dev_result->ident_data.model),
-					   sizeof(product));
-				    cam_strvis(revision,
-					   dev_result->ident_data.revision,
-					  sizeof(dev_result->ident_data.revision),
-					   sizeof(revision));
-				    sprintf(tmpstr, "<%s %s>", product,
-					revision);
-				} else if (dev_result->protocol == PROTO_MMCSD) {
-					if (strlen(dev_result->mmc_ident_data.model) > 0) {
-						sprintf(tmpstr, "<%s>", dev_result->mmc_ident_data.model);
-					} else {
-						sprintf(tmpstr, "<%s card>",
-						    dev_result->mmc_ident_data.card_features & CARD_FEATURE_SDIO ? "SDIO" : "unknown");
+					if (print_dev_ata(dev_result,
+					    &tmpstr[0]) != 0) {
+						skip_device = 1;
+						break;
 					}
+				} else if (dev_result->protocol == PROTO_MMCSD){
+					if (print_dev_mmcsd(dev_result,
+					    &tmpstr[0]) != 0) {
+						skip_device = 1;
+						break;
+					}
 				} else if (dev_result->protocol == PROTO_SEMB) {
-					struct sep_identify_data *sid;
-
-					sid = (struct sep_identify_data *)
-					    &dev_result->ident_data;
-					cam_strvis(vendor, sid->vendor_id,
-					    sizeof(sid->vendor_id),
-					    sizeof(vendor));
-					cam_strvis(product, sid->product_id,
-					    sizeof(sid->product_id),
-					    sizeof(product));
-					cam_strvis(revision, sid->product_rev,
-					    sizeof(sid->product_rev),
-					    sizeof(revision));
-					cam_strvis(fw, sid->firmware_rev,
-					    sizeof(sid->firmware_rev),
-					    sizeof(fw));
-					sprintf(tmpstr, "<%s %s %s %s>",
-					    vendor, product, revision, fw);
+					if (print_dev_semb(dev_result,
+					    &tmpstr[0]) != 0) {
+						skip_device = 1;
+						break;
+					}
 				} else if (dev_result->protocol == PROTO_NVME) {
 					if (print_dev_nvme(dev_result,
 					    &tmpstr[0]) != 0) {
@@ -683,6 +660,70 @@ getdevtree(int argc, char **argv, char *combinedopt)
 	close(fd);
 
 	return (error);
+}
+
+static int
+print_dev_scsi(struct device_match_result *dev_result, char *tmpstr)
+{
+	char vendor[16], product[48], revision[16];
+
+	cam_strvis(vendor, dev_result->inq_data.vendor,
+	    sizeof(dev_result->inq_data.vendor), sizeof(vendor));
+	cam_strvis(product, dev_result->inq_data.product,
+	    sizeof(dev_result->inq_data.product), sizeof(product));
+	cam_strvis(revision, dev_result->inq_data.revision,
+	    sizeof(dev_result->inq_data.revision), sizeof(revision));
+	sprintf(tmpstr, "<%s %s %s>", vendor, product, revision);
+
+	return (0);
+}
+
+static int
+print_dev_ata(struct device_match_result *dev_result, char *tmpstr)
+{
+	char product[48], revision[16];
+
+	cam_strvis(product, dev_result->ident_data.model,
+	    sizeof(dev_result->ident_data.model), sizeof(product));
+	cam_strvis(revision, dev_result->ident_data.revision,
+	    sizeof(dev_result->ident_data.revision), sizeof(revision));
+	sprintf(tmpstr, "<%s %s>", product, revision);
+
+	return (0);
+}
+
+static int
+print_dev_semb(struct device_match_result *dev_result, char *tmpstr)
+{
+	struct sep_identify_data *sid;
+	char vendor[16], product[48], revision[16], fw[5];
+
+	sid = (struct sep_identify_data *)&dev_result->ident_data;
+	cam_strvis(vendor, sid->vendor_id,
+	    sizeof(sid->vendor_id), sizeof(vendor));
+	cam_strvis(product, sid->product_id,
+	    sizeof(sid->product_id), sizeof(product));
+	cam_strvis(revision, sid->product_rev,
+	    sizeof(sid->product_rev), sizeof(revision));
+	cam_strvis(fw, sid->firmware_rev,
+	    sizeof(sid->firmware_rev), sizeof(fw));
+	sprintf(tmpstr, "<%s %s %s %s>", vendor, product, revision, fw);
+
+	return (0);
+}
+
+static int
+print_dev_mmcsd(struct device_match_result *dev_result, char *tmpstr)
+{
+
+	if (strlen(dev_result->mmc_ident_data.model) > 0) {
+		sprintf(tmpstr, "<%s>", dev_result->mmc_ident_data.model);
+	} else {
+		sprintf(tmpstr, "<%s card>",
+		    dev_result->mmc_ident_data.card_features &
+		    CARD_FEATURE_SDIO ? "SDIO" : "unknown");
+	}
+	return (0);
 }
 
 static int


More information about the svn-src-all mailing list