Subversion Repositories Kolibri OS

Rev

Rev 4874 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  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. ANSI_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_r(struct _reent *<[ptr]>, int <[fd]>,
  26.                         const char *restrict <[format]>, ...);
  27.         int _vdprintf_r(struct _reent *<[ptr]>, 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. #include <_ansi.h>
  49. #include <reent.h>
  50. #include <stdio.h>
  51. #include <unistd.h>
  52. #include <stdarg.h>
  53. #include "local.h"
  54.  
  55. int
  56. _DEFUN(_dprintf_r, (ptr, fd, format),
  57.        struct _reent *ptr _AND
  58.        int fd _AND
  59.        const char *__restrict format _DOTS)
  60. {
  61.         va_list ap;
  62.         int n;
  63.         _REENT_SMALL_CHECK_INIT (ptr);
  64.         va_start (ap, format);
  65.         n = _vdprintf_r (ptr, fd, format, ap);
  66.         va_end (ap);
  67.         return n;
  68. }
  69.  
  70. #ifndef _REENT_ONLY
  71.  
  72. int
  73. _DEFUN(dprintf, (fd, format),
  74.        int fd _AND
  75.        const char *__restrict format _DOTS)
  76. {
  77.   va_list ap;
  78.   int n;
  79.   struct _reent *ptr = _REENT;
  80.  
  81.   _REENT_SMALL_CHECK_INIT (ptr);
  82.   va_start (ap, format);
  83.   n = _vdprintf_r (ptr, fd, format, ap);
  84.   va_end (ap);
  85.   return n;
  86. }
  87.  
  88. #endif /* ! _REENT_ONLY */
  89.