diff options
-rw-r--r-- | libc/stdio/vdprintf.c | 9 | ||||
-rw-r--r-- | libc/stdio/vsnprintf.c | 6 | ||||
-rw-r--r-- | libc/stdio/vswprintf.c | 12 |
3 files changed, 26 insertions, 1 deletions
diff --git a/libc/stdio/vdprintf.c b/libc/stdio/vdprintf.c index 94ed6b8b8..6e28b14c0 100644 --- a/libc/stdio/vdprintf.c +++ b/libc/stdio/vdprintf.c @@ -11,6 +11,9 @@ #include "_stdio.h" #include <stdarg.h> +#ifdef __USE_OLD_VFPRINTF__ +libc_hidden_proto(vfprintf) +#endif libc_hidden_proto(fflush_unlocked) libc_hidden_proto(vdprintf) @@ -49,13 +52,17 @@ int vdprintf(int filedes, const char * __restrict format, va_list arg) /* _vfprintf_internal doesn't do any locking, locking init is here * only because of fflush_unlocked. TODO? */ -#ifdef __UCLIBC_HAS_THREADS__ +#if (defined(__STDIO_BUFFERS) || defined(__USE_OLD_VFPRINTF__)) && defined(__UCLIBC_HAS_THREADS__) f.__user_locking = 1; /* Set user locking. */ __stdio_init_mutex(&f.__lock); #endif f.__nextopen = NULL; +#ifdef __USE_OLD_VFPRINTF__ + rv = vfprintf(&f, format, arg); +#else rv = _vfprintf_internal(&f, format, arg); +#endif #ifdef __STDIO_BUFFERS /* If not buffering, then fflush is unnecessary. */ diff --git a/libc/stdio/vsnprintf.c b/libc/stdio/vsnprintf.c index 132959dcf..b54d54d20 100644 --- a/libc/stdio/vsnprintf.c +++ b/libc/stdio/vsnprintf.c @@ -10,12 +10,18 @@ libc_hidden_proto(vsnprintf) +#ifdef __USE_OLD_VFPRINTF__ +libc_hidden_proto(vfprintf) +#endif + #ifdef __UCLIBC_MJN3_ONLY__ #warning WISHLIST: Implement vsnprintf for non-buffered and no custom stream case. #endif /* __UCLIBC_MJN3_ONLY__ */ #ifdef __STDIO_BUFFERS +/* NB: __USE_OLD_VFPRINTF__ is not defined in this case */ + int vsnprintf(char *__restrict buf, size_t size, const char * __restrict format, va_list arg) { diff --git a/libc/stdio/vswprintf.c b/libc/stdio/vswprintf.c index f80bb5f64..59f7c2b57 100644 --- a/libc/stdio/vswprintf.c +++ b/libc/stdio/vswprintf.c @@ -11,6 +11,10 @@ libc_hidden_proto(vswprintf) +#ifdef __USE_OLD_VFPRINTF__ +libc_hidden_proto(vfwprintf) +#endif + #ifndef __STDIO_BUFFERS #warning Skipping vswprintf since no buffering! #else /* __STDIO_BUFFERS */ @@ -38,6 +42,10 @@ int vswprintf(wchar_t *__restrict buf, size_t size, __INIT_MBSTATE(&(f.__state)); #endif /* __STDIO_MBSTATE */ +#if defined(__USE_OLD_VFPRINTF__) && defined(__UCLIBC_HAS_THREADS__) + f.__user_locking = 1; /* Set user locking. */ + __stdio_init_mutex(&f.__lock); +#endif f.__nextopen = NULL; if (size > ((SIZE_MAX - (size_t) buf)/sizeof(wchar_t))) { @@ -50,7 +58,11 @@ int vswprintf(wchar_t *__restrict buf, size_t size, __STDIO_STREAM_DISABLE_GETC(&f); __STDIO_STREAM_DISABLE_PUTC(&f); +#ifdef __USE_OLD_VFPRINTF__ + rv = vfwprintf(&f, format, arg); +#else rv = _vfwprintf_internal(&f, format, arg); +#endif /* NOTE: Return behaviour differs from snprintf... */ if (f.__bufpos == f.__bufend) { |