From 6a07e1f8df9bee9a7d8bd87f27d796bd671a5109 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 19 Jan 2000 07:29:43 +0000 Subject: Update. * wcsmbs/mbrtowc.c: Create temporary state object if no output is written. * wcsmbs/mbsrtowcs.c: Likewise. * wcsmbs/wcrtomb.c: Likewise. * wcsmbs/wcsrtombs.c: Likewise. * wcsmbs/wcrtomb.c: Compute result correctly for successful call with s == NULL. --- wcsmbs/wcrtomb.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'wcsmbs/wcrtomb.c') diff --git a/wcsmbs/wcrtomb.c b/wcsmbs/wcrtomb.c index 91daf4d94c..fb91167769 100644 --- a/wcsmbs/wcrtomb.c +++ b/wcsmbs/wcrtomb.c @@ -1,6 +1,6 @@ -/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. + Contributed by Ulrich Drepper , 1996. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -36,6 +36,7 @@ static mbstate_t state; size_t __wcrtomb (char *s, wchar_t wc, mbstate_t *ps) { + mbstate_t temp_state; char buf[MB_CUR_MAX]; struct __gconv_step_data data; int status; @@ -56,6 +57,8 @@ __wcrtomb (char *s, wchar_t wc, mbstate_t *ps) { data.__outbuf = buf; wc = L'\0'; + temp_state = *data.__statep; + data.__statep = &temp_state; } /* Make sure we use the correct function. */ @@ -95,7 +98,7 @@ __wcrtomb (char *s, wchar_t wc, mbstate_t *ps) if (status == __GCONV_OK || status == __GCONV_EMPTY_INPUT || status == __GCONV_FULL_OUTPUT) - result = data.__outbuf - (unsigned char *) s; + result = data.__outbuf - (unsigned char *) (s ?: buf); else { result = (size_t) -1; -- cgit v1.2.3