1
/* read-file.c -- read file contents into a string
2
Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
3
Written by Simon Josefsson and Bruno Haible.
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, or (at your option)
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.
15
You should have received a copy of the GNU General Public License
16
along with this program; if not, write to the Free Software Foundation,
17
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
21
#include "read-file.h"
23
/* Get realloc, free. */
29
/* Read a STREAM and return a newly allocated string with the content,
30
and set *LENGTH to the length of the string. The string is
31
zero-terminated, but the terminating zero byte is not counted in
32
*LENGTH. On errors, *LENGTH is undefined, errno preserves the
33
values set by system functions (if any), and NULL is returned. */
35
fread_file (FILE * stream, size_t * length)
47
if (size + BUFSIZ + 1 > alloc)
52
if (alloc < size + BUFSIZ + 1)
53
alloc = size + BUFSIZ + 1;
55
new_buf = realloc (buf, alloc);
65
requested = alloc - size - 1;
66
count = fread (buf + size, 1, requested, stream);
69
if (count != requested)
86
internal_read_file (const char *filename, size_t * length, const char *mode)
88
FILE *stream = fopen (filename, mode);
95
out = fread_file (stream, length);
99
if (fclose (stream) != 0)
113
/* Open and read the contents of FILENAME, and return a newly
114
allocated string with the content, and set *LENGTH to the length of
115
the string. The string is zero-terminated, but the terminating
116
zero byte is not counted in *LENGTH. On errors, *LENGTH is
117
undefined, errno preserves the values set by system functions (if
118
any), and NULL is returned. */
120
read_file (const char *filename, size_t * length)
122
return internal_read_file (filename, length, "r");
125
/* Open (on non-POSIX systems, in binary mode) and read the contents
126
of FILENAME, and return a newly allocated string with the content,
127
and set LENGTH to the length of the string. The string is
128
zero-terminated, but the terminating zero byte is not counted in
129
the LENGTH variable. On errors, *LENGTH is undefined, errno
130
preserves the values set by system functions (if any), and NULL is
133
read_binary_file (const char *filename, size_t * length)
135
return internal_read_file (filename, length, "rb");