Add unit tests for utility.c
Also fixes returned value from Memset(). And SafeMemcmp() should
return 0 (equal) if comparing 0 bytes, to match the behavior of memcmp().
BUG=chromium-os:17564
TEST=make && make runtests
Change-Id: Id43e70eecf04815216e1fd952271af35e0a66396
Reviewed-on: http://gerrit.chromium.org/gerrit/6539
Reviewed-by: Stefan Reinauer <reinauer@google.com>
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Tested-by: Randall Spangler <rspangler@chromium.org>
diff --git a/firmware/include/utility.h b/firmware/include/utility.h
index 7efbd49..8676345 100644
--- a/firmware/include/utility.h
+++ b/firmware/include/utility.h
@@ -64,12 +64,16 @@
/* Implementations of the functions below must be built as part of the firmware
* and defined in lib/utility.c */
-/* Set [n] bytes starting at [s] to [c]. */
-void* Memset(void *dest, const uint8_t c, uint64_t n);
+/* Set [n] bytes starting at [s] to [c]. Returns dest. */
+void* Memset(void* dest, const uint8_t c, uint64_t n);
-/* Compare [n] bytes starting at [s1] with [s2] and return 0 if they match,
- * 1 if they don't. Time taken to perform the comparison is only dependent on
- * [n] and not on the relationship of the match between [s1] and [s2].
+/* Compare [n] bytes starting at [s1] with [s2] and return 0 if they
+ * match, 1 if they don't. Returns 0 if n=0, since no bytes mismatched.
+ * Time taken to perform the comparison is only dependent on [n] and
+ * not on the relationship of the match between [s1] and [s2].
+ *
+ * Note that unlike Memcmp(), this only indicates inequality, not
+ * whether s1 is less than or greater than s2.
*/
int SafeMemcmp(const void* s1, const void* s2, size_t n);
diff --git a/firmware/lib/utility.c b/firmware/lib/utility.c
index 3f3ed5d..7a2370b 100644
--- a/firmware/lib/utility.c
+++ b/firmware/lib/utility.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
+/* Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*
@@ -13,7 +13,7 @@
while (n--) {
*dest++ = c;
}
- return dest;
+ return d;
}
int SafeMemcmp(const void* s1, const void* s2, size_t n) {
@@ -22,7 +22,7 @@
int result = 0;
if (0 == n)
- return 1;
+ return 0;
/* Code snippet without data-dependent branch due to
* Nate Lawson (nate@root.org) of Root Labs. */