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);

Reply via email to