aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-02-06 12:51:42 -0700
committerTom Tromey <tom@tromey.com>2018-02-08 11:46:57 -0700
commita9abc4345150a3f3e30da78f8d68c1f9e0198772 (patch)
treebbd2eab5ca8409b61c80fda478a10f60b90f8609
parent84f27c6fcbbf580434c7d56e68fa42fe7cf7ccb9 (diff)
downloadgdb-a9abc4345150a3f3e30da78f8d68c1f9e0198772.zip
gdb-a9abc4345150a3f3e30da78f8d68c1f9e0198772.tar.gz
gdb-a9abc4345150a3f3e30da78f8d68c1f9e0198772.tar.bz2
Use gdb::def_vector in find_source_lines
This replaces an explicit malloc and a cleanup with a gdb::def_vector. 2018-02-08 Tom Tromey <tom@tromey.com> * source.c (find_source_lines): Use gdb::def_vector.
-rw-r--r--gdb/ChangeLog4
-rw-r--r--gdb/source.c20
2 files changed, 12 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index ec219be..1e16a1c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,9 @@
2018-02-08 Tom Tromey <tom@tromey.com>
+ * source.c (find_source_lines): Use gdb::def_vector.
+
+2018-02-08 Tom Tromey <tom@tromey.com>
+
* macrocmd.c (struct temporary_macro_definition): New.
(macro_define_command): Use temporary_macro_definition. Remove
cleanups.
diff --git a/gdb/source.c b/gdb/source.c
index 1f136f4..9eec58f 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -1186,7 +1186,7 @@ void
find_source_lines (struct symtab *s, int desc)
{
struct stat st;
- char *data, *p, *end;
+ char *p, *end;
int nlines = 0;
int lines_allocated = 1000;
int *line_charpos;
@@ -1207,23 +1207,20 @@ find_source_lines (struct symtab *s, int desc)
warning (_("Source file is more recent than executable."));
{
- struct cleanup *old_cleanups;
-
/* st_size might be a large type, but we only support source files whose
size fits in an int. */
size = (int) st.st_size;
- /* Use malloc, not alloca, because this may be pretty large, and we may
- run into various kinds of limits on stack size. */
- data = (char *) xmalloc (size);
- old_cleanups = make_cleanup (xfree, data);
+ /* Use the heap, not the stack, because this may be pretty large,
+ and we may run into various kinds of limits on stack size. */
+ gdb::def_vector<char> data (size);
/* Reassign `size' to result of read for systems where \r\n -> \n. */
- size = myread (desc, data, size);
+ size = myread (desc, data.data (), size);
if (size < 0)
perror_with_name (symtab_to_filename_for_display (s));
- end = data + size;
- p = data;
+ end = &data[size];
+ p = &data[0];
line_charpos[0] = 0;
nlines = 1;
while (p != end)
@@ -1239,10 +1236,9 @@ find_source_lines (struct symtab *s, int desc)
(int *) xrealloc ((char *) line_charpos,
sizeof (int) * lines_allocated);
}
- line_charpos[nlines++] = p - data;
+ line_charpos[nlines++] = p - data.data ();
}
}
- do_cleanups (old_cleanups);
}
s->nlines = nlines;