/* Copyright 2005, 2007 Shaun Jackman * Permission to use, copy, modify, and distribute this software * is freely granted, provided that this notice is preserved. */ /* FUNCTION <>, <>---print to a file descriptor INDEX dprintf INDEX _dprintf_r INDEX vdprintf INDEX _vdprintf_r ANSI_SYNOPSIS #include #include int dprintf(int <[fd]>, const char *restrict <[format]>, ...); int vdprintf(int <[fd]>, const char *restrict <[format]>, va_list <[ap]>); int _dprintf_r(struct _reent *<[ptr]>, int <[fd]>, const char *restrict <[format]>, ...); int _vdprintf_r(struct _reent *<[ptr]>, int <[fd]>, const char *restrict <[format]>, va_list <[ap]>); DESCRIPTION <> and <> allow printing a format, similarly to <>, but write to a file descriptor instead of to a <> stream. The functions <<_dprintf_r>> and <<_vdprintf_r>> are simply reentrant versions of the functions above. RETURNS The return value and errors are exactly as for <>, except that <> may also be set to <> if the heap is exhausted. PORTABILITY This function is originally a GNU extension in glibc and is not portable. Supporting OS subroutines required: <>, <>. */ #include <_ansi.h> #include #include #include #include #include "local.h" int _DEFUN(_dprintf_r, (ptr, fd, format), struct _reent *ptr _AND int fd _AND const char *__restrict format _DOTS) { va_list ap; int n; _REENT_SMALL_CHECK_INIT (ptr); va_start (ap, format); n = _vdprintf_r (ptr, fd, format, ap); va_end (ap); return n; } #ifdef _NANO_FORMATTED_IO int _EXFUN(_diprintf_r, (struct _reent *, int, const char *, ...) _ATTRIBUTE ((__alias__("_dprintf_r")))); #endif #ifndef _REENT_ONLY int _DEFUN(dprintf, (fd, format), int fd _AND const char *__restrict format _DOTS) { va_list ap; int n; struct _reent *ptr = _REENT; _REENT_SMALL_CHECK_INIT (ptr); va_start (ap, format); n = _vdprintf_r (ptr, fd, format, ap); va_end (ap); return n; } #ifdef _NANO_FORMATTED_IO int _EXFUN(diprintf, (int, const char *, ...) _ATTRIBUTE ((__alias__("dprintf")))); #endif #endif /* ! _REENT_ONLY */