diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-10-29 20:38:21 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-10-29 20:38:21 +0000 |
commit | df6adce2b02cc851901b9260a13955eb695e044f (patch) | |
tree | d7379b12723d0874d6a0c7029857b420a8d04dbb | |
parent | 9276e88a1e9e512bdfc7370f33800619db0ee0af (diff) | |
download | glibc-df6adce2b02cc851901b9260a13955eb695e044f.zip glibc-df6adce2b02cc851901b9260a13955eb695e044f.tar.gz glibc-df6adce2b02cc851901b9260a13955eb695e044f.tar.bz2 |
(vfprintf): Fix the remaining premature returns without cleaning up the lock.
(printf_unknown): Add label all_done.
-rw-r--r-- | stdio-common/vfprintf.c | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index 0bcb117..cae92a0 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -53,7 +53,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 @@ -75,7 +79,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 @@ -150,7 +158,10 @@ extern void __funlockfile (FILE *); { \ register const int outc = (Ch); \ if (PUTC (outc, s) == EOF) \ - return -1; \ + { \ + done = -1; \ + goto all_done; \ + } \ else \ ++done; \ } \ @@ -160,7 +171,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) @@ -701,8 +715,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; \ } \ @@ -786,8 +803,11 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) \ 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; \ + } \ \ s2 = (const wchar_t *) string; \ string = alloca (len + 1); \ @@ -1431,6 +1451,7 @@ printf_unknown (FILE *s, const struct printf_info *info, if (info->spec != '\0') outchar (info->spec); + all_done: return done; } |