Here is the diff: I apologize for not being able to send the file itself
diff --git a/games/arithmetic/arithmetic.c b/games/arithmetic/arithmetic.c
index 3b872ae1b03..d54894f9dbc 100644
--- a/games/arithmetic/arithmetic.c
+++ b/games/arithmetic/arithmetic.c
@@ -130,7 +130,7 @@ main(int argc, char *argv[])
/* Now ask the questions. */
for (;;) {
- for (cnt = NQUESTS; cnt--;)
+ for (cnt = NQUESTS; cnt; cnt--)
if (problem() == EOF)
intr(0); /* Print score and exit */
showstats();
diff --git a/lib/libc/string/memccpy.3 b/lib/libc/string/memccpy.3
index 98326d68713..f471702ef01 100644
--- a/lib/libc/string/memccpy.3
+++ b/lib/libc/string/memccpy.3
@@ -38,7 +38,7 @@
.Sh SYNOPSIS
.In string.h
.Ft void *
-.Fn memccpy "void *dst" "const void *src" "int c" "size_t len"
+.Fn memccpy "void * restrict dst" "const void * restrict src" "int c"
"size_t len"
.Sh DESCRIPTION
The
.Fn memccpy
diff --git a/lib/libc/string/memccpy.c b/lib/libc/string/memccpy.c
index 635061b8cb9..ce5fbd38dc6 100644
--- a/lib/libc/string/memccpy.c
+++ b/lib/libc/string/memccpy.c
@@ -32,18 +32,18 @@
#include <string.h>
void *
-memccpy(void *t, const void *f, int c, size_t n)
+memccpy(void * __restrict t, const void * __restrict f, int c, size_t n)
{
if (n) {
unsigned char *tp = t;
const unsigned char *fp = f;
- unsigned char uc = c;
+ const unsigned char uc = (unsigned char)c;
do {
if ((*tp++ = *fp++) == uc)
return (tp);
} while (--n != 0);
}
- return (0);
+ return (NULL);
}
DEF_WEAK(memccpy);
diff --git a/lib/libc/string/memchr.c b/lib/libc/string/memchr.c
index a6a4bd60d03..4ec8f4b36dd 100644
--- a/lib/libc/string/memchr.c
+++ b/lib/libc/string/memchr.c
@@ -38,10 +38,12 @@ memchr(const void *s, int c, size_t n)
{
if (n != 0) {
const unsigned char *p = s;
+ const unsigned char uc = (unsigned char)c;
do {
- if (*p++ == (unsigned char)c)
- return ((void *)(p - 1));
+ if (*p == uc)
+ return ((void *)p);
+ p++;
} while (--n != 0);
}
return (NULL);
diff --git a/lib/libc/string/memcmp.c b/lib/libc/string/memcmp.c
index 0df2c54d2af..32c332a6ec2 100644
--- a/lib/libc/string/memcmp.c
+++ b/lib/libc/string/memcmp.c
@@ -43,8 +43,9 @@ memcmp(const void *s1, const void *s2, size_t n)
const unsigned char *p1 = s1, *p2 = s2;
do {
- if (*p1++ != *p2++)
- return (*--p1 - *--p2);
+ if (*p1 != *p2)
+ return (*p1 - *p2);
+ p1++, p2++;
} while (--n != 0);
}
return (0);
diff --git a/lib/libc/string/memcpy.3 b/lib/libc/string/memcpy.3
index 8df2a785b99..92bbdb5829e 100644
--- a/lib/libc/string/memcpy.3
+++ b/lib/libc/string/memcpy.3
@@ -40,7 +40,7 @@
.Sh SYNOPSIS
.In string.h
.Ft void *
-.Fn memcpy "void *dst" "const void *src" "size_t len"
+.Fn memcpy "void * restrict dst" "const void * restrict src" "size_t len"
.Sh DESCRIPTION
The
.Fn memcpy
@@ -69,7 +69,7 @@ function returns the original value of
The
.Fn memcpy
function conforms to
-.St -ansiC .
+.St -isoC-99.
.Sh HISTORY
The
.Fn memcpy
diff --git a/lib/libc/string/memcpy.c b/lib/libc/string/memcpy.c
index 19fddc0ab5f..6f4fc748c39 100644
--- a/lib/libc/string/memcpy.c
+++ b/lib/libc/string/memcpy.c
@@ -39,7 +39,7 @@
* sizeof(word) MUST BE A POWER OF TWO
* SO THAT wmask BELOW IS ALL ONES
*/
-typedef long word; /* "word" used for optimal copy speed */
+typedef unsigned long word; /* "word" used for optimal copy
speed */
#define wsize sizeof(word)
#define wmask (wsize - 1)
@@ -50,10 +50,10 @@ static const char backwards_msg[] = ": backwards memcpy";
* Copy a block of memory, not handling overlap.
*/
void *
-memcpy(void *dst0, const void *src0, size_t length)
+memcpy(void * __restrict dst0, const void * __restrict src0, size_t length)
{
- char *dst = dst0;
- const char *src = src0;
+ char *dst = (char *)dst0;
+ const char *src = (const char *)src0;
size_t t;
if (length == 0 || dst == src) /* nothing to do */
@@ -83,13 +83,13 @@ memcpy(void *dst0, const void *src0, size_t length)
/*
* Copy forward.
*/
- t = (long)src; /* only need low bits */
- if ((t | (long)dst) & wmask) {
+ t = (word)src; /* only need low bits */
+ if ((t | (word)dst) & wmask) {
/*
* Try to align operands. This cannot be done
* unless the low bits match.
*/
- if ((t ^ (long)dst) & wmask || length < wsize)
+ if ((t ^ (word)dst) & wmask || length < wsize)
t = length;
else
t = wsize - (t & wmask);
diff --git a/lib/libc/string/memrchr.c b/lib/libc/string/memrchr.c
index e123bc1737d..092e548553b 100644
--- a/lib/libc/string/memrchr.c
+++ b/lib/libc/string/memrchr.c
@@ -25,12 +25,11 @@
void *
memrchr(const void *s, int c, size_t n)
{
- const unsigned char *cp;
-
if (n != 0) {
- cp = (unsigned char *)s + n;
+ const unsigned char *cp = (unsigned char *)s + n;
+ const unsigned char uc = (unsigned char)c;
do {
- if (*(--cp) == (unsigned char)c)
+ if (*(--cp) == uc)
return((void *)cp);
} while (--n != 0);
}
diff --git a/lib/libc/string/memset.c b/lib/libc/string/memset.c
index 0c261f0965a..de340fad880 100644
--- a/lib/libc/string/memset.c
+++ b/lib/libc/string/memset.c
@@ -38,9 +38,10 @@ memset(void *dst, int c, size_t n)
{
if (n != 0) {
unsigned char *d = dst;
+ const unsigned char uc = (unsigned char)c;
do
- *d++ = (unsigned char)c;
+ *d++ = uc;
while (--n != 0);
}
return (dst);
diff --git a/lib/libc/string/stpcpy.3 b/lib/libc/string/stpcpy.3
index 973eebecdde..0c82691f439 100644
--- a/lib/libc/string/stpcpy.3
+++ b/lib/libc/string/stpcpy.3
@@ -41,9 +41,9 @@
.Sh SYNOPSIS
.In string.h
.Ft char *
-.Fn stpcpy "char *dst" "const char *src"
+.Fn stpcpy "char * restrict dst" "const char * restrict src"
.Ft char *
-.Fn stpncpy "char *dst" "const char *src" "size_t len"
+.Fn stpncpy "char * restrict dst" "const char * restrict src" "size_t len"
.Sh DESCRIPTION
The
.Fn stpcpy
diff --git a/lib/libc/string/stpcpy.c b/lib/libc/string/stpcpy.c
index 5a86541f080..28ac169e864 100644
--- a/lib/libc/string/stpcpy.c
+++ b/lib/libc/string/stpcpy.c
@@ -37,7 +37,7 @@ __warn_references(stpcpy,
#endif
char *
-stpcpy(char *to, const char *from)
+stpcpy(char * restrict to, const char * restrict from)
{
for (; (*to = *from) != '\0'; ++from, ++to);
return(to);
diff --git a/lib/libc/string/stpncpy.c b/lib/libc/string/stpncpy.c
index 6bdee5de164..9c2307777aa 100644
--- a/lib/libc/string/stpncpy.c
+++ b/lib/libc/string/stpncpy.c
@@ -35,7 +35,7 @@
#include <string.h>
char *
-stpncpy(char *dst, const char *src, size_t n)
+stpncpy(char * restrict dst, const char * restrict src, size_t n)
{
if (n != 0) {
char *d = dst;
diff --git a/lib/libc/string/strcat.3 b/lib/libc/string/strcat.3
index 76032c8e8f3..08936c3a919 100644
--- a/lib/libc/string/strcat.3
+++ b/lib/libc/string/strcat.3
@@ -40,7 +40,7 @@
.Sh SYNOPSIS
.In string.h
.Ft char *
-.Fn strcat "char *dst" "const char *append"
+.Fn strcat "char * restrict dst" "const char * restrict append"
.Sh DESCRIPTION
The
.Fn strcat
@@ -69,7 +69,7 @@ function return the pointer
The
.Fn strcat
function conforms to
-.St -ansiC .
+.St -iso-c99 .
.Sh HISTORY
The
.Fn strcat
diff --git a/lib/libc/string/strcat.c b/lib/libc/string/strcat.c
index 73da22f75da..df73bcbee77 100644
--- a/lib/libc/string/strcat.c
+++ b/lib/libc/string/strcat.c
@@ -37,11 +37,11 @@ __warn_references(strcat,
#endif
char *
-strcat(char *s, const char *append)
+strcat(char * __restrict s, const char * __restrict append)
{
- char *save = s;
+ char * const save = s;
- for (; *s; ++s);
- while ((*s++ = *append++) != '\0');
+ for (; *s != '\0'; ++s);
+ while ((*s = *append) != '\0') s++, append++;
return(save);
}
diff --git a/lib/libc/string/strchr.c b/lib/libc/string/strchr.c
index 8bfa7ac3aa0..5e14872272c 100644
--- a/lib/libc/string/strchr.c
+++ b/lib/libc/string/strchr.c
@@ -38,7 +38,7 @@ strchr(const char *p, int ch)
for (;; ++p) {
if (*p == (char) ch)
return((char *)p);
- if (!*p)
+ if (*p == '\0')
return((char *)NULL);
}
/* NOTREACHED */
diff --git a/lib/libc/string/strcmp.c b/lib/libc/string/strcmp.c
index be175563d47..87e042a9a47 100644
--- a/lib/libc/string/strcmp.c
+++ b/lib/libc/string/strcmp.c
@@ -40,9 +40,11 @@
int
strcmp(const char *s1, const char *s2)
{
- while (*s1 == *s2++)
- if (*s1++ == 0)
- return (0);
- return (*(unsigned char *)s1 - *(unsigned char *)--s2);
+ while (*s1 != '\0') {
+ if (*s1 != *s2)
+ return (*(const unsigned char *)s1 - *(const unsigned
char *)s2);
+ s1++, s2++;
+ }
+ return (0);
}
DEF_STRONG(strcmp);
diff --git a/lib/libc/string/strcpy.3 b/lib/libc/string/strcpy.3
index 7174f7c963c..fc1efe665be 100644
--- a/lib/libc/string/strcpy.3
+++ b/lib/libc/string/strcpy.3
@@ -40,7 +40,7 @@
.Sh SYNOPSIS
.In string.h
.Ft char *
-.Fn strcpy "char *dst" "const char *src"
+.Fn strcpy "char * restrict dst" "const char * restrict src"
.Sh DESCRIPTION
The
.Fn strcpy
@@ -75,7 +75,7 @@ function returns
The
.Fn strcpy
function conforms to
-.St -ansiC .
+.St -iso-c99 .
.Sh HISTORY
The
.Fn strcpy
diff --git a/lib/libc/string/strcpy.c b/lib/libc/string/strcpy.c
index 290eefeabf5..2f189bf25d8 100644
--- a/lib/libc/string/strcpy.c
+++ b/lib/libc/string/strcpy.c
@@ -37,7 +37,7 @@ __warn_references(strcpy,
#endif
char *
-strcpy(char *to, const char *from)
+strcpy(char * restrict to, const char * restrict from)
{
char *save = to;
diff --git a/lib/libc/string/strlcat.c b/lib/libc/string/strlcat.c
index aa3db7ab378..3e344b3b0c6 100644
--- a/lib/libc/string/strlcat.c
+++ b/lib/libc/string/strlcat.c
@@ -31,21 +31,20 @@ strlcat(char *dst, const char *src, size_t dsize)
{
const char *odst = dst;
const char *osrc = src;
- size_t n = dsize;
+ size_t n;
size_t dlen;
/* Find the end of dst and adjust bytes left but don't go past end. */
- while (n-- != 0 && *dst != '\0')
+ for (n = dsize; n != 0 && *dst != '\0'; n--)
dst++;
dlen = dst - odst;
n = dsize - dlen;
- if (n-- == 0)
+ if (n == 0)
return(dlen + strlen(src));
while (*src != '\0') {
- if (n != 0) {
+ if (--n != 0) {
*dst++ = *src;
- n--;
}
src++;
}
diff --git a/lib/libc/string/strlcpy.3 b/lib/libc/string/strlcpy.3
index a14145e199f..91293cb6bc0 100644
--- a/lib/libc/string/strlcpy.3
+++ b/lib/libc/string/strlcpy.3
@@ -24,9 +24,9 @@
.Sh SYNOPSIS
.In string.h
.Ft size_t
-.Fn strlcpy "char *dst" "const char *src" "size_t dstsize"
+.Fn strlcpy "char * restrict dst" "const char * restrict src" "size_t dstsize"
.Ft size_t
-.Fn strlcat "char *dst" "const char *src" "size_t dstsize"
+.Fn strlcat "char * restrict dst" "const char * restrict src" "size_t dstsize"
.Sh DESCRIPTION
The
.Fn strlcpy
diff --git a/lib/libc/string/strlcpy.c b/lib/libc/string/strlcpy.c
index 7e3b9aef6f6..f694ba25398 100644
--- a/lib/libc/string/strlcpy.c
+++ b/lib/libc/string/strlcpy.c
@@ -25,22 +25,22 @@
* Returns strlen(src); if retval >= dsize, truncation occurred.
*/
size_t
-strlcpy(char *dst, const char *src, size_t dsize)
+strlcpy(char * __restrict dst, const char * __restrict src, size_t dsize)
{
- const char *osrc = src;
- size_t nleft = dsize;
+ const char * const osrc = src;
+ const size_t odsize = dsize;
/* Copy as many bytes as will fit. */
- if (nleft != 0) {
- while (--nleft != 0) {
+ if (dsize != 0) {
+ while (--dsize != 0) {
if ((*dst++ = *src++) == '\0')
break;
}
}
/* Not enough room in dst, add NUL and traverse rest of src. */
- if (nleft == 0) {
- if (dsize != 0)
+ if (dsize == 0) {
+ if (odsize != 0)
*dst = '\0'; /* NUL-terminate dst */
while (*src++)
;
diff --git a/lib/libc/string/strncat.3 b/lib/libc/string/strncat.3
index d314a9999a1..893d80ed9c5 100644
--- a/lib/libc/string/strncat.3
+++ b/lib/libc/string/strncat.3
@@ -40,7 +40,7 @@
.Sh SYNOPSIS
.In string.h
.Ft char *
-.Fn strncat "char *dst" "const char *append" "size_t count"
+.Fn strncat "char * restrict dst" "const char * restrict append" "size_t count"
.Sh DESCRIPTION
The
.Fn strncat
@@ -124,7 +124,7 @@ if (snprintf(buf, sizeof(buf), "%s%s",
The
.Fn strncat
function conforms to
-.St -ansiC .
+.St -iso-c99 .
.Sh HISTORY
The
.Fn strncat
diff --git a/lib/libc/string/strncat.c b/lib/libc/string/strncat.c
index b3388accf37..6cd71cb8151 100644
--- a/lib/libc/string/strncat.c
+++ b/lib/libc/string/strncat.c
@@ -38,7 +38,7 @@
* are written at dst (at most n+1 bytes being appended). Return dst.
*/
char *
-strncat(char *dst, const char *src, size_t n)
+strncat(char * restrict dst, const char * restrict src, size_t n)
{
if (n != 0) {
char *d = dst;
@@ -47,11 +47,11 @@ strncat(char *dst, const char *src, size_t n)
while (*d != 0)
d++;
do {
- if ((*d = *s++) == 0)
+ if ((*d = *s++) == '\0')
break;
d++;
} while (--n != 0);
- *d = 0;
+ *d = '\0';
}
return (dst);
}
diff --git a/lib/libc/string/strncpy.3 b/lib/libc/string/strncpy.3
index 3a68a0bd5b8..03e617cca20 100644
--- a/lib/libc/string/strncpy.3
+++ b/lib/libc/string/strncpy.3
@@ -40,7 +40,7 @@
.Sh SYNOPSIS
.In string.h
.Ft char *
-.Fn strncpy "char *dst" "const char *src" "size_t len"
+.Fn strncpy "char * restrict dst" "const char * restrict src" "size_t len"
.Sh DESCRIPTION
The
.Fn strncpy
@@ -130,7 +130,7 @@ if (strlcpy(buf, input, sizeof(buf)) >= sizeof(buf))
The
.Fn strncpy
function conforms to
-.St -ansiC .
+.St -iso-c99 .
.Sh HISTORY
The
.Fn strncpy
diff --git a/lib/libc/string/strncpy.c b/lib/libc/string/strncpy.c
index d6d8647fc76..42df842836b 100644
--- a/lib/libc/string/strncpy.c
+++ b/lib/libc/string/strncpy.c
@@ -46,10 +46,10 @@ strncpy(char *dst, const char *src, size_t n)
const char *s = src;
do {
- if ((*d++ = *s++) == 0) {
+ if ((*d++ = *s++) == '\0') {
/* NUL pad the remaining n-1 bytes */
while (--n != 0)
- *d++ = 0;
+ *d++ = '\0';
break;
}
} while (--n != 0);
diff --git a/lib/libc/string/strtok.3 b/lib/libc/string/strtok.3
index 0f1f359ec48..0cb3cfc98cc 100644
--- a/lib/libc/string/strtok.3
+++ b/lib/libc/string/strtok.3
@@ -41,9 +41,9 @@
.Sh SYNOPSIS
.In string.h
.Ft char *
-.Fn strtok "char *str" "const char *sep"
+.Fn strtok "char * restrict str" "const char * restrict sep"
.Ft char *
-.Fn strtok_r "char *str" "const char *sep" "char **last"
+.Fn strtok_r "char * restrict str" "const char * restrict sep" "char
** restrict last"
.Sh DESCRIPTION
.Bf -symbolic
This interface is obsoleted by
@@ -138,7 +138,7 @@ will point to
The
.Fn strtok
function conforms to
-.St -ansiC .
+.St -isoC-99.
The
.Fn strtok_r
function conforms to
diff --git a/lib/libc/string/strtok.c b/lib/libc/string/strtok.c
index c5765756fcd..d1046c6c068 100644
--- a/lib/libc/string/strtok.c
+++ b/lib/libc/string/strtok.c
@@ -30,7 +30,7 @@
#include <string.h>
char *
-strtok(char *s, const char *delim)
+strtok(char * restrict s, const char * restrict delim)
{
static char *last;
@@ -39,7 +39,7 @@ strtok(char *s, const char *delim)
DEF_STRONG(strtok);
char *
-strtok_r(char *s, const char *delim, char **last)
+strtok_r(char * restrict s, const char * restrict delim, char ** restrict last)
{
const char *spanp;
int c, sc;
diff --git a/lib/libc/string/strxfrm.3 b/lib/libc/string/strxfrm.3
index dab3673f38a..f8f19180e32 100644
--- a/lib/libc/string/strxfrm.3
+++ b/lib/libc/string/strxfrm.3
@@ -42,9 +42,9 @@
.Sh SYNOPSIS
.In string.h
.Ft size_t
-.Fn strxfrm "char *dst" "const char *src" "size_t n"
+.Fn strxfrm "char * restrict dst" "const char * restrict src" "size_t n"
.Ft size_t
-.Fn strxfrm_l "char *dst" "const char *src" "size_t n" "locale_t locale"
+.Fn strxfrm_l "char * restrict dst" "const char * restrict src"
"size_t n" "locale_t locale"
.Sh DESCRIPTION
The idea of
.Fn strxfrm
diff --git a/lib/libc/string/strxfrm.c b/lib/libc/string/strxfrm.c
index 97df097b296..f7c589ea16e 100644
--- a/lib/libc/string/strxfrm.c
+++ b/lib/libc/string/strxfrm.c
@@ -39,7 +39,7 @@
* on the original untransformed strings would return.
*/
size_t
-strxfrm(char *dst, const char *src, size_t n)
+strxfrm(char * restrict dst, const char * restrict src, size_t n)
{
/*
diff --git a/lib/libc/string/strxfrm_l.c b/lib/libc/string/strxfrm_l.c
index ff77947953b..e46274998be 100644
--- a/lib/libc/string/strxfrm_l.c
+++ b/lib/libc/string/strxfrm_l.c
@@ -7,7 +7,7 @@
#include <string.h>
size_t
-strxfrm_l(char *dst, const char *src, size_t n,
+strxfrm_l(char * restrict dst, const char * restrict src, size_t n,
locale_t locale __attribute__((__unused__)))
{
return strxfrm(dst, src, n);
diff --git a/lib/libc/string/wcscat.c b/lib/libc/string/wcscat.c
index 0525c3cb142..f9c9e4becfb 100644
--- a/lib/libc/string/wcscat.c
+++ b/lib/libc/string/wcscat.c
@@ -37,7 +37,7 @@ __warn_references(wcscat,
#endif
wchar_t *
-wcscat(wchar_t *s1, const wchar_t *s2)
+wcscat(wchar_t * restrict s1, const wchar_t * restrict s2)
{
wchar_t *p;
wchar_t *q;
diff --git a/lib/libc/string/wcscpy.c b/lib/libc/string/wcscpy.c
index f7727524135..b8d40d5ae9d 100644
--- a/lib/libc/string/wcscpy.c
+++ b/lib/libc/string/wcscpy.c
@@ -37,7 +37,7 @@ __warn_references(wcscpy,
#endif
wchar_t *
-wcscpy(wchar_t *s1, const wchar_t *s2)
+wcscpy(wchar_t * restrict s1, const wchar_t * restrict s2)
{
wchar_t *p;
const wchar_t *q;
diff --git a/lib/libc/string/wcslcat.c b/lib/libc/string/wcslcat.c
index 9949057df4e..38e514c6518 100644
--- a/lib/libc/string/wcslcat.c
+++ b/lib/libc/string/wcslcat.c
@@ -27,25 +27,24 @@
* If retval >= siz, truncation occurred.
*/
size_t
-wcslcat(wchar_t *dst, const wchar_t *src, size_t dsize)
+wcslcat(wchar_t * __restrict dst, const wchar_t * __restrict src, size_t dsize)
{
const wchar_t *odst = dst;
const wchar_t *osrc = src;
- size_t n = dsize;
+ size_t n;
size_t dlen;
/* Find the end of dst and adjust bytes left but don't go past end. */
- while (n-- != 0 && *dst != L'\0')
+ for (n = dsize; n-- != 0 && *dst != L'\0'; n--)
dst++;
dlen = dst - odst;
n = dsize - dlen;
- if (n-- == 0)
+ if (n == 0)
return(dlen + wcslen(src));
while (*src != L'\0') {
- if (n != 0) {
+ if (--n != 0) {
*dst++ = *src;
- n--;
}
src++;
}
diff --git a/lib/libc/string/wcslcpy.c b/lib/libc/string/wcslcpy.c
index 9c433c83dc6..5b0057d254d 100644
--- a/lib/libc/string/wcslcpy.c
+++ b/lib/libc/string/wcslcpy.c
@@ -25,7 +25,7 @@
* Returns wcslen(src); if retval >= dsize, truncation occurred.
*/
size_t
-wcslcpy(wchar_t *dst, const wchar_t *src, size_t dsize)
+wcslcpy(wchar_t * __restrict dst, const wchar_t * __restrict src, size_t dsize)
{
const wchar_t *osrc = src;
size_t nleft = dsize;
diff --git a/lib/libc/string/wcsncat.c b/lib/libc/string/wcsncat.c
index 2b4b9f0d491..f0d2d4e0a43 100644
--- a/lib/libc/string/wcsncat.c
+++ b/lib/libc/string/wcsncat.c
@@ -32,7 +32,7 @@
#include <wchar.h>
wchar_t *
-wcsncat(wchar_t *s1, const wchar_t *s2, size_t n)
+wcsncat(wchar_t * __restrict s1, const wchar_t * __restrict s2, size_t n)
{
wchar_t *p;
wchar_t *q;
diff --git a/lib/libc/string/wcsncpy.c b/lib/libc/string/wcsncpy.c
index 1be482b1140..ef2b1672568 100644
--- a/lib/libc/string/wcsncpy.c
+++ b/lib/libc/string/wcsncpy.c
@@ -32,20 +32,19 @@
#include <wchar.h>
wchar_t *
-wcsncpy(wchar_t *s1, const wchar_t *s2, size_t n)
+wcsncpy(wchar_t * __restrict s1, const wchar_t * __restrict s2, size_t n)
{
- wchar_t *p;
+ wchar_t * const p = s1;
- p = s1;
while (n && *s2) {
- *p++ = *s2++;
+ *s1++ = *s2++;
n--;
}
while (n) {
- *p++ = L'\0';
+ *s1++ = L'\0';
n--;
}
- return s1;
+ return p;
}
DEF_STRONG(wcsncpy);
diff --git a/lib/libc/string/wmemcpy.c b/lib/libc/string/wmemcpy.c
index cf02ab9d566..2936090b6e4 100644
--- a/lib/libc/string/wmemcpy.c
+++ b/lib/libc/string/wmemcpy.c
@@ -33,7 +33,7 @@
#include <wchar.h>
wchar_t *
-wmemcpy(wchar_t *d, const wchar_t *s, size_t n)
+wmemcpy(wchar_t * __restrict d, const wchar_t * __restrict s, size_t n)
{
return (wchar_t *)memcpy(d, s, n * sizeof(wchar_t));
diff --git a/lib/libc/string/wmemset.c b/lib/libc/string/wmemset.c
index a2d3295170e..fb7a2875d65 100644
--- a/lib/libc/string/wmemset.c
+++ b/lib/libc/string/wmemset.c
@@ -34,14 +34,12 @@
wchar_t *
wmemset(wchar_t *s, wchar_t c, size_t n)
{
- size_t i;
- wchar_t *p;
+ wchar_t * const p = s;
- p = s;
- for (i = 0; i < n; i++) {
- *p = c;
- p++;
+ for (; n != 0; n--) {
+ *s++ = c;
}
- return s;
+
+ return p;
}
DEF_STRONG(wmemset);