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