aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanne Blomqvist <jb@gcc.gnu.org>2012-03-25 08:48:49 +0300
committerJanne Blomqvist <jb@gcc.gnu.org>2012-03-25 08:48:49 +0300
commitf4471acbe3a0e4aee9aa8144898c593ff4e7b595 (patch)
tree685cb6240f35fb0058480526772367ef510d1cba
parent0651865170b953c49b8acce8ad6de0143c00fc06 (diff)
downloadgcc-f4471acbe3a0e4aee9aa8144898c593ff4e7b595.zip
gcc-f4471acbe3a0e4aee9aa8144898c593ff4e7b595.tar.gz
gcc-f4471acbe3a0e4aee9aa8144898c593ff4e7b595.tar.bz2
Use calloc instead of malloc and memset.
2012-03-25 Janne Blomqvist <jb@gcc.gnu.org> * runtime/memory.c (xcalloc): New function. * libgfortran.h (xcalloc): New prototype. * io/list_read.c (push_char): Use xcalloc instead of get_mem and memset. (l_push_char): Likewise. * io/unit.c (insert_unit): Likewise. (get_internal_unit): Likewise. * io/unix.c (open_internal): Likewise. (open_internal4): Likewise. (fd_to_stream): Likewise. From-SVN: r185773
-rw-r--r--libgfortran/ChangeLog13
-rw-r--r--libgfortran/io/list_read.c12
-rw-r--r--libgfortran/io/unit.c13
-rw-r--r--libgfortran/io/unix.c16
-rw-r--r--libgfortran/libgfortran.h4
-rw-r--r--libgfortran/runtime/memory.c19
6 files changed, 46 insertions, 31 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index d593134..648f580 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,16 @@
+2012-03-25 Janne Blomqvist <jb@gcc.gnu.org>
+
+ * runtime/memory.c (xcalloc): New function.
+ * libgfortran.h (xcalloc): New prototype.
+ * io/list_read.c (push_char): Use xcalloc instead of get_mem and
+ memset.
+ (l_push_char): Likewise.
+ * io/unit.c (insert_unit): Likewise.
+ (get_internal_unit): Likewise.
+ * io/unix.c (open_internal): Likewise.
+ (open_internal4): Likewise.
+ (fd_to_stream): Likewise.
+
2012-03-17 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/52608
diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c
index 11a35c9..91b345c 100644
--- a/libgfortran/io/list_read.c
+++ b/libgfortran/io/list_read.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
+/* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
Contributed by Andy Vaught
Namelist input contributed by Paul Thomas
@@ -75,9 +75,8 @@ push_char (st_parameter_dt *dtp, char c)
if (dtp->u.p.saved_string == NULL)
{
- dtp->u.p.saved_string = get_mem (SCRATCH_SIZE);
- // memset below should be commented out.
- memset (dtp->u.p.saved_string, 0, SCRATCH_SIZE);
+ // Plain malloc should suffice here, zeroing not needed?
+ dtp->u.p.saved_string = xcalloc (SCRATCH_SIZE, 1);
dtp->u.p.saved_length = SCRATCH_SIZE;
dtp->u.p.saved_used = 0;
}
@@ -622,10 +621,7 @@ static void
l_push_char (st_parameter_dt *dtp, char c)
{
if (dtp->u.p.line_buffer == NULL)
- {
- dtp->u.p.line_buffer = get_mem (SCRATCH_SIZE);
- memset (dtp->u.p.line_buffer, 0, SCRATCH_SIZE);
- }
+ dtp->u.p.line_buffer = xcalloc (SCRATCH_SIZE, 1);
dtp->u.p.line_buffer[dtp->u.p.item_count++] = c;
}
diff --git a/libgfortran/io/unit.c b/libgfortran/io/unit.c
index 819d0e9..5fe9eb2 100644
--- a/libgfortran/io/unit.c
+++ b/libgfortran/io/unit.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2005, 2007, 2008, 2009, 2010, 2011
+/* Copyright (C) 2002, 2003, 2005, 2007, 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
Contributed by Andy Vaught
F2003 I/O support contributed by Jerry DeLisle
@@ -188,8 +188,7 @@ insert (gfc_unit *new, gfc_unit *t)
static gfc_unit *
insert_unit (int n)
{
- gfc_unit *u = get_mem (sizeof (gfc_unit));
- memset (u, '\0', sizeof (gfc_unit));
+ gfc_unit *u = xcalloc (1, sizeof (gfc_unit));
u->unit_number = n;
#ifdef __GTHREAD_MUTEX_INIT
{
@@ -385,14 +384,8 @@ get_internal_unit (st_parameter_dt *dtp)
/* Allocate memory for a unit structure. */
- iunit = get_mem (sizeof (gfc_unit));
- if (iunit == NULL)
- {
- generate_error (&dtp->common, LIBERROR_INTERNAL_UNIT, NULL);
- return NULL;
- }
+ iunit = xcalloc (1, sizeof (gfc_unit));
- memset (iunit, '\0', sizeof (gfc_unit));
#ifdef __GTHREAD_MUTEX_INIT
{
__gthread_mutex_t tmp = __GTHREAD_MUTEX_INIT;
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index 978c3ff..31fa005 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -1,5 +1,5 @@
/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
- 2011
+ 2011, 2012
Free Software Foundation, Inc.
Contributed by Andy Vaught
F2003 I/O support contributed by Jerry DeLisle
@@ -919,13 +919,11 @@ open_internal (char *base, int length, gfc_offset offset)
{
unix_stream *s;
- s = get_mem (sizeof (unix_stream));
- memset (s, '\0', sizeof (unix_stream));
+ s = xcalloc (1, sizeof (unix_stream));
s->buffer = base;
s->buffer_offset = offset;
- s->logical_offset = 0;
s->active = s->file_length = length;
s->st.vptr = &mem_vtable;
@@ -941,13 +939,11 @@ open_internal4 (char *base, int length, gfc_offset offset)
{
unix_stream *s;
- s = get_mem (sizeof (unix_stream));
- memset (s, '\0', sizeof (unix_stream));
+ s = xcalloc (1, sizeof (unix_stream));
s->buffer = base;
s->buffer_offset = offset;
- s->logical_offset = 0;
s->active = s->file_length = length;
s->st.vptr = &mem4_vtable;
@@ -965,13 +961,9 @@ fd_to_stream (int fd)
struct stat statbuf;
unix_stream *s;
- s = get_mem (sizeof (unix_stream));
- memset (s, '\0', sizeof (unix_stream));
+ s = xcalloc (1, sizeof (unix_stream));
s->fd = fd;
- s->buffer_offset = 0;
- s->physical_offset = 0;
- s->logical_offset = 0;
/* Get the current length of the file. */
diff --git a/libgfortran/libgfortran.h b/libgfortran/libgfortran.h
index f2f6c36..186bfbe 100644
--- a/libgfortran/libgfortran.h
+++ b/libgfortran/libgfortran.h
@@ -759,6 +759,10 @@ internal_proto(get_mem);
extern void *internal_malloc_size (size_t) __attribute__ ((malloc));
internal_proto(internal_malloc_size);
+extern void *xcalloc (size_t, size_t) __attribute__ ((malloc));
+internal_proto(xcalloc);
+
+
/* environ.c */
extern int check_buffered (int);
diff --git a/libgfortran/runtime/memory.c b/libgfortran/runtime/memory.c
index a26d9e5..044a115 100644
--- a/libgfortran/runtime/memory.c
+++ b/libgfortran/runtime/memory.c
@@ -1,5 +1,6 @@
/* Memory management routines.
- Copyright 2002, 2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+ Copyright 2002, 2005, 2006, 2007, 2009, 2010, 2012
+ Free Software Foundation, Inc.
Contributed by Paul Brook <paul@nowt.org>
This file is part of the GNU Fortran runtime library (libgfortran).
@@ -59,3 +60,19 @@ internal_malloc_size (size_t size)
return get_mem (size);
}
+
+
+/* calloc wrapper that aborts on error. */
+
+void *
+xcalloc (size_t nmemb, size_t size)
+{
+ if (nmemb * size == 0)
+ nmemb = size = 1;
+
+ void *p = calloc (nmemb, size);
+ if (!p)
+ os_error ("Allocating cleared memory failed");
+
+ return p;
+}