summaryrefslogtreecommitdiffstats
path: root/newlib/libc/stdio/diprintf.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/stdio/diprintf.c')
-rw-r--r--newlib/libc/stdio/diprintf.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/newlib/libc/stdio/diprintf.c b/newlib/libc/stdio/diprintf.c
new file mode 100644
index 000000000..7882e46b2
--- /dev/null
+++ b/newlib/libc/stdio/diprintf.c
@@ -0,0 +1,75 @@
+/* Copyright (C) 2005, 2007 Shaun Jackman
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+/*
+FUNCTION
+<<diprintf>>, <<vdiprintf>>---print to a file descriptor
+
+INDEX
+ diprintf
+INDEX
+ vdiprintf
+
+ANSI_SYNOPSIS
+ #include <stdio.h>
+ #include <stdarg.h>
+ int diprintf(int <[fd]>, const char *<[format]>, ...);
+ int vdiprintf(int <[fd]>, const char *<[format]>, va_list <[ap]>);
+ int _diprintf_r(struct _reent *<[ptr]>, int <[fd]>,
+ const char *<[format]>, ...);
+ int _vidprintf_r(struct _reent *<[ptr]>, int <[fd]>,
+ const char *<[format]>, va_list <[ap]>);
+
+DESCRIPTION
+<<diprintf>> and <<vdiprintf>> are similar to <<dprintf>> and <<vdprintf>>,
+except that only integer format specifiers are processed.
+
+RETURNS
+Similar to <<dprintf>> and <<vdprintf>>.
+
+PORTABILITY
+This set of functions is an integer-only extension, and is not portable.
+
+Supporting OS subroutines required: <<sbrk>>, <<write>>.
+*/
+
+#include <_ansi.h>
+#include <reent.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdarg.h>
+
+int
+_DEFUN(_diprintf_r, (ptr, fd, format),
+ struct _reent *ptr _AND
+ int fd _AND
+ const char *format _DOTS)
+{
+ va_list ap;
+ int n;
+
+ va_start (ap, format);
+ n = _vdiprintf_r (ptr, fd, format, ap);
+ va_end (ap);
+ return n;
+}
+
+#ifndef _REENT_ONLY
+
+int
+_DEFUN(diprintf, (fd, format),
+ int fd _AND
+ const char *format _DOTS)
+{
+ va_list ap;
+ int n;
+
+ va_start (ap, format);
+ n = _vdiprintf_r (_REENT, fd, format, ap);
+ va_end (ap);
+ return n;
+}
+
+#endif /* ! _REENT_ONLY */