mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 05:20:06 +00:00
Add __v*printf_internal with flags arguments
There are a lot more printf variants than there are scanf variants, and the code for setting up and tearing down their custom FILE variants around the call to __vf(w)printf is more complicated and variable. Therefore, I have added _internal versions of all the v*printf variants, rather than introducing helper routines so that they can all directly call __vf(w)printf_internal, as was done with scanf. As with the scanf changes, in this patch the _internal functions still look at the environmental mode bits and all callers pass 0 for the flags parameter. Several of the affected public functions had _IO_ name aliases that were not exported (but, in one case, appeared in libio.h anyway); I was originally planning to leave them as aliases to avoid having to touch internal callers, but it turns out ldbl_*_alias only work for exported symbols, so they've all been removed instead. It also turns out there were hardly any internal callers. _IO_vsprintf and _IO_vfprintf *are* exported, so those two stick around. Summary for the changes to each of the affected symbols: _IO_vfprintf, _IO_vsprintf: All internal calls removed, thus the internal declarations, as well as uses of libc_hidden_proto and libc_hidden_def, were also removed. The external symbol is now exposed via uses of ldbl_strong_alias to __vfprintf_internal and __vsprintf_internal, respectively. _IO_vasprintf, _IO_vdprintf, _IO_vsnprintf, _IO_vfwprintf, _IO_vswprintf, _IO_obstack_vprintf, _IO_obstack_printf: All internal calls removed, thus declaration in internal headers were also removed. They were never exported, so there are no aliases tying them to the internal functions. I.e.: entirely gone. __vsnprintf: Internal calls were always preceded by macros such as #define __vsnprintf _IO_vsnprintf, and #define __vsnprintf vsnprintf The macros were removed and their uses replaced with calls to the new internal function __vsnprintf_internal. Since there were no internal calls, the internal declaration was also removed. The external symbol is preserved with ldbl_weak_alias to ___vsnprintf. __vfwprintf: All internal calls converted into calls to __vfwprintf_internal, thus the internal declaration was removed. The function is now a wrapper that calls __vfwprintf_internal. The external symbol is preserved. __vswprintf: Similarly, but no external symbol. __vasprintf, __vdprintf, __vfprintf, __vsprintf: New internal wrappers. Not exported. vasprintf, vdprintf, vfprintf, vsprintf, vsnprintf, vfwprintf, vswprintf, obstack_vprintf, obstack_printf: These functions used to be aliases to the respective _IO_* function, they are now aliases to their respective __* functions. Tested for powerpc and powerpc64le.
This commit is contained in:
parent
d91798b31a
commit
698fb75b9f
82
ChangeLog
82
ChangeLog
@ -1,3 +1,85 @@
|
||||
2018-12-05 Zack Weinberg <zackw@panix.com>
|
||||
Gabriel F. T. Gomes <gabriel@inconstante.eti.br>
|
||||
|
||||
* libio/libioP.h (__vfprintf_internal, __vfwprintf_internal)
|
||||
(__vasprintf_internal, __vdprintf_internal, __obstack_vprintf_internal)
|
||||
(__vsprintf_internal, __vsnprintf_internal, __vswprintf_internal):
|
||||
New functions.
|
||||
(PRINTF_LDBL_IS_DBL, PRINTF_FORTIFY): New constants.
|
||||
(_IO_vasprintf, _IO_vdprintf, _IO_vsnprintf): Remove prototypes.
|
||||
|
||||
* stdio-common/vfprintf-internal.c: Rename from vfprintf.c.
|
||||
Include wctype.h here if COMPILE_WPRINTF is defined.
|
||||
Define __vfprintf_internal or __vfwprintf_internal, depending
|
||||
on COMPILE_WPRINTF.
|
||||
Temporarily, on entry to this function, update mode_flags
|
||||
according to the environmental settings corresponding to
|
||||
PRINTF_LDBL_IS_DBL and PRINTF_FORTIFY.
|
||||
Throughout, check mode_flags instead of __ldbl_is_dbl and
|
||||
_IO_FLAGS2_FORTIFY on the destination FILE.
|
||||
* stdio-common/vfwprintf-internal.c: Rename from vfwprintf.c.
|
||||
Include vfprintf-internal.c. Don't include wctype.h.
|
||||
* stdio-common/vfprintf.c: New file. Just define __vfprintf
|
||||
as a wrapper around __vfprintf_internal, with aliases _IO_vfprintf
|
||||
and vfprintf.
|
||||
* stdio-common/vfwprintf.c: New file. Just define __vfwprintf
|
||||
as a wrapper around __vfwprintf_internal, with aliases _IO_vfwprintf
|
||||
and vfwprintf.
|
||||
* stdio-common/Makefile: Add vfprintf-internal and vfwprintf-internal.
|
||||
|
||||
* libio/iovdprintf.c (_IO_vdprintf): Rename to __vdprintf_internal
|
||||
and add mode_flags argument; use __vfprintf_internal.
|
||||
(__vdprintf): New function. Alias vdprintf to this.
|
||||
* libio/iovsprintf.c (_IO_vsprintf, __vsprintf): Similarly.
|
||||
* libio/vasprintf.c (_IO_vasprintf, __vasprintf): Similarly.
|
||||
* libio/obprintf.c (_IO_obstack_vprintf, __obstack_vprintf): Similarly.
|
||||
(__obstack_printf): Use __obstack_printf_internal.
|
||||
* libio/vsnprintf.c (_IO_vsnprintf, ___vsnprintf): Similarly, with
|
||||
public aliases __vsnprintf and vsnprintf.
|
||||
Remove use of ldbl_hidden_def, since __vsnprintf is no longer
|
||||
called internally.
|
||||
* libio/vswprintf (_IO_vswprintf, __vswprintf): Similarly, with
|
||||
public aliases _IO_vsprintf and vsprintf.
|
||||
* libio/swprintf.c (__swprintf): Use __vswprintf_internal.
|
||||
* stdio-common/asprintf.c (__asprintf): Use __vasprintf_internal.
|
||||
* stdio-common/dprintf.c (__dprintf): Use __vdprintf_internal.
|
||||
* stdio-common/snprintf.c (__snprintf): Use __vsprintf_internal.
|
||||
* stdio-common/sprintf.c (__sprintf): Use __vsprintf_internal.
|
||||
|
||||
* debug/obprintf_chk.c, debug/vasprintf_chk.c, debug/vdprintf_chk.c
|
||||
* debug/vsnprintf_chk.c, debug/vsprintf_chk.c, hurd/vpprintf.c
|
||||
* stdio-common/fprintf.c, stdio-common/fxprintf.c
|
||||
* stdio-common/printf.c: Use __vfprintf_internal.
|
||||
|
||||
* debug/fwprintf_chk.c, debug/vfwprintf_chk.c, debug/vswprintf_chk.c
|
||||
* debug/vwprintf_chk.c, debug/wprintf_chk.c, libio/fwprintf.c
|
||||
* libio/vwprintf.c, libio/wprintf.c: Use __vfwprintf_internal.
|
||||
|
||||
* sysdeps/ieee754/ldbl-opt/nldbl-compat.c: Use __vsprintf_internal,
|
||||
__obstack_vprintf_internal, __vasprintf_internal, __vdprintf_internal,
|
||||
__vsnprintf_internal, __vswprintf_internal, __vfprintf_internal, and
|
||||
__vfwprintf_internal.
|
||||
|
||||
* libio/libio.h: Remove libc_hidden_proto and declaration for
|
||||
_IO_vfprintf.
|
||||
Remove declaration of _IO_vfwprintf.
|
||||
* libio/iolibio.h: Remove libc_hidden_proto and declaration for
|
||||
_IO_vsprintf.
|
||||
Remove declarations of _IO_vswprintf, _IO_obstack_printf, and
|
||||
_IO_obstack_printf.
|
||||
* include/stdio.h: Add prototype for __vasprintf.
|
||||
(__vsnprintf): Remove declaration, because there are no more
|
||||
internal calls.
|
||||
* include/wchar.h (__vfwprintf, __vswprintf): Remove
|
||||
declaration, because there are no more internal calls.
|
||||
|
||||
* argp/argp-fmtstream.c (__argp_fmtstream_printf): Use
|
||||
__vsnprintf_internal, instead of _IO_vsnprintf.
|
||||
* argp/argp-help.c (__argp_error, __argp_failure): Use
|
||||
__vasprintf_internal, instead of _IO_vasprintf.
|
||||
* argp/argp-namefrob.h (__vsnprintf): Do not undefined then
|
||||
redefine, because there are no more internal calls.
|
||||
|
||||
2018-12-05 Zack Weinberg <zackw@panix.com>
|
||||
Gabriel F. T. Gomes <gabriel@inconstante.eti.br>
|
||||
|
||||
|
@ -42,7 +42,6 @@
|
||||
#ifdef _LIBC
|
||||
# include <wchar.h>
|
||||
# include <libio/libioP.h>
|
||||
# define __vsnprintf(s, l, f, a) _IO_vsnprintf (s, l, f, a)
|
||||
#endif
|
||||
|
||||
#define INIT_BUF_SIZE 200
|
||||
@ -413,7 +412,7 @@ __argp_fmtstream_printf (struct argp_fmtstream *fs, const char *fmt, ...)
|
||||
|
||||
va_start (args, fmt);
|
||||
avail = fs->end - fs->p;
|
||||
out = __vsnprintf (fs->p, avail, fmt, args);
|
||||
out = __vsnprintf_internal (fs->p, avail, fmt, args, 0);
|
||||
va_end (args);
|
||||
if ((size_t) out >= avail)
|
||||
size_guess = out + 1;
|
||||
|
@ -1769,7 +1769,7 @@ __argp_error (const struct argp_state *state, const char *fmt, ...)
|
||||
#ifdef _LIBC
|
||||
char *buf;
|
||||
|
||||
if (_IO_vasprintf (&buf, fmt, ap) < 0)
|
||||
if (__vasprintf_internal (&buf, fmt, ap, 0) < 0)
|
||||
buf = NULL;
|
||||
|
||||
__fxprintf (stream, "%s: %s\n",
|
||||
@ -1839,7 +1839,7 @@ __argp_failure (const struct argp_state *state, int status, int errnum,
|
||||
#ifdef _LIBC
|
||||
char *buf;
|
||||
|
||||
if (_IO_vasprintf (&buf, fmt, ap) < 0)
|
||||
if (__vasprintf_internal (&buf, fmt, ap, 0) < 0)
|
||||
buf = NULL;
|
||||
|
||||
__fxprintf (stream, ": %s", buf);
|
||||
|
@ -98,8 +98,6 @@
|
||||
#define __strerror_r strerror_r
|
||||
#undef __strndup
|
||||
#define __strndup strndup
|
||||
#undef __vsnprintf
|
||||
#define __vsnprintf vsnprintf
|
||||
|
||||
#if defined(HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED
|
||||
# define clearerr_unlocked(x) clearerr (x)
|
||||
|
@ -32,7 +32,7 @@ __fwprintf_chk (FILE *fp, int flag, const wchar_t *format, ...)
|
||||
fp->_flags2 |= _IO_FLAGS2_FORTIFY;
|
||||
|
||||
va_start (ap, format);
|
||||
done = _IO_vfwprintf (fp, format, ap);
|
||||
done = __vfwprintf_internal (fp, format, ap, 0);
|
||||
va_end (ap);
|
||||
|
||||
if (flag > 0)
|
||||
|
@ -91,7 +91,7 @@ __obstack_vprintf_chk (struct obstack *obstack, int flags, const char *format,
|
||||
if (flags > 0)
|
||||
new_f.ofile.file.file._flags2 |= _IO_FLAGS2_FORTIFY;
|
||||
|
||||
result = _IO_vfprintf (&new_f.ofile.file.file, format, args);
|
||||
result = __vfprintf_internal (&new_f.ofile.file.file, format, args, 0);
|
||||
|
||||
/* Shrink the buffer to the space we really currently need. */
|
||||
obstack_blank_fast (obstack, (new_f.ofile.file.file._IO_write_ptr
|
||||
|
@ -63,7 +63,7 @@ __vasprintf_chk (char **result_ptr, int flags, const char *format,
|
||||
if (flags > 0)
|
||||
sf._sbf._f._flags2 |= _IO_FLAGS2_FORTIFY;
|
||||
|
||||
ret = _IO_vfprintf (&sf._sbf._f, format, args);
|
||||
ret = __vfprintf_internal (&sf._sbf._f, format, args, 0);
|
||||
if (ret < 0)
|
||||
{
|
||||
free (sf._sbf._f._IO_buf_base);
|
||||
|
@ -55,7 +55,7 @@ __vdprintf_chk (int d, int flags, const char *format, va_list arg)
|
||||
if (flags > 0)
|
||||
tmpfil.file._flags2 |= _IO_FLAGS2_FORTIFY;
|
||||
|
||||
done = _IO_vfprintf (&tmpfil.file, format, arg);
|
||||
done = __vfprintf_internal (&tmpfil.file, format, arg, 0);
|
||||
|
||||
_IO_FINISH (&tmpfil.file);
|
||||
|
||||
|
@ -30,7 +30,7 @@ __vfwprintf_chk (FILE *fp, int flag, const wchar_t *format, va_list ap)
|
||||
if (flag > 0)
|
||||
fp->_flags2 |= _IO_FLAGS2_FORTIFY;
|
||||
|
||||
done = _IO_vfwprintf (fp, format, ap);
|
||||
done = __vfwprintf_internal (fp, format, ap, 0);
|
||||
|
||||
if (flag > 0)
|
||||
fp->_flags2 &= ~_IO_FLAGS2_FORTIFY;
|
||||
|
@ -60,7 +60,7 @@ ___vsnprintf_chk (char *s, size_t maxlen, int flags, size_t slen,
|
||||
sf.f._sbf._f._flags2 |= _IO_FLAGS2_FORTIFY;
|
||||
|
||||
_IO_str_init_static_internal (&sf.f, s, maxlen - 1, s);
|
||||
ret = _IO_vfprintf (&sf.f._sbf._f, format, args);
|
||||
ret = __vfprintf_internal (&sf.f._sbf._f, format, args, 0);
|
||||
|
||||
if (sf.f._sbf._f._IO_buf_base != sf.overflow_buf)
|
||||
*sf.f._sbf._f._IO_write_ptr = '\0';
|
||||
|
@ -80,7 +80,7 @@ ___vsprintf_chk (char *s, int flags, size_t slen, const char *format,
|
||||
if (flags > 0)
|
||||
f._sbf._f._flags2 |= _IO_FLAGS2_FORTIFY;
|
||||
|
||||
ret = _IO_vfprintf (&f._sbf._f, format, args);
|
||||
ret = __vfprintf_internal (&f._sbf._f, format, args, 0);
|
||||
|
||||
*f._sbf._f._IO_write_ptr = '\0';
|
||||
return ret;
|
||||
|
@ -59,7 +59,7 @@ __vswprintf_chk (wchar_t *s, size_t maxlen, int flags, size_t slen,
|
||||
sf.f._sbf._f._flags2 |= _IO_FLAGS2_FORTIFY;
|
||||
|
||||
_IO_wstr_init_static (&sf.f._sbf._f, s, maxlen - 1, s);
|
||||
ret = _IO_vfwprintf ((FILE *) &sf.f._sbf, format, args);
|
||||
ret = __vfwprintf_internal ((FILE *) &sf.f._sbf, format, args, 0);
|
||||
|
||||
if (sf.f._sbf._f._wide_data->_IO_buf_base == sf.overflow_buf)
|
||||
/* ISO C99 requires swprintf/vswprintf to return an error if the
|
||||
|
@ -31,7 +31,7 @@ __vwprintf_chk (int flag, const wchar_t *format, va_list ap)
|
||||
if (flag > 0)
|
||||
stdout->_flags2 |= _IO_FLAGS2_FORTIFY;
|
||||
|
||||
done = _IO_vfwprintf (stdout, format, ap);
|
||||
done = __vfwprintf_internal (stdout, format, ap, 0);
|
||||
|
||||
if (flag > 0)
|
||||
stdout->_flags2 &= ~_IO_FLAGS2_FORTIFY;
|
||||
|
@ -33,7 +33,7 @@ __wprintf_chk (int flag, const wchar_t *format, ...)
|
||||
stdout->_flags2 |= _IO_FLAGS2_FORTIFY;
|
||||
|
||||
va_start (ap, format);
|
||||
done = _IO_vfwprintf (stdout, format, ap);
|
||||
done = __vfwprintf_internal (stdout, format, ap, 0);
|
||||
va_end (ap);
|
||||
|
||||
if (flag > 0)
|
||||
|
@ -53,7 +53,7 @@ vpprintf (io_t port, const char *format, va_list arg)
|
||||
_IO_cookie_init (&temp_f.cfile, _IO_NO_READS,
|
||||
(void *) port, (cookie_io_functions_t) { write: do_write });
|
||||
|
||||
done = _IO_vfprintf (&temp_f.cfile.__fp.file, format, arg);
|
||||
done = __vfprintf_internal (&temp_f.cfile.__fp.file, format, arg, 0);
|
||||
|
||||
return done;
|
||||
}
|
||||
|
@ -14,9 +14,6 @@ extern int __snprintf (char *__restrict __s, size_t __maxlen,
|
||||
const char *__restrict __format, ...)
|
||||
__attribute__ ((__format__ (__printf__, 3, 4)));
|
||||
libc_hidden_proto (__snprintf)
|
||||
extern int __vsnprintf (char *__restrict __s, size_t __maxlen,
|
||||
const char *__restrict __format, __gnuc_va_list __arg)
|
||||
__attribute__ ((__format__ (__printf__, 3, 0)));
|
||||
extern int __vfscanf (FILE *__restrict __s,
|
||||
const char *__restrict __format,
|
||||
__gnuc_va_list __arg)
|
||||
|
@ -203,20 +203,10 @@ extern int __vfwscanf (__FILE *__restrict __s,
|
||||
__gnuc_va_list __arg)
|
||||
attribute_hidden
|
||||
/* __attribute__ ((__format__ (__wscanf__, 2, 0)) */;
|
||||
extern int __vswprintf (wchar_t *__restrict __s, size_t __n,
|
||||
const wchar_t *__restrict __format,
|
||||
__gnuc_va_list __arg)
|
||||
attribute_hidden
|
||||
/* __attribute__ ((__format__ (__wprintf__, 3, 0))) */;
|
||||
extern int __fwprintf (__FILE *__restrict __s,
|
||||
const wchar_t *__restrict __format, ...)
|
||||
attribute_hidden
|
||||
/* __attribute__ ((__format__ (__wprintf__, 2, 3))) */;
|
||||
extern int __vfwprintf (__FILE *__restrict __s,
|
||||
const wchar_t *__restrict __format,
|
||||
__gnuc_va_list __arg)
|
||||
attribute_hidden
|
||||
/* __attribute__ ((__format__ (__wprintf__, 2, 0))) */;
|
||||
extern int __vfwprintf_chk (FILE *__restrict __s, int __flag,
|
||||
const wchar_t *__restrict __format,
|
||||
__gnuc_va_list __arg)
|
||||
|
@ -30,7 +30,7 @@ __fwprintf (FILE *stream, const wchar_t *format, ...)
|
||||
int done;
|
||||
|
||||
va_start (arg, format);
|
||||
done = __vfwprintf (stream, format, arg);
|
||||
done = __vfwprintf_internal (stream, format, arg, 0);
|
||||
va_end (arg);
|
||||
|
||||
return done;
|
||||
|
@ -51,15 +51,7 @@ extern int _IO_sscanf (const char*, const char*, ...) __THROW;
|
||||
extern int _IO_sprintf (char *, const char*, ...) __THROW;
|
||||
extern int _IO_ungetc (int, FILE*) __THROW;
|
||||
extern int _IO_vsscanf (const char *, const char *, __gnuc_va_list) __THROW;
|
||||
extern int _IO_vsprintf (char*, const char*, __gnuc_va_list) __THROW;
|
||||
libc_hidden_proto (_IO_vsprintf)
|
||||
extern int _IO_vswprintf (wchar_t*, size_t, const wchar_t*, __gnuc_va_list)
|
||||
__THROW;
|
||||
|
||||
struct obstack;
|
||||
extern int _IO_obstack_vprintf (struct obstack *, const char *, __gnuc_va_list)
|
||||
__THROW;
|
||||
extern int _IO_obstack_printf (struct obstack *, const char *, ...) __THROW;
|
||||
#define _IO_clearerr(FP) ((FP)->_flags &= ~(_IO_ERR_SEEN|_IO_EOF_SEEN))
|
||||
#define _IO_fseek(__fp, __offset, __whence) \
|
||||
(_IO_seekoff_unlocked (__fp, __offset, __whence, _IOS_INPUT|_IOS_OUTPUT) \
|
||||
|
@ -28,7 +28,8 @@
|
||||
#include <stdio_ext.h>
|
||||
|
||||
int
|
||||
_IO_vdprintf (int d, const char *format, va_list arg)
|
||||
__vdprintf_internal (int d, const char *format, va_list arg,
|
||||
unsigned int mode_flags)
|
||||
{
|
||||
struct _IO_FILE_plus tmpfil;
|
||||
struct _IO_wide_data wd;
|
||||
@ -50,7 +51,7 @@ _IO_vdprintf (int d, const char *format, va_list arg)
|
||||
_IO_mask_flags (&tmpfil.file, _IO_NO_READS,
|
||||
_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
|
||||
|
||||
done = _IO_vfprintf (&tmpfil.file, format, arg);
|
||||
done = __vfprintf_internal (&tmpfil.file, format, arg, mode_flags);
|
||||
|
||||
if (done != EOF && _IO_do_flush (&tmpfil.file) == EOF)
|
||||
done = EOF;
|
||||
@ -59,4 +60,10 @@ _IO_vdprintf (int d, const char *format, va_list arg)
|
||||
|
||||
return done;
|
||||
}
|
||||
ldbl_weak_alias (_IO_vdprintf, vdprintf)
|
||||
|
||||
int
|
||||
__vdprintf (int d, const char *format, va_list arg)
|
||||
{
|
||||
return __vdprintf_internal (d, format, arg, 0);
|
||||
}
|
||||
ldbl_weak_alias (__vdprintf, vdprintf)
|
||||
|
@ -28,7 +28,8 @@
|
||||
#include "strfile.h"
|
||||
|
||||
int
|
||||
__IO_vsprintf (char *string, const char *format, va_list args)
|
||||
__vsprintf_internal (char *string, const char *format, va_list args,
|
||||
unsigned int mode_flags)
|
||||
{
|
||||
_IO_strfile sf;
|
||||
int ret;
|
||||
@ -39,11 +40,16 @@ __IO_vsprintf (char *string, const char *format, va_list args)
|
||||
_IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
|
||||
_IO_JUMPS (&sf._sbf) = &_IO_str_jumps;
|
||||
_IO_str_init_static_internal (&sf, string, -1, string);
|
||||
ret = _IO_vfprintf (&sf._sbf._f, format, args);
|
||||
ret = __vfprintf_internal (&sf._sbf._f, format, args, mode_flags);
|
||||
_IO_putc_unlocked ('\0', &sf._sbf._f);
|
||||
return ret;
|
||||
}
|
||||
ldbl_hidden_def (__IO_vsprintf, _IO_vsprintf)
|
||||
|
||||
ldbl_strong_alias (__IO_vsprintf, _IO_vsprintf)
|
||||
ldbl_weak_alias (__IO_vsprintf, vsprintf)
|
||||
int
|
||||
__vsprintf (char *string, const char *format, va_list args)
|
||||
{
|
||||
return __vsprintf_internal (string, format, args, 0);
|
||||
}
|
||||
|
||||
ldbl_strong_alias (__vsprintf, _IO_vsprintf)
|
||||
ldbl_weak_alias (__vsprintf, vsprintf)
|
||||
|
@ -255,8 +255,6 @@ extern int _IO_ftrylockfile (FILE *) __THROW;
|
||||
|
||||
extern int _IO_vfscanf (FILE * __restrict, const char * __restrict,
|
||||
__gnuc_va_list, int *__restrict);
|
||||
extern int _IO_vfprintf (FILE *__restrict, const char *__restrict,
|
||||
__gnuc_va_list);
|
||||
extern __ssize_t _IO_padn (FILE *, int, __ssize_t);
|
||||
extern size_t _IO_sgetn (FILE *, void *, size_t);
|
||||
|
||||
@ -298,8 +296,6 @@ weak_extern (_IO_stdin_used);
|
||||
|
||||
extern int _IO_vfwscanf (FILE * __restrict, const wchar_t * __restrict,
|
||||
__gnuc_va_list, int *__restrict);
|
||||
extern int _IO_vfwprintf (FILE *__restrict, const wchar_t *__restrict,
|
||||
__gnuc_va_list);
|
||||
extern __ssize_t _IO_wpadn (FILE *, wint_t, __ssize_t);
|
||||
extern void _IO_free_wbackup_area (FILE *) __THROW;
|
||||
|
||||
@ -319,7 +315,6 @@ libc_hidden_proto (_IO_free_wbackup_area)
|
||||
libc_hidden_proto (_IO_padn)
|
||||
libc_hidden_proto (_IO_putc)
|
||||
libc_hidden_proto (_IO_sgetn)
|
||||
libc_hidden_proto (_IO_vfprintf)
|
||||
|
||||
#ifdef _IO_MTSAFE_IO
|
||||
# undef _IO_peekc
|
||||
|
@ -658,12 +658,49 @@ extern off64_t _IO_wstr_seekoff (FILE *, off64_t, int, int)
|
||||
extern wint_t _IO_wstr_pbackfail (FILE *, wint_t) __THROW;
|
||||
extern void _IO_wstr_finish (FILE *, int) __THROW;
|
||||
|
||||
extern int _IO_vasprintf (char **result_ptr, const char *format,
|
||||
va_list args) __THROW;
|
||||
extern int _IO_vdprintf (int d, const char *format, va_list arg);
|
||||
extern int _IO_vsnprintf (char *string, size_t maxlen,
|
||||
const char *format, va_list args) __THROW;
|
||||
/* Internal versions of v*printf that take an additional flags
|
||||
parameter. */
|
||||
extern int __vfprintf_internal (FILE *fp, const char *format, va_list ap,
|
||||
unsigned int mode_flags)
|
||||
attribute_hidden;
|
||||
extern int __vfwprintf_internal (FILE *fp, const wchar_t *format, va_list ap,
|
||||
unsigned int mode_flags)
|
||||
attribute_hidden;
|
||||
|
||||
extern int __vasprintf_internal (char **result_ptr, const char *format,
|
||||
va_list ap, unsigned int mode_flags)
|
||||
attribute_hidden;
|
||||
extern int __vdprintf_internal (int d, const char *format, va_list ap,
|
||||
unsigned int mode_flags)
|
||||
attribute_hidden;
|
||||
extern int __obstack_vprintf_internal (struct obstack *ob, const char *fmt,
|
||||
va_list ap, unsigned int mode_flags)
|
||||
attribute_hidden;
|
||||
|
||||
extern int __vsprintf_internal (char *string, const char *format, va_list ap,
|
||||
unsigned int mode_flags)
|
||||
attribute_hidden;
|
||||
extern int __vsnprintf_internal (char *string, size_t maxlen,
|
||||
const char *format, va_list ap,
|
||||
unsigned int mode_flags)
|
||||
attribute_hidden;
|
||||
extern int __vswprintf_internal (wchar_t *string, size_t maxlen,
|
||||
const wchar_t *format, va_list ap,
|
||||
unsigned int mode_flags)
|
||||
attribute_hidden;
|
||||
|
||||
/* Flags for __v*printf_internal.
|
||||
|
||||
PRINTF_LDBL_IS_DBL indicates whether long double values are to be
|
||||
handled as having the same format as double, in which case the flag
|
||||
should be set to one, or as another format, otherwise.
|
||||
|
||||
PRINTF_FORTIFY, when set to one, indicates that fortification checks
|
||||
are to be performed in input parameters. This is used by the
|
||||
__*printf_chk functions, which are used when _FORTIFY_SOURCE is
|
||||
defined to 1 or 2. Otherwise, such checks are ignored. */
|
||||
#define PRINTF_LDBL_IS_DBL 0x0001
|
||||
#define PRINTF_FORTIFY 0x0002
|
||||
|
||||
extern size_t _IO_getline (FILE *,char *, size_t, int, int);
|
||||
libc_hidden_proto (_IO_getline)
|
||||
|
@ -117,7 +117,8 @@ const struct _IO_jump_t _IO_obstack_jumps libio_vtable attribute_hidden =
|
||||
|
||||
|
||||
int
|
||||
_IO_obstack_vprintf (struct obstack *obstack, const char *format, va_list args)
|
||||
__obstack_vprintf_internal (struct obstack *obstack, const char *format,
|
||||
va_list args, unsigned int mode_flags)
|
||||
{
|
||||
struct obstack_FILE
|
||||
{
|
||||
@ -164,7 +165,8 @@ _IO_obstack_vprintf (struct obstack *obstack, const char *format, va_list args)
|
||||
|
||||
new_f.ofile.obstack = obstack;
|
||||
|
||||
result = _IO_vfprintf (&new_f.ofile.file.file, format, args);
|
||||
result = __vfprintf_internal (&new_f.ofile.file.file, format, args,
|
||||
mode_flags);
|
||||
|
||||
/* Shrink the buffer to the space we really currently need. */
|
||||
obstack_blank_fast (obstack, (new_f.ofile.file.file._IO_write_ptr
|
||||
@ -172,17 +174,22 @@ _IO_obstack_vprintf (struct obstack *obstack, const char *format, va_list args)
|
||||
|
||||
return result;
|
||||
}
|
||||
ldbl_weak_alias (_IO_obstack_vprintf, obstack_vprintf)
|
||||
|
||||
|
||||
int
|
||||
_IO_obstack_printf (struct obstack *obstack, const char *format, ...)
|
||||
__obstack_vprintf (struct obstack *obstack, const char *format, va_list ap)
|
||||
{
|
||||
return __obstack_vprintf_internal (obstack, format, ap, 0);
|
||||
}
|
||||
ldbl_weak_alias (__obstack_vprintf, obstack_vprintf)
|
||||
|
||||
int
|
||||
__obstack_printf (struct obstack *obstack, const char *format, ...)
|
||||
{
|
||||
int result;
|
||||
va_list ap;
|
||||
va_start (ap, format);
|
||||
result = _IO_obstack_vprintf (obstack, format, ap);
|
||||
result = __obstack_vprintf_internal (obstack, format, ap, 0);
|
||||
va_end (ap);
|
||||
return result;
|
||||
}
|
||||
ldbl_weak_alias (_IO_obstack_printf, obstack_printf)
|
||||
ldbl_weak_alias (__obstack_printf, obstack_printf)
|
||||
|
@ -28,7 +28,7 @@ __swprintf (wchar_t *s, size_t n, const wchar_t *format, ...)
|
||||
int done;
|
||||
|
||||
va_start (arg, format);
|
||||
done = __vswprintf (s, n, format, arg);
|
||||
done = __vswprintf_internal (s, n, format, arg, 0);
|
||||
va_end (arg);
|
||||
|
||||
return done;
|
||||
|
@ -24,15 +24,13 @@
|
||||
This exception applies to code released by its copyright holders
|
||||
in files containing the exception. */
|
||||
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include "libioP.h"
|
||||
#include "stdio.h"
|
||||
#include <stdio_ext.h>
|
||||
#include "strfile.h"
|
||||
#include <stdlib.h>
|
||||
#include <strfile.h>
|
||||
|
||||
int
|
||||
_IO_vasprintf (char **result_ptr, const char *format, va_list args)
|
||||
__vasprintf_internal (char **result_ptr, const char *format, va_list args,
|
||||
unsigned int mode_flags)
|
||||
{
|
||||
/* Initial size of the buffer to be used. Will be doubled each time an
|
||||
overflow occurs. */
|
||||
@ -56,7 +54,7 @@ _IO_vasprintf (char **result_ptr, const char *format, va_list args)
|
||||
sf._sbf._f._flags &= ~_IO_USER_BUF;
|
||||
sf._s._allocate_buffer_unused = (_IO_alloc_type) malloc;
|
||||
sf._s._free_buffer_unused = (_IO_free_type) free;
|
||||
ret = _IO_vfprintf (&sf._sbf._f, format, args);
|
||||
ret = __vfprintf_internal (&sf._sbf._f, format, args, mode_flags);
|
||||
if (ret < 0)
|
||||
{
|
||||
free (sf._sbf._f._IO_buf_base);
|
||||
@ -85,4 +83,10 @@ _IO_vasprintf (char **result_ptr, const char *format, va_list args)
|
||||
(*result_ptr)[needed - 1] = '\0';
|
||||
return ret;
|
||||
}
|
||||
ldbl_weak_alias (_IO_vasprintf, vasprintf)
|
||||
|
||||
int
|
||||
__vasprintf (char **result_ptr, const char *format, va_list args)
|
||||
{
|
||||
return __vasprintf_internal (result_ptr, format, args, 0);
|
||||
}
|
||||
ldbl_weak_alias (__vasprintf, vasprintf)
|
||||
|
@ -90,8 +90,8 @@ const struct _IO_jump_t _IO_strn_jumps libio_vtable attribute_hidden =
|
||||
|
||||
|
||||
int
|
||||
_IO_vsnprintf (char *string, size_t maxlen, const char *format,
|
||||
va_list args)
|
||||
__vsnprintf_internal (char *string, size_t maxlen, const char *format,
|
||||
va_list args, unsigned int mode_flags)
|
||||
{
|
||||
_IO_strnfile sf;
|
||||
int ret;
|
||||
@ -111,11 +111,17 @@ _IO_vsnprintf (char *string, size_t maxlen, const char *format,
|
||||
_IO_JUMPS (&sf.f._sbf) = &_IO_strn_jumps;
|
||||
string[0] = '\0';
|
||||
_IO_str_init_static_internal (&sf.f, string, maxlen - 1, string);
|
||||
ret = _IO_vfprintf (&sf.f._sbf._f, format, args);
|
||||
ret = __vfprintf_internal (&sf.f._sbf._f, format, args, mode_flags);
|
||||
|
||||
if (sf.f._sbf._f._IO_buf_base != sf.overflow_buf)
|
||||
*sf.f._sbf._f._IO_write_ptr = '\0';
|
||||
return ret;
|
||||
}
|
||||
ldbl_weak_alias (_IO_vsnprintf, __vsnprintf)
|
||||
ldbl_weak_alias (_IO_vsnprintf, vsnprintf)
|
||||
|
||||
int
|
||||
___vsnprintf (char *string, size_t maxlen, const char *format, va_list args)
|
||||
{
|
||||
return __vsnprintf_internal (string, maxlen, format, args, 0);
|
||||
}
|
||||
ldbl_weak_alias (___vsnprintf, __vsnprintf)
|
||||
ldbl_weak_alias (___vsnprintf, vsnprintf)
|
||||
|
@ -89,8 +89,8 @@ const struct _IO_jump_t _IO_wstrn_jumps libio_vtable attribute_hidden =
|
||||
|
||||
|
||||
int
|
||||
_IO_vswprintf (wchar_t *string, size_t maxlen, const wchar_t *format,
|
||||
va_list args)
|
||||
__vswprintf_internal (wchar_t *string, size_t maxlen, const wchar_t *format,
|
||||
va_list args, unsigned int mode_flags)
|
||||
{
|
||||
_IO_wstrnfile sf;
|
||||
int ret;
|
||||
@ -108,7 +108,7 @@ _IO_vswprintf (wchar_t *string, size_t maxlen, const wchar_t *format,
|
||||
_IO_fwide (&sf.f._sbf._f, 1);
|
||||
string[0] = L'\0';
|
||||
_IO_wstr_init_static (&sf.f._sbf._f, string, maxlen - 1, string);
|
||||
ret = _IO_vfwprintf ((FILE *) &sf.f._sbf, format, args);
|
||||
ret = __vfwprintf_internal ((FILE *) &sf.f._sbf, format, args, mode_flags);
|
||||
|
||||
if (sf.f._sbf._f._wide_data->_IO_buf_base == sf.overflow_buf)
|
||||
/* ISO C99 requires swprintf/vswprintf to return an error if the
|
||||
@ -120,5 +120,11 @@ _IO_vswprintf (wchar_t *string, size_t maxlen, const wchar_t *format,
|
||||
|
||||
return ret;
|
||||
}
|
||||
weak_alias (_IO_vswprintf, __vswprintf)
|
||||
ldbl_weak_alias (_IO_vswprintf, vswprintf)
|
||||
|
||||
int
|
||||
__vswprintf (wchar_t *string, size_t maxlen, const wchar_t *format,
|
||||
va_list args)
|
||||
{
|
||||
return __vswprintf_internal (string, maxlen, format, args, 0);
|
||||
}
|
||||
ldbl_weak_alias (__vswprintf, vswprintf)
|
||||
|
@ -25,6 +25,6 @@
|
||||
int
|
||||
__vwprintf (const wchar_t *format, __gnuc_va_list arg)
|
||||
{
|
||||
return __vfwprintf (stdout, format, arg);
|
||||
return __vfwprintf_internal (stdout, format, arg, 0);
|
||||
}
|
||||
ldbl_strong_alias (__vwprintf, vwprintf)
|
||||
|
@ -29,7 +29,7 @@ __wprintf (const wchar_t *format, ...)
|
||||
int done;
|
||||
|
||||
va_start (arg, format);
|
||||
done = __vfwprintf (stdout, format, arg);
|
||||
done = __vfwprintf_internal (stdout, format, arg, 0);
|
||||
va_end (arg);
|
||||
|
||||
return done;
|
||||
|
@ -40,7 +40,8 @@ routines := \
|
||||
isoc99_scanf isoc99_vscanf isoc99_fscanf isoc99_vfscanf isoc99_sscanf \
|
||||
isoc99_vsscanf \
|
||||
psiginfo gentempfd \
|
||||
vfscanf-internal vfwscanf-internal iovfscanf iovfwscanf
|
||||
vfscanf-internal vfwscanf-internal iovfscanf iovfwscanf \
|
||||
vfprintf-internal vfwprintf-internal
|
||||
|
||||
aux := errlist siglist printf-parsemb printf-parsewc fxprintf
|
||||
|
||||
|
@ -16,11 +16,7 @@
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <libioP.h>
|
||||
#define vasprintf(s, f, a) _IO_vasprintf (s, f, a)
|
||||
#undef __asprintf
|
||||
|
||||
/* Write formatted output from FORMAT to a string which is
|
||||
allocated with malloc and stored in *STRING_PTR. */
|
||||
@ -32,7 +28,7 @@ ___asprintf (char **string_ptr, const char *format, ...)
|
||||
int done;
|
||||
|
||||
va_start (arg, format);
|
||||
done = vasprintf (string_ptr, format, arg);
|
||||
done = __vasprintf_internal (string_ptr, format, arg, 0);
|
||||
va_end (arg);
|
||||
|
||||
return done;
|
||||
|
@ -16,10 +16,7 @@
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <libioP.h>
|
||||
#define vdprintf(d, f, a) _IO_vdprintf (d, f, a)
|
||||
|
||||
/* Write formatted output to D, according to the format string FORMAT. */
|
||||
/* VARARGS2 */
|
||||
@ -30,7 +27,7 @@ __dprintf (int d, const char *format, ...)
|
||||
int done;
|
||||
|
||||
va_start (arg, format);
|
||||
done = vdprintf (d, format, arg);
|
||||
done = __vdprintf_internal (d, format, arg, 0);
|
||||
va_end (arg);
|
||||
|
||||
return done;
|
||||
|
@ -29,7 +29,7 @@ __fprintf (FILE *stream, const char *format, ...)
|
||||
int done;
|
||||
|
||||
va_start (arg, format);
|
||||
done = vfprintf (stream, format, arg);
|
||||
done = __vfprintf_internal (stream, format, arg, 0);
|
||||
va_end (arg);
|
||||
|
||||
return done;
|
||||
|
@ -27,7 +27,7 @@ static int
|
||||
locked_vfxprintf (FILE *fp, const char *fmt, va_list ap)
|
||||
{
|
||||
if (_IO_fwide (fp, 0) <= 0)
|
||||
return _IO_vfprintf (fp, fmt, ap);
|
||||
return __vfprintf_internal (fp, fmt, ap, 0);
|
||||
|
||||
/* We must convert the narrow format string to a wide one.
|
||||
Each byte can produce at most one wide character. */
|
||||
@ -53,7 +53,7 @@ locked_vfxprintf (FILE *fp, const char *fmt, va_list ap)
|
||||
res = __mbsrtowcs (wfmt, &fmt, len, &mbstate);
|
||||
|
||||
if (res != -1)
|
||||
res = _IO_vfwprintf (fp, wfmt, ap);
|
||||
res = __vfwprintf_internal (fp, wfmt, ap, 0);
|
||||
|
||||
if (used_malloc)
|
||||
free (wfmt);
|
||||
|
@ -30,7 +30,7 @@ __printf (const char *format, ...)
|
||||
int done;
|
||||
|
||||
va_start (arg, format);
|
||||
done = vfprintf (stdout, format, arg);
|
||||
done = __vfprintf_internal (stdout, format, arg, 0);
|
||||
va_end (arg);
|
||||
|
||||
return done;
|
||||
@ -38,5 +38,4 @@ __printf (const char *format, ...)
|
||||
|
||||
#undef _IO_printf
|
||||
ldbl_strong_alias (__printf, printf);
|
||||
/* This is for libg++. */
|
||||
ldbl_strong_alias (__printf, _IO_printf);
|
||||
|
@ -16,9 +16,7 @@
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <libioP.h>
|
||||
#define __vsnprintf(s, l, f, a) _IO_vsnprintf (s, l, f, a)
|
||||
|
||||
/* Write formatted output into S, according to the format
|
||||
string FORMAT, writing no more than MAXLEN characters. */
|
||||
@ -30,7 +28,7 @@ __snprintf (char *s, size_t maxlen, const char *format, ...)
|
||||
int done;
|
||||
|
||||
va_start (arg, format);
|
||||
done = __vsnprintf (s, maxlen, format, arg);
|
||||
done = __vsnprintf_internal (s, maxlen, format, arg, 0);
|
||||
va_end (arg);
|
||||
|
||||
return done;
|
||||
|
@ -16,9 +16,7 @@
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <libioP.h>
|
||||
#define vsprintf(s, f, a) _IO_vsprintf (s, f, a)
|
||||
|
||||
/* Write formatted output into S, according to the format string FORMAT. */
|
||||
/* VARARGS2 */
|
||||
@ -29,7 +27,7 @@ __sprintf (char *s, const char *format, ...)
|
||||
int done;
|
||||
|
||||
va_start (arg, format);
|
||||
done = vsprintf (s, format, arg);
|
||||
done = __vsprintf_internal (s, format, arg, 0);
|
||||
va_end (arg);
|
||||
|
||||
return done;
|
||||
|
2364
stdio-common/vfprintf-internal.c
Normal file
2364
stdio-common/vfprintf-internal.c
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
2
stdio-common/vfwprintf-internal.c
Normal file
2
stdio-common/vfwprintf-internal.c
Normal file
@ -0,0 +1,2 @@
|
||||
#define COMPILE_WPRINTF 1
|
||||
#include "vfprintf-internal.c"
|
@ -1,3 +1,25 @@
|
||||
#include <wctype.h>
|
||||
#define COMPILE_WPRINTF 1
|
||||
#include "vfprintf.c"
|
||||
/* Copyright (C) 1991-2018 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <libio/libioP.h>
|
||||
|
||||
extern int
|
||||
__vfwprintf (FILE *fp, const wchar_t *format, va_list ap)
|
||||
{
|
||||
return __vfwprintf_internal (fp, format, ap, 0);
|
||||
}
|
||||
ldbl_weak_alias (__vfwprintf, vfwprintf);
|
||||
|
@ -25,9 +25,9 @@
|
||||
/* Write formatted output to stdout according to the
|
||||
format string FORMAT, using the argument list in ARG. */
|
||||
int
|
||||
__vprintf (const char *format, __gnuc_va_list arg)
|
||||
__vprintf (const char *format, va_list ap)
|
||||
{
|
||||
return vfprintf (stdout, format, arg);
|
||||
return __vfprintf_internal (stdout, format, ap, 0);
|
||||
}
|
||||
|
||||
ldbl_strong_alias (__vprintf, vprintf)
|
||||
|
@ -106,7 +106,7 @@ STRFROM (char *dest, size_t size, const char *format, FLOAT f)
|
||||
}
|
||||
|
||||
/* The following code to prepare the virtual file has been adapted from the
|
||||
function _IO_vsnprintf from libio. */
|
||||
function __vsnprintf_internal from libio. */
|
||||
|
||||
if (size == 0)
|
||||
{
|
||||
|
@ -166,7 +166,7 @@ __nldbl_vfprintf (FILE *s, const char *fmt, va_list ap)
|
||||
{
|
||||
int done;
|
||||
set_no_long_double ();
|
||||
done = _IO_vfprintf (s, fmt, ap);
|
||||
done = __vfprintf_internal (s, fmt, ap, 0);
|
||||
clear_no_long_double ();
|
||||
return done;
|
||||
}
|
||||
@ -175,15 +175,16 @@ strong_alias (__nldbl_vfprintf, __nldbl__IO_vfprintf)
|
||||
|
||||
int
|
||||
attribute_compat_text_section
|
||||
__nldbl__IO_vsprintf (char *string, const char *fmt, va_list ap)
|
||||
__nldbl___vsprintf (char *string, const char *fmt, va_list ap)
|
||||
{
|
||||
int done;
|
||||
__no_long_double = 1;
|
||||
done = _IO_vsprintf (string, fmt, ap);
|
||||
done = __vsprintf_internal (string, fmt, ap, 0);
|
||||
__no_long_double = 0;
|
||||
return done;
|
||||
}
|
||||
weak_alias (__nldbl__IO_vsprintf, __nldbl_vsprintf)
|
||||
strong_alias (__nldbl___vsprintf, __nldbl__IO_vsprintf)
|
||||
weak_alias (__nldbl___vsprintf, __nldbl_vsprintf)
|
||||
libc_hidden_def (__nldbl_vsprintf)
|
||||
|
||||
int
|
||||
@ -193,7 +194,7 @@ __nldbl_obstack_vprintf (struct obstack *obstack, const char *fmt,
|
||||
{
|
||||
int done;
|
||||
__no_long_double = 1;
|
||||
done = _IO_obstack_vprintf (obstack, fmt, ap);
|
||||
done = __obstack_vprintf_internal (obstack, fmt, ap, 0);
|
||||
__no_long_double = 0;
|
||||
return done;
|
||||
}
|
||||
@ -245,7 +246,7 @@ __nldbl_vasprintf (char **result_ptr, const char *fmt, va_list ap)
|
||||
{
|
||||
int res;
|
||||
__no_long_double = 1;
|
||||
res = _IO_vasprintf (result_ptr, fmt, ap);
|
||||
res = __vasprintf_internal (result_ptr, fmt, ap, 0);
|
||||
__no_long_double = 0;
|
||||
return res;
|
||||
}
|
||||
@ -257,7 +258,7 @@ __nldbl_vdprintf (int d, const char *fmt, va_list arg)
|
||||
{
|
||||
int res;
|
||||
set_no_long_double ();
|
||||
res = _IO_vdprintf (d, fmt, arg);
|
||||
res = __vdprintf_internal (d, fmt, arg, 0);
|
||||
clear_no_long_double ();
|
||||
return res;
|
||||
}
|
||||
@ -269,7 +270,7 @@ __nldbl_vfwprintf (FILE *s, const wchar_t *fmt, va_list ap)
|
||||
{
|
||||
int res;
|
||||
set_no_long_double ();
|
||||
res = _IO_vfwprintf (s, fmt, ap);
|
||||
res = __vfwprintf_internal (s, fmt, ap, 0);
|
||||
clear_no_long_double ();
|
||||
return res;
|
||||
}
|
||||
@ -289,7 +290,7 @@ __nldbl_vsnprintf (char *string, size_t maxlen, const char *fmt,
|
||||
{
|
||||
int res;
|
||||
__no_long_double = 1;
|
||||
res = _IO_vsnprintf (string, maxlen, fmt, ap);
|
||||
res = __vsnprintf_internal (string, maxlen, fmt, ap, 0);
|
||||
__no_long_double = 0;
|
||||
return res;
|
||||
}
|
||||
@ -303,7 +304,7 @@ __nldbl_vswprintf (wchar_t *string, size_t maxlen, const wchar_t *fmt,
|
||||
{
|
||||
int res;
|
||||
__no_long_double = 1;
|
||||
res = _IO_vswprintf (string, maxlen, fmt, ap);
|
||||
res = __vswprintf_internal (string, maxlen, fmt, ap, 0);
|
||||
__no_long_double = 0;
|
||||
return res;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user