Introduce xrealloc, use it.

2014-05-26  Janne Blomqvist  <jb@gcc.gnu.org>

	* libgfortran.h (xrealloc): New prototype.
	* runtime/memory.c (xrealloc): New function.
	* io/fbuf.c (fbuf_alloc): Use xrealloc.
	* io/list_read.c (push_char_default): Likewise.
	(push_char4): Likewise.

From-SVN: r210948
This commit is contained in:
Janne Blomqvist 2014-05-26 23:56:45 +03:00
parent b4fb1c2135
commit d74fd3c72b
5 changed files with 30 additions and 14 deletions

View File

@ -1,3 +1,11 @@
2014-05-26 Janne Blomqvist <jb@gcc.gnu.org>
* libgfortran.h (xrealloc): New prototype.
* runtime/memory.c (xrealloc): New function.
* io/fbuf.c (fbuf_alloc): Use xrealloc.
* io/list_read.c (push_char_default): Likewise.
(push_char4): Likewise.
2014-05-26 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/61310

View File

@ -121,10 +121,7 @@ fbuf_alloc (gfc_unit * u, int len)
{
/* Round up to nearest multiple of the current buffer length. */
newlen = ((u->fbuf->pos + len) / u->fbuf->len + 1) * u->fbuf->len;
dest = realloc (u->fbuf->buf, newlen);
if (dest == NULL)
return NULL;
u->fbuf->buf = dest;
u->fbuf->buf = xrealloc (u->fbuf->buf, newlen);
u->fbuf->len = newlen;
}

View File

@ -79,7 +79,7 @@ typedef unsigned char uchar;
static void
push_char_default (st_parameter_dt *dtp, int c)
{
char *new;
if (dtp->u.p.saved_string == NULL)
{
@ -92,13 +92,11 @@ push_char_default (st_parameter_dt *dtp, int c)
if (dtp->u.p.saved_used >= dtp->u.p.saved_length)
{
dtp->u.p.saved_length = 2 * dtp->u.p.saved_length;
new = realloc (dtp->u.p.saved_string, dtp->u.p.saved_length);
if (new == NULL)
generate_error (&dtp->common, LIBERROR_OS, NULL);
dtp->u.p.saved_string = new;
dtp->u.p.saved_string =
xrealloc (dtp->u.p.saved_string, dtp->u.p.saved_length);
// Also this should not be necessary.
memset (new + dtp->u.p.saved_used, 0,
memset (dtp->u.p.saved_string + dtp->u.p.saved_used, 0,
dtp->u.p.saved_length - dtp->u.p.saved_used);
}
@ -126,10 +124,7 @@ push_char4 (st_parameter_dt *dtp, int c)
if (dtp->u.p.saved_used >= dtp->u.p.saved_length)
{
dtp->u.p.saved_length = 2 * dtp->u.p.saved_length;
new = realloc (p, dtp->u.p.saved_length * sizeof (gfc_char4_t));
if (new == NULL)
generate_error (&dtp->common, LIBERROR_OS, NULL);
p = new;
p = xrealloc (p, dtp->u.p.saved_length * sizeof (gfc_char4_t));
memset4 (new + dtp->u.p.saved_used, 0,
dtp->u.p.saved_length - dtp->u.p.saved_used);

View File

@ -771,6 +771,8 @@ internal_proto(xmalloc);
extern void *xcalloc (size_t, size_t) __attribute__ ((malloc));
internal_proto(xcalloc);
extern void *xrealloc (void *, size_t);
internal_proto(xrealloc);
/* environ.c */

View File

@ -58,3 +58,17 @@ xcalloc (size_t nmemb, size_t size)
return p;
}
void *
xrealloc (void *ptr, size_t size)
{
if (size == 0)
size = 1;
void *newp = realloc (ptr, size);
if (!newp)
os_error ("Memory allocation failure in xrealloc");
return newp;
}