ref: aa62db1b2f210ffaa3fbc4a9a2f30b116b0240ee
parent: 2699bac1e5869e2ee92f588d8c91b3a7d19fbaf0
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Fri Sep 21 14:42:09 EDT 2018
[lib/c] Fix str?spn functions
--- a/lib/c/strcspn.c
+++ b/lib/c/strcspn.c
@@ -4,15 +4,17 @@
size_t
strcspn(const char *s1, const char *s2)
{
- char buf[__NUMCHARS];
- unsigned char ch;
+ const unsigned char *s = s1;
+ const unsigned char *accept = s2;
+ unsigned ch;
size_t n;
+ char buf[__NUMCHARS];
memset(buf, 0, sizeof(buf));
- while (ch = *s2++)
+ while (ch = *accept++)
buf[ch] = 1;
- for (n = 0; (ch = *s1++) && !buf[ch]; ++n)
+ for (n = 0; (ch = *s++) && !buf[ch]; ++n)
;
return n;
--- a/lib/c/strpbrk.c
+++ b/lib/c/strpbrk.c
@@ -4,15 +4,17 @@
char *
strpbrk(const char *s1, const char *s2)
{
- char buf[__NUMCHARS];
+ const unsigned char *s = s1;
+ const unsigned char *accept = s2;
unsigned ch;
+ char buf[__NUMCHARS];
memset(buf, 0, sizeof(buf));
- while (ch = *s2++)
+ while (ch = *accept++)
buf[ch] = 1;
- while ((ch = *s1) && !buf[ch])
- s1++;
+ while ((ch = *s) && !buf[ch])
+ s++;
- return (ch == '\0') ? NULL : (char *) s1;
+ return (ch == '\0') ? NULL : (char *) s;
}
--- a/lib/c/strspn.c
+++ b/lib/c/strspn.c
@@ -4,15 +4,17 @@
size_t
strspn(const char *s1, const char *s2)
{
- char buf[__NUMCHARS];
- unsigned char ch;
+ const unsigned char *s = s1;
+ const unsigned char *accept = s2;
+ unsigned ch;
size_t n;
+ char buf[__NUMCHARS];
memset(buf, 0, sizeof(buf));
- while (ch = *s2++)
+ while (ch = *accept++)
buf[ch] = 1;
- for (n = 0; (ch = *s1++) && buf[ch]; ++n)
+ for (n = 0; (ch = *s++) && buf[ch]; ++n)
;
return n;
--- a/tests/libc/execute/0016-strcspn.c
+++ b/tests/libc/execute/0016-strcspn.c
@@ -14,7 +14,7 @@
{
puts("testing");
- assert(strcspn("012", "56789") == 3);
+ assert(strcspn("0125", "56789") == 3);
assert(strcspn("", "56789") == 0);
assert(strcspn("01234", "") == 5);
assert(strcspn("", "") == 0);
--- a/tests/libc/execute/0025-strspn.c
+++ b/tests/libc/execute/0025-strspn.c
@@ -13,8 +13,8 @@
main()
{
puts("testing");
- assert(strspn("abcdef", "cba") == 3);
- assert(strspn("abc", "cba0") == 3);
+ assert(strspn("abccdef", "cba") == 4);
+ assert(strspn("abcg", "cba0") == 3);
assert(strspn("", "abc") == 0);
assert(strspn("abc", "") == 0);
assert(strspn("", "") == 0);