diff options
author | Richard Braun <rbraun@sceen.net> | 2014-05-23 00:40:02 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2014-05-23 00:40:02 +0200 |
commit | 497f27ec920c1be3561e450168e60cf0ce0c4b99 (patch) | |
tree | 2fc21dba61032616815f7bbba783d1abb2b09818 /kern/string.c | |
parent | f47a56fbf5995c900858cfb19ff315e0688a1f7d (diff) |
kern/string: minor changes
Reduce branching in memmove and use a more appropriate type in strcmp.
Diffstat (limited to 'kern/string.c')
-rw-r--r-- | kern/string.c | 20 |
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') |