From d6123cbe724a2dbdec11ecdaa1713110cd2599b8 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 1 Dec 2022 19:09:56 +1000 Subject: [PATCH] Remove apparent recursion from strcmp and strncmp --- src/lib/str.c | 58 ++++++++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/src/lib/str.c b/src/lib/str.c index 3491ba41f..a24b8f15f 100644 --- a/src/lib/str.c +++ b/src/lib/str.c @@ -80,42 +80,48 @@ char *strcat(char *dst, const char *src) s32 strcmp(const char *s1, const char *s2) { - if (*s1 != *s2) { - if (*s1 < *s2) { - return -1; - } else { - return 1; + while (true) { + if (*s1 != *s2) { + if (*s1 < *s2) { + return -1; + } else { + return 1; + } } - } - if (*s1 == '\0') { - return 0; - } + if (*s1 == '\0') { + return 0; + } - return strcmp(s1 + 1, s2 + 1); + s1++; + s2++; + } } s32 strncmp(const char *s1, const char *s2, s32 len) { - if (len == 0) { - return 0; - } - - len--; - - if (*s1 != *s2) { - if (*s1 < *s2) { - return -1; - } else { - return 1; + while (true) { + if (len == 0) { + return 0; } - } - if (*s1 == '\0') { - return 0; - } + if (*s1 != *s2) { + if (*s1 < *s2) { + return -1; + } else { + return 1; + } + } - return strncmp(s1 + 1, s2 + 1, len); + if (*s1 == '\0') { + return 0; + } + + len--; + + s1++; + s2++; + } } char toupper(char c)