Rename Strncat to StrnAppend, use it instead of strncat.

Strncat() looks almost like strncat(), but it's completely different. Change
the name to reduce confusion.

Also fix a place where strncat() was misused anyway.

BUG=none
BRANCH=all
TEST=manual

sudo FEATURES=test emerge vboot_reference
FEATURES=test emerge-$BOARD vboot_reference

Change-Id: I39c30d391aa6566ec67461462e800720ade66a91
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/44572
diff --git a/Makefile b/Makefile
index 49cdab5..a7101cc 100644
--- a/Makefile
+++ b/Makefile
@@ -331,6 +331,7 @@
 	utility/dump_kernel_config_lib.c \
 	firmware/lib/cgptlib/crc32.c \
 	firmware/lib/cgptlib/cgptlib_internal.c \
+	firmware/lib/utility_string.c \
 	firmware/stub/utility_stub.c
 
 TINYHOSTLIB_OBJS = ${TINYHOSTLIB_SRCS:%.c=${BUILD}/%.o}
diff --git a/cgpt/cgpt_add.c b/cgpt/cgpt_add.c
index ada323e..9a966ba 100644
--- a/cgpt/cgpt_add.c
+++ b/cgpt/cgpt_add.c
@@ -8,7 +8,8 @@
 
 #include "cgptlib_internal.h"
 #include "cgpt_params.h"
-
+#define _STUB_IMPLEMENTATION_
+#include "utility.h"
 
 static const char* DumpCgptAddParams(const CgptAddParams *params) {
   static char buf[256];
@@ -16,49 +17,49 @@
 
   buf[0] = 0;
   snprintf(tmp, sizeof(tmp), "-i %d ", params->partition);
-  strncat(buf, tmp, sizeof(buf));
+  StrnAppend(buf, tmp, sizeof(buf));
   if (params->label) {
     snprintf(tmp, sizeof(tmp), "-l %s ", params->label);
-    strncat(buf, tmp, sizeof(buf));
+    StrnAppend(buf, tmp, sizeof(buf));
   }
   if (params->set_begin) {
     snprintf(tmp, sizeof(tmp), "-b %llu ", (unsigned long long)params->begin);
-    strncat(buf, tmp, sizeof(buf));
+    StrnAppend(buf, tmp, sizeof(buf));
   }
   if (params->set_size) {
     snprintf(tmp, sizeof(tmp), "-s %llu ", (unsigned long long)params->size);
-    strncat(buf, tmp, sizeof(buf));
+    StrnAppend(buf, tmp, sizeof(buf));
   }
   if (params->set_type) {
     GuidToStr(&params->type_guid, tmp, sizeof(tmp));
-    strncat(buf, "-t ", sizeof(buf));
-    strncat(buf, tmp, sizeof(buf));
-    strncat(buf, " ", sizeof(buf));
+    StrnAppend(buf, "-t ", sizeof(buf));
+    StrnAppend(buf, tmp, sizeof(buf));
+    StrnAppend(buf, " ", sizeof(buf));
   }
   if (params->set_unique) {
     GuidToStr(&params->unique_guid, tmp, sizeof(tmp));
-    strncat(buf, "-u ", sizeof(buf));
-    strncat(buf, tmp, sizeof(buf));
-    strncat(buf, " ", sizeof(buf));
+    StrnAppend(buf, "-u ", sizeof(buf));
+    StrnAppend(buf, tmp, sizeof(buf));
+    StrnAppend(buf, " ", sizeof(buf));
   }
   if (params->set_successful) {
     snprintf(tmp, sizeof(tmp), "-S %d ", params->successful);
-    strncat(buf, tmp, sizeof(buf));
+    StrnAppend(buf, tmp, sizeof(buf));
   }
   if (params->set_tries) {
     snprintf(tmp, sizeof(tmp), "-T %d ", params->tries);
-    strncat(buf, tmp, sizeof(buf));
+    StrnAppend(buf, tmp, sizeof(buf));
   }
   if (params->set_priority) {
     snprintf(tmp, sizeof(tmp), "-P %d ", params->priority);
-    strncat(buf, tmp, sizeof(buf));
+    StrnAppend(buf, tmp, sizeof(buf));
   }
   if (params->set_raw) {
     snprintf(tmp, sizeof(tmp), "-A 0x%x ", params->raw_value);
-    strncat(buf, tmp, sizeof(buf));
+    StrnAppend(buf, tmp, sizeof(buf));
   }
 
-  strncat(buf, "\n", sizeof(buf));
+  StrnAppend(buf, "\n", sizeof(buf));
   return buf;
 }
 
