diff options
author | Alon Zakai <alonzakai@gmail.com> | 2014-02-06 22:47:23 -0500 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2014-02-06 22:47:23 -0500 |
commit | c95b10cff38fabf23a763d1889d024f6dabd4955 (patch) | |
tree | dc014fab60c42ef06c08956773e66f6fa0f83de1 /system/lib/libc | |
parent | 11a84a636ce9722053cc3100d5c04e30e9f93df2 (diff) | |
parent | 831bb584a91f5409af5df3c44f1bc8dc354ff0d8 (diff) |
Merge pull request #2103 from juj/opt_cmp1.10.2
Add optimized versions of musl libc string and memory comparison functions.
Diffstat (limited to 'system/lib/libc')
-rw-r--r-- | system/lib/libc/musl/src/locale/strcoll.c | 15 | ||||
-rw-r--r-- | system/lib/libc/musl/src/string/memcmp.c | 8 | ||||
-rw-r--r-- | system/lib/libc/musl/src/string/strcasecmp.c | 9 | ||||
-rw-r--r-- | system/lib/libc/musl/src/string/strcmp.c | 7 | ||||
-rw-r--r-- | system/lib/libc/musl/src/string/strncasecmp.c | 10 | ||||
-rw-r--r-- | system/lib/libc/musl/src/string/strncmp.c | 9 |
6 files changed, 58 insertions, 0 deletions
diff --git a/system/lib/libc/musl/src/locale/strcoll.c b/system/lib/libc/musl/src/locale/strcoll.c new file mode 100644 index 00000000..39ea1123 --- /dev/null +++ b/system/lib/libc/musl/src/locale/strcoll.c @@ -0,0 +1,15 @@ +#include <string.h> +#include <locale.h> +#include "libc.h" + +int __strcoll_l(const char *l, const char *r, locale_t loc) +{ + return strcmp(l, r); +} + +int strcoll(const char *l, const char *r) +{ + return __strcoll_l(l, r, 0); +} + +weak_alias(__strcoll_l, strcoll_l); diff --git a/system/lib/libc/musl/src/string/memcmp.c b/system/lib/libc/musl/src/string/memcmp.c new file mode 100644 index 00000000..bdbce9f0 --- /dev/null +++ b/system/lib/libc/musl/src/string/memcmp.c @@ -0,0 +1,8 @@ +#include <string.h> + +int memcmp(const void *vl, const void *vr, size_t n) +{ + const unsigned char *l=vl, *r=vr; + for (; n && *l == *r; n--, l++, r++); + return n ? *l-*r : 0; +} diff --git a/system/lib/libc/musl/src/string/strcasecmp.c b/system/lib/libc/musl/src/string/strcasecmp.c new file mode 100644 index 00000000..02fd5f8c --- /dev/null +++ b/system/lib/libc/musl/src/string/strcasecmp.c @@ -0,0 +1,9 @@ +#include <strings.h> +#include <ctype.h> + +int strcasecmp(const char *_l, const char *_r) +{ + const unsigned char *l=(void *)_l, *r=(void *)_r; + for (; *l && *r && (*l == *r || tolower(*l) == tolower(*r)); l++, r++); + return tolower(*l) - tolower(*r); +} diff --git a/system/lib/libc/musl/src/string/strcmp.c b/system/lib/libc/musl/src/string/strcmp.c new file mode 100644 index 00000000..91eb7404 --- /dev/null +++ b/system/lib/libc/musl/src/string/strcmp.c @@ -0,0 +1,7 @@ +#include <string.h> + +int strcmp(const char *l, const char *r) +{ + for (; *l==*r && *l && *r; l++, r++); + return *(unsigned char *)l - *(unsigned char *)r; +} diff --git a/system/lib/libc/musl/src/string/strncasecmp.c b/system/lib/libc/musl/src/string/strncasecmp.c new file mode 100644 index 00000000..24659721 --- /dev/null +++ b/system/lib/libc/musl/src/string/strncasecmp.c @@ -0,0 +1,10 @@ +#include <strings.h> +#include <ctype.h> + +int strncasecmp(const char *_l, const char *_r, size_t n) +{ + const unsigned char *l=(void *)_l, *r=(void *)_r; + if (!n--) return 0; + for (; *l && *r && n && (*l == *r || tolower(*l) == tolower(*r)); l++, r++, n--); + return tolower(*l) - tolower(*r); +} diff --git a/system/lib/libc/musl/src/string/strncmp.c b/system/lib/libc/musl/src/string/strncmp.c new file mode 100644 index 00000000..e228843f --- /dev/null +++ b/system/lib/libc/musl/src/string/strncmp.c @@ -0,0 +1,9 @@ +#include <string.h> + +int strncmp(const char *_l, const char *_r, size_t n) +{ + const unsigned char *l=(void *)_l, *r=(void *)_r; + if (!n--) return 0; + for (; *l && *r && n && *l == *r ; l++, r++, n--); + return *l - *r; +} |