1/* vprint.c -- v[fs]printf() for 4.[23] BSD systems. */ 2 3/* Copyright (C) 1987,1989 Free Software Foundation, Inc. 4 5This file is part of GNU Bash, the Bourne Again SHell. 6 7Bash is free software; you can redistribute it and/or modify it under 8the terms of the GNU General Public License as published by the Free 9Software Foundation; either version 2, or (at your option) any later 10version. 11 12Bash is distributed in the hope that it will be useful, but WITHOUT ANY 13WARRANTY; without even the implied warranty of MERCHANTABILITY or 14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15for more details. 16 17You should have received a copy of the GNU General Public License along 18with Bash; see the file COPYING. If not, write to the Free Software 19Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ 20 21#include <config.h> 22 23#if defined (USE_VFPRINTF_EMULATION) 24 25#include <stdio.h> 26 27#if !defined (NULL) 28# if defined (__STDC__) 29# define NULL ((void *)0) 30# else 31# define NULL 0x0 32# endif /* __STDC__ */ 33#endif /* !NULL */ 34 35/* 36 * Beware! Don't trust the value returned by either of these functions; it 37 * seems that pre-4.3-tahoe implementations of _doprnt () return the first 38 * argument, i.e. a char *. 39 */ 40#include <varargs.h> 41 42int 43vfprintf (iop, fmt, ap) 44 FILE *iop; 45 char *fmt; 46 va_list ap; 47{ 48 int len; 49 char localbuf[BUFSIZ]; 50 51 if (iop->_flag & _IONBF) 52 { 53 iop->_flag &= ~_IONBF; 54 iop->_ptr = iop->_base = localbuf; 55 len = _doprnt (fmt, ap, iop); 56 (void) fflush (iop); 57 iop->_flag |= _IONBF; 58 iop->_base = NULL; 59 iop->_bufsiz = 0; 60 iop->_cnt = 0; 61 } 62 else 63 len = _doprnt (fmt, ap, iop); 64 return (ferror (iop) ? EOF : len); 65} 66 67/* 68 * Ditto for vsprintf 69 */ 70int 71vsprintf (str, fmt, ap) 72 char *str, *fmt; 73 va_list ap; 74{ 75 FILE f; 76 int len; 77 78 f._flag = _IOWRT|_IOSTRG; 79 f._ptr = str; 80 f._cnt = 32767; 81 len = _doprnt (fmt, ap, &f); 82 *f._ptr = 0; 83 return (len); 84} 85#endif /* USE_VFPRINTF_EMULATION */ 86