diff --git a/firmware/include/utility.h b/firmware/include/utility.h
index ead2351..8fe8277 100644
--- a/firmware/include/utility.h
+++ b/firmware/include/utility.h
@@ -118,7 +118,7 @@
  * null-terminated if <destlen> > 0.  Returns the number of characters used in
  * <dest>, not counting the terminating null.
  */
-uint32_t Strncat(char *dest, const char *src, uint32_t destlen);
+uint32_t StrnAppend(char *dest, const char *src, uint32_t destlen);
 
 /* Ensure that only our stub implementations are used, not standard C */
 #ifndef _STUB_IMPLEMENTATION_
diff --git a/firmware/lib/utility_string.c b/firmware/lib/utility_string.c
index b1b1a39..4a7e3e3 100644
--- a/firmware/lib/utility_string.c
+++ b/firmware/lib/utility_string.c
@@ -52,11 +52,11 @@
 	return usedsize - 1;
 }
 
-uint32_t Strncat(char *dest, const char *src, uint32_t destlen)
+uint32_t StrnAppend(char *dest, const char *src, uint32_t destlen)
 {
 	uint32_t used = 0;
 
-	if (!dest || !src)
+	if (!dest || !src || !destlen)
 		return 0;
 
 	/* Skip past existing string in destination.*/
diff --git a/firmware/lib/vboot_display.c b/firmware/lib/vboot_display.c
index 9abc51d..adf4a3f 100644
--- a/firmware/lib/vboot_display.c
+++ b/firmware/lib/vboot_display.c
@@ -66,7 +66,6 @@
  * in-memory font structure distinct from the in-flash version.  We'll do that
  * Real Soon Now. Until then, we just repeat the same linear search every time.
  */
-typedef FontArrayHeader VbFont_t;
 
 VbFont_t *VbInternalizeFontData(FontArrayHeader *fonthdr)
 {
@@ -366,11 +365,11 @@
 	 */
 	if (gbb->major_version == GBB_MAJOR_VER && gbb->minor_version >= 1 &&
 	    (gbb->flags != 0)) {
-		used += Strncat(outbuf + used, "gbb.flags is nonzero: 0x",
+		used += StrnAppend(outbuf + used, "gbb.flags is nonzero: 0x",
 				OUTBUF_LEN - used);
 		used += Uint64ToString(outbuf + used, OUTBUF_LEN - used,
 				       gbb->flags, 16, 8);
-		used += Strncat(outbuf + used, "\n", OUTBUF_LEN - used);
+		used += StrnAppend(outbuf + used, "\n", OUTBUF_LEN - used);
 		(void)VbExDisplayDebugInfo(outbuf);
 	}
 
@@ -581,98 +580,98 @@
 	VbDisplayScreen(cparams, disp_current_screen, 1, vncptr);
 
 	/* Add hardware ID */
-	used += Strncat(buf + used, "HWID: ", DEBUG_INFO_SIZE - used);
+	used += StrnAppend(buf + used, "HWID: ", DEBUG_INFO_SIZE - used);
 	if (0 == gbb->hwid_size ||
 	    gbb->hwid_offset > cparams->gbb_size ||
 	    gbb->hwid_offset + gbb->hwid_size > cparams->gbb_size) {
 		VBDEBUG(("VbDisplayDebugInfo(): invalid hwid offset/size\n"));
-		used += Strncat(buf + used,
+		used += StrnAppend(buf + used,
 				"(INVALID)", DEBUG_INFO_SIZE - used);
   } else {
-		used += Strncat(buf + used,
+		used += StrnAppend(buf + used,
 				(char *)((uint8_t *)gbb + gbb->hwid_offset),
 				DEBUG_INFO_SIZE - used);
   }
 
 	/* Add recovery reason */
-	used += Strncat(buf + used,
+	used += StrnAppend(buf + used,
 			"\nrecovery_reason: 0x", DEBUG_INFO_SIZE - used);
 	used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used,
 			       shared->recovery_reason, 16, 2);
-	used += Strncat(buf + used, "  ", DEBUG_INFO_SIZE - used);
-	used += Strncat(buf + used,
+	used += StrnAppend(buf + used, "  ", DEBUG_INFO_SIZE - used);
+	used += StrnAppend(buf + used,
 			RecoveryReasonString(shared->recovery_reason),
 			DEBUG_INFO_SIZE - used);
 
 	/* Add VbSharedData flags */
-	used += Strncat(buf + used, "\nVbSD.flags: 0x", DEBUG_INFO_SIZE - used);
+	used += StrnAppend(buf + used, "\nVbSD.flags: 0x", DEBUG_INFO_SIZE - used);
 	used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used,
 			       shared->flags, 16, 8);
 
 	/* Add raw contents of VbNvStorage */
-	used += Strncat(buf + used, "\nVbNv.raw:", DEBUG_INFO_SIZE - used);
+	used += StrnAppend(buf + used, "\nVbNv.raw:", DEBUG_INFO_SIZE - used);
 	for (i = 0; i < VBNV_BLOCK_SIZE; i++) {
-		used += Strncat(buf + used, " ", DEBUG_INFO_SIZE - used);
+		used += StrnAppend(buf + used, " ", DEBUG_INFO_SIZE - used);
 		used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used,
 				       vncptr->raw[i], 16, 2);
 	}
 
 	/* Add dev_boot_usb flag */
 	VbNvGet(vncptr, VBNV_DEV_BOOT_USB, &i);
-	used += Strncat(buf + used, "\ndev_boot_usb: ", DEBUG_INFO_SIZE - used);
+	used += StrnAppend(buf + used, "\ndev_boot_usb: ", DEBUG_INFO_SIZE - used);
 	used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used, i, 10, 0);
 
 	/* Add dev_boot_legacy flag */
 	VbNvGet(vncptr, VBNV_DEV_BOOT_LEGACY, &i);
-	used += Strncat(buf + used,
+	used += StrnAppend(buf + used,
 			"\ndev_boot_legacy: ", DEBUG_INFO_SIZE - used);
 	used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used, i, 10, 0);
 
 	/* Add dev_boot_signed_only flag */
 	VbNvGet(vncptr, VBNV_DEV_BOOT_SIGNED_ONLY, &i);
-	used += Strncat(buf + used, "\ndev_boot_signed_only: ",
+	used += StrnAppend(buf + used, "\ndev_boot_signed_only: ",
 			DEBUG_INFO_SIZE - used);
 	used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used, i, 10, 0);
 
 	/* Add TPM versions */
-	used += Strncat(buf + used, "\nTPM: fwver=0x", DEBUG_INFO_SIZE - used);
+	used += StrnAppend(buf + used, "\nTPM: fwver=0x", DEBUG_INFO_SIZE - used);
 	used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used,
 			       shared->fw_version_tpm, 16, 8);
-	used += Strncat(buf + used, " kernver=0x", DEBUG_INFO_SIZE - used);
+	used += StrnAppend(buf + used, " kernver=0x", DEBUG_INFO_SIZE - used);
 	used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used,
 			       shared->kernel_version_tpm, 16, 8);
 
 	/* Add GBB flags */
-	used += Strncat(buf + used, "\ngbb.flags: 0x", DEBUG_INFO_SIZE - used);
+	used += StrnAppend(buf + used, "\ngbb.flags: 0x", DEBUG_INFO_SIZE - used);
 	if (gbb->major_version == GBB_MAJOR_VER && gbb->minor_version >= 1) {
 		used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used,
 				       gbb->flags, 16, 8);
 	} else {
-		used += Strncat(buf + used,
+		used += StrnAppend(buf + used,
 				"0 (default)", DEBUG_INFO_SIZE - used);
 	}
 
 	/* Add sha1sum for Root & Recovery keys */
 	FillInSha1Sum(sha1sum,
 		(VbPublicKey *)((uint8_t *)gbb + gbb->rootkey_offset));
-	used += Strncat(buf + used, "\ngbb.rootkey: ", DEBUG_INFO_SIZE - used);
-	used += Strncat(buf + used, sha1sum, DEBUG_INFO_SIZE - used);
+	used += StrnAppend(buf + used, "\ngbb.rootkey: ", DEBUG_INFO_SIZE - used);
+	used += StrnAppend(buf + used, sha1sum, DEBUG_INFO_SIZE - used);
 	FillInSha1Sum(sha1sum,
 		(VbPublicKey *)((uint8_t *)gbb + gbb->recovery_key_offset));
-	used += Strncat(buf + used,
+	used += StrnAppend(buf + used,
 			"\ngbb.recovery_key: ", DEBUG_INFO_SIZE - used);
-	used += Strncat(buf + used, sha1sum, DEBUG_INFO_SIZE - used);
+	used += StrnAppend(buf + used, sha1sum, DEBUG_INFO_SIZE - used);
 
 	/* If we're in dev-mode, show the kernel subkey that we expect, too. */
 	if (0 == shared->recovery_reason) {
 		FillInSha1Sum(sha1sum, &shared->kernel_subkey);
-		used += Strncat(buf + used,
+		used += StrnAppend(buf + used,
 				"\nkernel_subkey: ", DEBUG_INFO_SIZE - used);
-		used += Strncat(buf + used, sha1sum, DEBUG_INFO_SIZE - used);
+		used += StrnAppend(buf + used, sha1sum, DEBUG_INFO_SIZE - used);
 	}
 
 	/* Make sure we finish with a newline */
-	used += Strncat(buf + used, "\n", DEBUG_INFO_SIZE - used);
+	used += StrnAppend(buf + used, "\n", DEBUG_INFO_SIZE - used);
 
 	/* TODO: add more interesting data:
 	 * - Information on current disks */
diff --git a/tests/utility_string_tests.c b/tests/utility_string_tests.c
index d6b2e1c..42254a4 100644
--- a/tests/utility_string_tests.c
+++ b/tests/utility_string_tests.c
@@ -19,38 +19,38 @@
   char dest[128];
 
   /* Null inputs */
-  TEST_EQ(0, Strncat(dest, NULL, sizeof(dest)), "Strncat('', null)");
-  TEST_EQ(0, Strncat(NULL, "Hey!", sizeof(dest)), "Strncat(null, '')");
+  TEST_EQ(0, StrnAppend(dest, NULL, sizeof(dest)), "StrnAppend('', null)");
+  TEST_EQ(0, StrnAppend(NULL, "Hey!", sizeof(dest)), "StrnAppend(null, '')");
 
   /* Empty <-- empty */
   *dest = 0;
-  TEST_EQ(0, Strncat(dest, "", sizeof(dest)), "Strncat('', '')");
-  TEST_EQ(0, strcmp(dest, ""), "Strncat('', '') result");
+  TEST_EQ(0, StrnAppend(dest, "", sizeof(dest)), "StrnAppend('', '')");
+  TEST_EQ(0, strcmp(dest, ""), "StrnAppend('', '') result");
 
   /* Nonempty <-- empty */
   strcpy(dest, "Bob");
-  TEST_EQ(3, Strncat(dest, "", sizeof(dest)), "Strncat(B, '')");
-  TEST_EQ(0, strcmp(dest, "Bob"), "Strncat(B, '') result");
+  TEST_EQ(3, StrnAppend(dest, "", sizeof(dest)), "StrnAppend(B, '')");
+  TEST_EQ(0, strcmp(dest, "Bob"), "StrnAppend(B, '') result");
 
   /* Empty <-- nonempty */
   *dest = 0;
-  TEST_EQ(5, Strncat(dest, "Alice", sizeof(dest)), "Strncat('', A)");
-  TEST_EQ(0, strcmp(dest, "Alice"), "Strncat('', A) result");
+  TEST_EQ(5, StrnAppend(dest, "Alice", sizeof(dest)), "StrnAppend('', A)");
+  TEST_EQ(0, strcmp(dest, "Alice"), "StrnAppend('', A) result");
 
   /* Nonempty <-- nonempty */
   strcpy(dest, "Tigre");
-  TEST_EQ(10, Strncat(dest, "Bunny", sizeof(dest)), "Strncat(T, B)");
-  TEST_EQ(0, strcmp(dest, "TigreBunny"), "Strncat(T, B) result");
+  TEST_EQ(10, StrnAppend(dest, "Bunny", sizeof(dest)), "StrnAppend(T, B)");
+  TEST_EQ(0, strcmp(dest, "TigreBunny"), "StrnAppend(T, B) result");
 
   /* Test clipping */
   strcpy(dest, "YesI");
-  TEST_EQ(7, Strncat(dest, "Can't", 8), "Strncat(Y, over)");
-  TEST_EQ(0, strcmp(dest, "YesICan"), "Strncat(Y, over) result");
+  TEST_EQ(7, StrnAppend(dest, "Can't", 8), "StrnAppend(Y, over)");
+  TEST_EQ(0, strcmp(dest, "YesICan"), "StrnAppend(Y, over) result");
 
   /* Test clipping if dest already overflows its claimed length */
   strcpy(dest, "BudgetDeficit");
-  TEST_EQ(6, Strncat(dest, "Spending", 7), "Strncat(over, over)");
-  TEST_EQ(0, strcmp(dest, "Budget"), "Strncat(over, over) result");
+  TEST_EQ(6, StrnAppend(dest, "Spending", 7), "StrnAppend(over, over)");
+  TEST_EQ(0, strcmp(dest, "Budget"), "StrnAppend(over, over) result");
 }