diff options
author | Tom Tromey <tom@tromey.com> | 2018-02-06 12:51:42 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-02-08 11:46:57 -0700 |
commit | a9abc4345150a3f3e30da78f8d68c1f9e0198772 (patch) | |
tree | bbd2eab5ca8409b61c80fda478a10f60b90f8609 /gdb/source.c | |
parent | 84f27c6fcbbf580434c7d56e68fa42fe7cf7ccb9 (diff) | |
download | gdb-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.
Diffstat (limited to 'gdb/source.c')
-rw-r--r-- | gdb/source.c | 20 |
1 files changed, 8 insertions, 12 deletions
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; |