summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2014-05-23 00:40:02 +0200
committerRichard Braun <rbraun@sceen.net>2014-05-23 00:40:02 +0200
commit497f27ec920c1be3561e450168e60cf0ce0c4b99 (patch)
tree2fc21dba61032616815f7bbba783d1abb2b09818
parentf47a56fbf5995c900858cfb19ff315e0688a1f7d (diff)
kern/string: minor changes
Reduce branching in memmove and use a more appropriate type in strcmp.
-rw-r--r--kern/string.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/kern/string.c b/kern/string.c
index c62a405e..087e5d05 100644
--- a/kern/string.c
+++ b/kern/string.c
@@ -44,20 +44,18 @@ memmove(void *dest, const void *src, size_t n)
char *dest_ptr;
size_t i;
- if (src == dest)
- return dest;
- else if (src < dest) {
- dest_ptr = (char *)dest + n - 1;
- src_ptr = (const char *)src + n - 1;
-
- for (i = 0; i < n; i++)
- *dest_ptr-- = *src_ptr--;
- } else if (src > dest) {
+ if (dest <= src) {
dest_ptr = dest;
src_ptr = src;
- for (i = 0; i < n; i++)
+ for (i = 0; i < n; i++)
*dest_ptr++ = *src_ptr++;
+ } else {
+ dest_ptr = dest + n - 1;
+ src_ptr = src + n - 1;
+
+ for (i = 0; i < n; i++)
+ *dest_ptr-- = *src_ptr--;
}
return dest;
@@ -142,7 +140,7 @@ out:
int
strcmp(const char *s1, const char *s2)
{
- unsigned char c1, c2;
+ char c1, c2;
while ((c1 = *s1) == (c2 = *s2)) {
if (c1 == '\0')