summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2019-07-28 13:52:23 +0000
committerchristos <christos@NetBSD.org>2019-07-28 13:52:23 +0000
commit3174af4dd73e1f61c8d39ae9beb3a6739a2203ee (patch)
treec110094064adc5b08b282f7245a1136db837d615 /lib
parent094bd8adc445a95fb2602f752491f00daac06fae (diff)
PR/54414: Valery Ushakov: c99 requires that wcsrtombs(3) updates the source
argument on conversion error
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/citrus/citrus_ctype_template.h3
-rw-r--r--lib/libc/citrus/citrus_none.c5
2 files changed, 5 insertions, 3 deletions
diff --git a/lib/libc/citrus/citrus_ctype_template.h b/lib/libc/citrus/citrus_ctype_template.h
index 1f0c6ecd9f9..c9f4229091c 100644
--- a/lib/libc/citrus/citrus_ctype_template.h
+++ b/lib/libc/citrus/citrus_ctype_template.h
@@ -1,4 +1,4 @@
-/* $NetBSD: citrus_ctype_template.h,v 1.36 2013/05/28 16:57:56 joerg Exp $ */
+/* $NetBSD: citrus_ctype_template.h,v 1.37 2019/07/28 14:26:08 christos Exp $ */
/*-
* Copyright (c)2002 Citrus Project,
@@ -372,6 +372,7 @@ _FUNCNAME(wcsrtombs_priv)(_ENCODING_INFO * __restrict ei, char * __restrict s,
err = _FUNCNAME(wcrtomb_priv)(ei, buf, sizeof(buf),
*pwcs0, psenc, &siz);
if (siz == (size_t)-1) {
+ *pwcs = pwcs0;
*nresult = siz;
return (err);
}
diff --git a/lib/libc/citrus/citrus_none.c b/lib/libc/citrus/citrus_none.c
index e804ab99283..d55651d7755 100644
--- a/lib/libc/citrus/citrus_none.c
+++ b/lib/libc/citrus/citrus_none.c
@@ -1,4 +1,4 @@
-/* $NetBSD: citrus_none.c,v 1.22 2017/07/13 16:00:30 christos Exp $ */
+/* $NetBSD: citrus_none.c,v 1.23 2019/07/28 13:52:23 christos Exp $ */
/*-
* Copyright (c)2002 Citrus Project,
@@ -28,7 +28,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: citrus_none.c,v 1.22 2017/07/13 16:00:30 christos Exp $");
+__RCSID("$NetBSD: citrus_none.c,v 1.23 2019/07/28 13:52:23 christos Exp $");
#endif /* LIBC_SCCS and not lint */
#include <assert.h>
@@ -300,6 +300,7 @@ _citrus_NONE_ctype_wcsrtombs(void * __restrict cl, char * __restrict s,
while (n > 0) {
if ((*pwcs0 & ~0xFFU) != 0) {
+ *pwcs = pwcs0;
*nresult = (size_t)-1;
return (EILSEQ);
}