wcsrtombs: handle dst == 0 case correctly.

This commit is contained in:
yamt 2002-03-25 20:47:02 +00:00
parent 76084f5561
commit c89607bec7
1 changed files with 11 additions and 6 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: citrus_none.c,v 1.3 2002/03/18 10:52:55 yamt Exp $ */ /* $NetBSD: citrus_none.c,v 1.4 2002/03/25 20:47:02 yamt Exp $ */
/*- /*-
* Copyright (c)2002 Citrus Project, * Copyright (c)2002 Citrus Project,
@ -28,7 +28,7 @@
#include <sys/cdefs.h> #include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint) #if defined(LIBC_SCCS) && !defined(lint)
__RCSID("$NetBSD: citrus_none.c,v 1.3 2002/03/18 10:52:55 yamt Exp $"); __RCSID("$NetBSD: citrus_none.c,v 1.4 2002/03/25 20:47:02 yamt Exp $");
#endif /* LIBC_SCCS and not lint */ #endif /* LIBC_SCCS and not lint */
#include <assert.h> #include <assert.h>
@ -240,20 +240,25 @@ _citrus_NONE_ctype_wcsrtombs(void * __restrict cl, char * __restrict s,
pwcs0 = *pwcs; pwcs0 = *pwcs;
count = 0; count = 0;
while (n>0) {
if (s == NULL)
n = 1;
while (n > 0) {
if ((*pwcs0 & ~0xFFU) != 0) { if ((*pwcs0 & ~0xFFU) != 0) {
*nresult = count; *nresult = (size_t)-1;
return (EILSEQ); return (EILSEQ);
} }
if (s != NULL) if (s != NULL) {
*s++ = (char)*pwcs0; *s++ = (char)*pwcs0;
n--;
}
if (*pwcs0 == L'\0') { if (*pwcs0 == L'\0') {
pwcs0 = NULL; pwcs0 = NULL;
break; break;
} }
count++; count++;
pwcs0++; pwcs0++;
n--;
} }
if (s != NULL) if (s != NULL)
*pwcs = pwcs0; *pwcs = pwcs0;