Module Name: src Committed By: riastradh Date: Tue Aug 20 17:43:41 UTC 2024
Modified Files: src/lib/libc/locale: c32rtomb.c Log Message: c32rtomb(3): Fix type of wcrtomb_l return value. This was from `int wctomb_l(...)' in an earlier draft and I didn't update it to size_t when I changed the draft to wcrtomb_l. Caught by lint. `wc_len' mirrors `mb_len' in the complementary code in mbrtoc32(3) to avoid clash with standard C function mblen(3). PR lib/58612: c8rtomb/c16rtomb/c32rtomb yield suboptimal shift sequences To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/lib/libc/locale/c32rtomb.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/locale/c32rtomb.c diff -u src/lib/libc/locale/c32rtomb.c:1.4 src/lib/libc/locale/c32rtomb.c:1.5 --- src/lib/libc/locale/c32rtomb.c:1.4 Mon Aug 19 16:22:10 2024 +++ src/lib/libc/locale/c32rtomb.c Tue Aug 20 17:43:41 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: c32rtomb.c,v 1.4 2024/08/19 16:22:10 riastradh Exp $ */ +/* $NetBSD: c32rtomb.c,v 1.5 2024/08/20 17:43:41 riastradh Exp $ */ /*- * Copyright (c) 2024 The NetBSD Foundation, Inc. @@ -49,7 +49,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: c32rtomb.c,v 1.4 2024/08/19 16:22:10 riastradh Exp $"); +__RCSID("$NetBSD: c32rtomb.c,v 1.5 2024/08/20 17:43:41 riastradh Exp $"); #include "namespace.h" @@ -98,7 +98,7 @@ c32rtomb_l(char *restrict s, char32_t c3 size_t srcleft, dstleft, inval; mbstate_t mbrtowcstate = {0}; wchar_t wc; - int wlen; + size_t wc_len; size_t len; int error, errno_save; @@ -194,16 +194,17 @@ c32rtomb_l(char *restrict s, char32_t c3 * * XXX What about combining characters? */ - wlen = mbrtowc_l(&wc, buf, len, &mbrtowcstate, loc); - switch (wlen) { - case -1: /* error, with errno set */ + wc_len = mbrtowc_l(&wc, buf, len, &mbrtowcstate, loc); + switch (wc_len) { + case (size_t)-1: /* error, with errno set */ + len = (size_t)-1; goto out; case 0: /* decoded NUL */ wc = 0; /* paranoia */ + len = wc_len; break; default: /* decoded wc */ - _DIAGASSERT(wlen > 0); - _DIAGASSERT((size_t)wlen <= len); + _DIAGASSERT(wc_len <= len); } /*