1 /* Copyright 2005, 2007 Shaun Jackman
2 * Permission to use, copy, modify, and distribute this software
3 * is freely granted, provided that this notice is preserved.
4 */
5
6 /*
7 FUNCTION
8 <<dprintf>>, <<vdprintf>>---print to a file descriptor
9
10 INDEX
11 dprintf
12 INDEX
13 _dprintf_r
14 INDEX
15 vdprintf
16 INDEX
17 _vdprintf_r
18
19 SYNOPSIS
20 #include <stdio.h>
21 #include <stdarg.h>
22 int dprintf(int <[fd]>, const char *restrict <[format]>, ...);
23 int vdprintf(int <[fd]>, const char *restrict <[format]>,
24 va_list <[ap]>);
25 int dprintf( int <[fd]>,
26 const char *restrict <[format]>, ...);
27 int vdprintf( int <[fd]>,
28 const char *restrict <[format]>, va_list <[ap]>);
29
30 DESCRIPTION
31 <<dprintf>> and <<vdprintf>> allow printing a format, similarly to
32 <<printf>>, but write to a file descriptor instead of to a <<FILE>>
33 stream.
34
35 The functions <<_dprintf_r>> and <<_vdprintf_r>> are simply
36 reentrant versions of the functions above.
37
38 RETURNS
39 The return value and errors are exactly as for <<write>>, except that
40 <<errno>> may also be set to <<ENOMEM>> if the heap is exhausted.
41
42 PORTABILITY
43 This function is originally a GNU extension in glibc and is not portable.
44
45 Supporting OS subroutines required: <<sbrk>>, <<write>>.
46 */
47
48 #define _DEFAULT_SOURCE
49 #include <_ansi.h>
50 #include <stdio.h>
51 #include <unistd.h>
52 #include <stdarg.h>
53 #include "local.h"
54
55 int
dprintf(int fd,const char * __restrict format,...)56 dprintf (int fd,
57 const char *__restrict format, ...)
58 {
59 va_list ap;
60 int n;
61
62 _REENT_SMALL_CHECK_INIT (ptr);
63 va_start (ap, format);
64 n = vdprintf ( fd, format, ap);
65 va_end (ap);
66 return n;
67 }
68
69 #ifdef _NANO_FORMATTED_IO
70 int
71 diprintf (int, const char *, ...)
72 _ATTRIBUTE ((__alias__("dprintf")));
73 #endif
74