From 9bd41837ad6d266ddf5fa093ef8a597976170228 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 19 May 2023 20:56:31 +1000 Subject: [PATCH] Optimise string functions --- src/include/lib/str.h | 7 ++- src/lib/str.c | 102 ++++++++++-------------------------------- 2 files changed, 26 insertions(+), 83 deletions(-) diff --git a/src/include/lib/str.h b/src/include/lib/str.h index 64fbe8ae6..4ede978fd 100644 --- a/src/include/lib/str.h +++ b/src/include/lib/str.h @@ -4,10 +4,9 @@ #include "data.h" #include "types.h" -char *strcpy(char *dst, const char *src); -char *strncpy(char *dst, const char *src, s32 len); -char *strcat(char *dst, const char *src); +void strcpy(char *dst, const char *src); +void strncpy(char *dst, const char *src, s32 len); +void strcat(char *dst, const char *src); s32 strcmp(const char *s1, const char *s2); -s32 strncmp(const char *s1, const char *s2, s32 len); #endif diff --git a/src/lib/str.c b/src/lib/str.c index 4675eb216..71837fe95 100644 --- a/src/lib/str.c +++ b/src/lib/str.c @@ -1,111 +1,55 @@ #include #include "types.h" -char *strcpy(char *dst, const char *src) +void strcpy(char *dst, const char *src) { - char *ptr = dst; char c; - *ptr = c = *src; - ptr++; - src++; - - while (c != '\0') { - *ptr = c = *src; - ptr++; + do { + *dst = c = *src; + dst++; src++; - } - - return dst; + } while (c != '\0'); } -char *strncpy(char *dst, const char *src, s32 len) +void strncpy(char *dst, const char *src, s32 len) { - char *ptr = dst; char c; - *ptr = c = *src; - ptr++; - src++; - - while (c != '\0') { - len--; - - if (len == 0) { - break; - } - - *ptr = c = *src; - ptr++; + do { + *dst = c = *src; + dst++; src++; - } - - while (len--) { - *ptr = '\0'; - ptr++; - } - - return dst; + } while (c != '\0' && len-- > 0); } -char *strcat(char *dst, const char *src) +void strcat(char *dst, const char *src) { - char *ptr = dst; char c; - while (*ptr != '\0') { - ptr++; + while (*dst != '\0') { + dst++; } - *ptr = c = *src; - ptr++; - src++; - - while (c != '\0') { - *ptr = c = *src; - ptr++; + do { + *dst = c = *src; + dst++; src++; - } - - return dst; + } while (c != '\0'); } s32 strcmp(const char *s1, const char *s2) { - if (*s1 != *s2) { - if (*s1 < *s2) { - return -1; - } else { + while (true) { + if (*s1 != *s2) { return 1; } - } - if (*s1 == '\0') { - return 0; - } - - return strcmp(s1 + 1, s2 + 1); -} - -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; + if (*s1 == '\0') { + return 0; } - } - if (*s1 == '\0') { - return 0; + s1++; + s2++; } - - return strncmp(s1 + 1, s2 + 1, len); }