diff options
author | Ulrich Drepper <drepper@redhat.com> | 1999-07-26 17:01:32 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1999-07-26 17:01:32 +0000 |
commit | ff5c72ff503219759745f764e6482acc4175241e (patch) | |
tree | ee3c5d74a1d9ab2327a0289ab576fddd14765cb2 | |
parent | eea35053ac65bbe7686dd5e2f3d1afe938311ff9 (diff) | |
download | glibc-ff5c72ff503219759745f764e6482acc4175241e.zip glibc-ff5c72ff503219759745f764e6482acc4175241e.tar.gz glibc-ff5c72ff503219759745f764e6482acc4175241e.tar.bz2 |
Update.
* stdlib/wcstombs.c: Do not use global state.
Reported by Bruno Haible <haible@ilog.fr>.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | stdlib/wcstombs.c | 22 |
2 files changed, 9 insertions, 16 deletions
@@ -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 d9dc294..0c65090 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); } |