From b08827487ae20b7758adcf29aec1204dc476396e Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 29 Oct 1998 20:29:35 +0000 Subject: Update. * stdio-common/vfprintf.c (vfprintf): Fix the remaining premature returns without cleaning up the lock. --- stdio-common/vfprintf.c | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) (limited to 'stdio-common/vfprintf.c') diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index a3281c2e0e..fdf5102846 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -54,7 +54,11 @@ ssize_t __printf_pad __P ((FILE *, char pad, size_t n)); # define PAD(Padchar) \ if (width > 0) \ { ssize_t __res = __printf_pad (s, (Padchar), width); \ - if (__res == -1) return -1; \ + if (__res == -1) \ + { \ + done = -1; \ + goto all_done; \ + } \ done += __res; } # endif #else @@ -76,7 +80,11 @@ ssize_t __wprintf_pad __P ((FILE *, wchar_t pad, size_t n)); # define PAD(Padchar) \ if (width > 0) \ { ssize_t __res = __wprintf_pad (s, (Padchar), width); \ - if (__res == -1) return -1; \ + if (__res == -1) \ + { \ + done = -1; \ + goto all_done; \ + } \ done += __res; } # endif #endif @@ -151,7 +159,10 @@ extern void __funlockfile (FILE *); { \ register const int outc = (Ch); \ if (PUTC (outc, s) == EOF) \ - return -1; \ + { \ + done = -1; \ + goto all_done; \ + } \ else \ ++done; \ } \ @@ -161,7 +172,10 @@ extern void __funlockfile (FILE *); do \ { \ if ((size_t) PUT (s, (String), (Len)) != (size_t) (Len)) \ - return -1; \ + { \ + done = -1; \ + goto all_done; \ + } \ done += (Len); \ } \ while (0) @@ -763,8 +777,11 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) } \ \ if (function_done < 0) \ - /* Error in print handler. */ \ - return -1; \ + { \ + /* Error in print handler. */ \ + done = -1; \ + goto all_done; \ + } \ \ done += function_done; \ } \ @@ -810,8 +827,11 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) } \ \ if (function_done < 0) \ - /* Error in print handler. */ \ - return -1; \ + { \ + /* Error in print handler. */ \ + done = -1; \ + goto all_done; \ + } \ \ done += function_done; \ } \ @@ -897,8 +917,11 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) memset (&mbstate, '\0', sizeof (mbstate_t)); \ len = __wcsrtombs (NULL, &s2, 0, &mbstate); \ if (len == (size_t) -1) \ - /* Illegal wide-character string. */ \ - return -1; \ + { \ + /* Illegal wide-character string. */ \ + done = -1; \ + goto all_done; \ + } \ \ assert (__mbsinit (&mbstate)); \ s2 = (const wchar_t *) string; \ -- cgit 1.4.1