From b2cf4d32221075c96a7487b1fc0baa2598d373fe Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Tue, 23 Jun 2009 09:38:22 +0000
Subject: [PATCH] Oops - SCSI INQUIRY data uses fixed-length, non-terminated
 strings -- need to copy the strings to a temp buffer and terminate before
 using them in printf.

---
 Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c | 11 ++++++++++-
 Demos/Host/LowLevel/MassStorageHost/MassStorageHost.h |  1 +
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c b/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c
index 79a559234..a1febf204 100644
--- a/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c
+++ b/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c
@@ -224,8 +224,17 @@ void MassStorage_Task(void)
 				break;
 			}
 			
+			/* VendorID and ProductID are fixed-length non-null terminated strings - need to terminate them before displaying */
+			char VendorID[9];
+			char ProductID[17];
+			
+			memcpy(&VendorID, &InquiryData.VendorID, 8);
+			memcpy(&ProductID, &InquiryData.ProductID, 16);
+			VendorID[8]   = 0x00;
+			ProductID[16] = 0x00;
+
 			/* Print vendor and product names of attached device */
-			printf_P(PSTR("Vendor: %s, Product: %s\r\n"), InquiryData.VendorID, InquiryData.ProductID);
+			printf_P(PSTR("Vendor \"%s\", Product \"%s\"\r\n"), VendorID, ProductID);
 						
 			/* Wait until disk ready */
 			puts_P(PSTR("Waiting until ready.."));
diff --git a/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.h b/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.h
index a299b7008..a5b84c2eb 100644
--- a/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.h
+++ b/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.h
@@ -43,6 +43,7 @@
 		#include <avr/power.h>
 		#include <stdio.h>
 		#include <ctype.h>
+		#include <string.h>
 
 		#include "ConfigDescriptor.h"
 
-- 
GitLab