summaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
authorAndrey A. Chernov <ache@FreeBSD.org>1998-10-25 05:06:42 +0000
committerAndrey A. Chernov <ache@FreeBSD.org>1998-10-25 05:06:42 +0000
commita4beee718b0ebc034ec28f44135daf3df472471c (patch)
tree0ef7cf09de3fc63e819562ad1816e34c29c4615c /lib/libc
parent23a78098db5d207db7a509dd2d679eff7ecac177 (diff)
Notes
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/locale/ansi.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/libc/locale/ansi.c b/lib/libc/locale/ansi.c
index a5a3362d8adf..c0871fea6dac 100644
--- a/lib/libc/locale/ansi.c
+++ b/lib/libc/locale/ansi.c
@@ -127,22 +127,24 @@ wcstombs(s, pwcs, n)
size_t n;
{
char *e;
- int cnt = 0;
+ int cnt, nb;
- if (!pwcs || !s)
+ if (!pwcs || !s || n > INT_MAX)
return (-1);
- while (n > 0) {
+ nb = n;
+ cnt = 0;
+ while (nb > 0) {
if (*pwcs == 0) {
*s = 0;
break;
}
- if (!sputrune(*pwcs++, s, n, &e))
+ if (!sputrune(*pwcs++, s, nb, &e))
return (-1); /* encoding error */
if (!e) /* too long */
return (cnt);
cnt += e - s;
- n -= e - s;
+ nb -= e - s;
s = e;
}
return (cnt);