aboutsummaryrefslogtreecommitdiff
path: root/stdio-common
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-10-29 20:29:35 +0000
committerUlrich Drepper <drepper@redhat.com>1998-10-29 20:29:35 +0000
commitb08827487ae20b7758adcf29aec1204dc476396e (patch)
treeaf66c06ef337b2fa27588c3a39bcd92a547d5ef6 /stdio-common
parent7dc7f7b215911a23deeffb9fd6f86cce39c425b6 (diff)
downloadglibc-b08827487ae20b7758adcf29aec1204dc476396e.tar
glibc-b08827487ae20b7758adcf29aec1204dc476396e.tar.gz
glibc-b08827487ae20b7758adcf29aec1204dc476396e.tar.bz2
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.c43
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; \