Module Name: src
Committed By: tnozaki
Date: Tue Nov 30 15:25:05 UTC 2010
Modified Files:
src/lib/libc/locale: rune.c
Log Message:
variable must to be nul terminated before "CODESET=foo".
ISO2022 module doesn't understand this and may fail setlocale(3).
To generate a diff of this commit:
cvs rdiff -u -r1.40 -r1.41 src/lib/libc/locale/rune.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/rune.c
diff -u src/lib/libc/locale/rune.c:1.40 src/lib/libc/locale/rune.c:1.41
--- src/lib/libc/locale/rune.c:1.40 Sat Jun 19 14:48:16 2010
+++ src/lib/libc/locale/rune.c Tue Nov 30 15:25:05 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: rune.c,v 1.40 2010/06/19 14:48:16 tnozaki Exp $ */
+/* $NetBSD: rune.c,v 1.41 2010/11/30 15:25:05 tnozaki Exp $ */
/*-
* Copyright (c)2010 Citrus Project,
@@ -107,14 +107,18 @@
static __inline void
_rune_find_codeset(char *s, size_t n,
- const char *var, size_t lenvar)
+ char *var, size_t *plenvar)
{
+ size_t lenvar;
const char *endvar;
#define _RUNE_CODESET_LEN (sizeof(_RUNE_CODESET)-1)
+ lenvar = *plenvar;
for (/**/; lenvar > _RUNE_CODESET_LEN; ++var, --lenvar) {
if (!memcmp(var, _RUNE_CODESET, _RUNE_CODESET_LEN)) {
+ *var = '\0';
+ *plenvar -= lenvar;
endvar = &var[_RUNE_CODESET_LEN];
while (n-- > 1 && lenvar-- > _RUNE_CODESET_LEN) {
if (*endvar == ' ' || *endvar == '\t')
@@ -226,7 +230,7 @@
}
_rune_find_codeset(rlp->rlp_codeset, sizeof(rlp->rlp_codeset),
- (const char *)rl->rl_variable, rl->rl_variable_len);
+ (char *)rl->rl_variable, &rl->rl_variable_len);
ret = _citrus_ctype_open(&rl->rl_citrus_ctype, frl->frl_encoding,
rl->rl_variable, rl->rl_variable_len, _PRIVSIZE);