1/* Output stream referring to an stdio FILE. 2 Copyright (C) 2006 Free Software Foundation, Inc. 3 Written by Bruno Haible <bruno@clisp.org>, 2006. 4 5 This program is free software: you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 18#include <config.h> 19 20/* Specification. */ 21#include "file-ostream.h" 22 23#include <stdlib.h> 24 25#include "xalloc.h" 26 27struct file_ostream : struct ostream 28{ 29fields: 30 FILE *fp; 31}; 32 33/* Implementation of ostream_t methods. */ 34 35static void 36file_ostream::write_mem (file_ostream_t stream, const void *data, size_t len) 37{ 38 if (len > 0) 39 fwrite (data, 1, len, stream->fp); 40} 41 42static void 43file_ostream::flush (file_ostream_t stream) 44{ 45 /* This ostream has no internal buffer. No need to fflush (stream->fp), 46 since it's external to this ostream. */ 47} 48 49static void 50file_ostream::free (file_ostream_t stream) 51{ 52 free (stream); 53} 54 55/* Constructor. */ 56 57file_ostream_t 58file_ostream_create (FILE *fp) 59{ 60 file_ostream_t stream = XMALLOC (struct file_ostream_representation); 61 62 stream->base.vtable = &file_ostream_vtable; 63 stream->fp = fp; 64 65 return stream; 66} 67