1 /* Copyright (C) 2004 Manuel Novoa III <mjn3@codepoet.org>
3 * GNU Library General Public License (LGPL) version 2 or later.
5 * Dedicated to Toni. See uClibc/DEDICATION.mjn3 for details.
11 libc_hidden_proto(vfprintf)
12 libc_hidden_proto(fflush_unlocked)
14 int vdprintf(int filedes, const char * __restrict format, va_list arg)
18 #ifdef __STDIO_BUFFERS
19 char buf[64]; /* TODO: provide _optional_ buffering? */
21 f.__bufend = buf + sizeof(buf);
23 __STDIO_STREAM_DISABLE_GETC(&f);
24 __STDIO_STREAM_DISABLE_PUTC(&f);
25 __STDIO_STREAM_INIT_BUFREAD_BUFPOS(&f);
28 /* __STDIO_STREAM_RESET_GCS(&f); */
29 #ifdef __UCLIBC_HAS_GLIBC_CUSTOM_STREAMS__
30 f.__cookie = &(f.__filedes);
32 f.__gcs.write = _cs_write;
37 f.__filedes = filedes;
38 f.__modeflags = (__FLAG_NARROW|__FLAG_WRITEONLY|__FLAG_WRITING);
40 #ifdef __UCLIBC_HAS_WCHAR__
41 f.__ungot_width[0] = 0;
42 #endif /* __UCLIBC_HAS_WCHAR__ */
43 #ifdef __STDIO_MBSTATE
44 __INIT_MBSTATE(&(f.__state));
45 #endif /* __STDIO_MBSTATE */
47 #ifdef __UCLIBC_HAS_THREADS__
48 f.__user_locking = 1; /* Set user locking. */
49 __stdio_init_mutex(&f.__lock);
53 rv = vfprintf(&f, format, arg);
55 #ifdef __STDIO_BUFFERS
56 /* If not buffering, then fflush is unnecessary. */
57 if ((rv > 0) && fflush_unlocked(&f)) {
66 libc_hidden_proto(vdprintf)
67 libc_hidden_def(vdprintf)