Imported Upstream version 0.19.7
[platform/upstream/gettext.git] / gettext-tools / gnulib-lib / file-ostream.oo.c
1 /* Output stream referring to an stdio FILE.
2    Copyright (C) 2006, 2015 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
27 struct file_ostream : struct ostream
28 {
29 fields:
30   FILE *fp;
31 };
32
33 /* Implementation of ostream_t methods.  */
34
35 static void
36 file_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
42 static void
43 file_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
49 static void
50 file_ostream::free (file_ostream_t stream)
51 {
52   free (stream);
53 }
54
55 /* Constructor.  */
56
57 file_ostream_t
58 file_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 }