diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-10-29 20:29:35 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-10-29 20:29:35 +0000 |
commit | b08827487ae20b7758adcf29aec1204dc476396e (patch) | |
tree | af66c06ef337b2fa27588c3a39bcd92a547d5ef6 /stdio-common | |
parent | 7dc7f7b215911a23deeffb9fd6f86cce39c425b6 (diff) | |
download | glibc-b08827487ae20b7758adcf29aec1204dc476396e.tar.gz glibc-b08827487ae20b7758adcf29aec1204dc476396e.tar.xz glibc-b08827487ae20b7758adcf29aec1204dc476396e.zip |
Update.
* stdio-common/vfprintf.c (vfprintf): Fix the remaining premature returns without cleaning up the lock.
Diffstat (limited to 'stdio-common')
-rw-r--r-- | stdio-common/vfprintf.c | 43 |
1 files changed, 33 insertions, 10 deletions
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; \ |