diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | stdlib/wcstombs.c | 22 |
2 files changed, 9 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog index 5776a3742d..2190b5fdc7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 1999-07-26 Ulrich Drepper <drepper@cygnus.com> + * stdlib/wcstombs.c: Do not use global state. + Reported by Bruno Haible <haible@ilog.fr>. + * wcsmbs/wctob.c: Avoid sign extension when returning character. Reported by Bruno Haible <haible@ilog.fr>. diff --git a/stdlib/wcstombs.c b/stdlib/wcstombs.c index d9dc29486e..0c65090366 100644 --- a/stdlib/wcstombs.c +++ b/stdlib/wcstombs.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991,1992,1995,1996,1997,1999 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,30 +17,20 @@ Boston, MA 02111-1307, USA. */ #include <stdlib.h> +#include <string.h> #include <wchar.h> -extern mbstate_t __no_r_state; /* Defined in mbtowc.c. */ - /* Convert the `wchar_t' string in PWCS to a multibyte character string in S, writing no more than N characters. Return the number of bytes - written, or (size_t) -1 if an invalid `wchar_t' was found. - - Attention: this function should NEVER be intentionally used. - The interface is completely stupid. The state is shared between - all conversion functions. You should use instead the restartable - version `wcsrtombs'. */ + written, or (size_t) -1 if an invalid `wchar_t' was found. */ size_t wcstombs (char *s, const wchar_t *pwcs, size_t n) { - mbstate_t save_shift = __no_r_state; - size_t written; - - written = __wcsrtombs (s, &pwcs, n, &__no_r_state); + mbstate_t state; - /* Restore the old shift state. */ - __no_r_state = save_shift; + memset (&state, '\0', sizeof state); /* Return how many we wrote (or maybe an error). */ - return written; + return __wcsrtombs (s, &pwcs, n, &state); } |