diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2018-03-02 23:22:06 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2018-03-02 23:22:07 -0500 |
commit | e80aaf6183c6692ecc167bf26cbdc53f8f1a55f0 (patch) | |
tree | 6964a92dd94620a07a9d63227c69d8662e99d7b0 /gdb/source.c | |
parent | a6743a5420aa02a0550b0f7be004f6c06e90ce21 (diff) | |
download | fsf-binutils-gdb-e80aaf6183c6692ecc167bf26cbdc53f8f1a55f0.zip fsf-binutils-gdb-e80aaf6183c6692ecc167bf26cbdc53f8f1a55f0.tar.gz fsf-binutils-gdb-e80aaf6183c6692ecc167bf26cbdc53f8f1a55f0.tar.bz2 |
Make delim_string_to_char_ptr_vec return an std::vector
This patch makes delim_string_to_char_ptr_vec and all related functions
use std::vector of gdb::unique_xmalloc_ptr. This allows getting rid of
make_cleanup_free_char_ptr_vec. Returning a vector of
unique_xmalloc_ptr instead of std::string allows to minimize the impacts
on the calling code. We can evaluate later whether we could/should
return a vector of std::strings instead.
gdb/ChangeLog:
* common/gdb_vecs.h (make_cleanup_free_char_ptr_vec): Remove.
(delim_string_to_char_ptr_vec): Return std::vector of
gdb::unique_xmalloc_ptr.
(dirnames_to_char_ptr_vec_append): Take std::vector of
gdb::unique_xmalloc_ptr.
(dirnames_to_char_ptr_vec): Return std::vector of
gdb::unique_xmalloc_ptr.
* common/gdb_vecs.c (delim_string_to_char_ptr_vec_append):
Take std::vector of gdb::unique_xmalloc_ptr, adjust the code.
(delim_string_to_char_ptr_vec): Return an std::vector of
gdb::unique_xmalloc_ptr, adjust the code.
(dirnames_to_char_ptr_vec_append): Take an std::vector of
gdb::unique_xmalloc_ptr, adjust the code.
(dirnames_to_char_ptr_vec): Return an std::vector of
gdb::unique_xmalloc_ptr, adjust the code.
* auto-load.c (auto_load_safe_path_vec): Change type to
std::vector of gdb::unique_xmalloc_ptr.
(auto_load_expand_dir_vars): Return an std::vector of
gdb::unique_xmalloc_ptr, adjust the code.
(auto_load_safe_path_vec_update): Adjust.
(filename_is_in_auto_load_safe_path_vec): Adjust.
(auto_load_objfile_script_1): Adjust.
* build-id.c (build_id_to_debug_bfd): Adjust.
* linux-thread-db.c (thread_db_load_search): Adjust.
* source.c (add_path): Adjust.
(openp): Adjust.
* symfile.c (find_separate_debug_file): Adjust.
* utils.c (do_free_char_ptr_vec): Remove.
(make_cleanup_free_char_ptr_vec): Remove.
gdb/gdbserver/ChangeLog:
* server.c (parse_debug_format_options): Adjust to
delim_string_to_char_ptr_vec changes.
* thread-db.c (thread_db_load_search): Adjust to
dirnames_to_char_ptr_vec changes.
Diffstat (limited to 'gdb/source.c')
-rw-r--r-- | gdb/source.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/gdb/source.c b/gdb/source.c index 6979fb2..3b4920f 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -461,10 +461,7 @@ add_path (const char *dirname, char **which_path, int parse_separators) { char *old = *which_path; int prefix = 0; - VEC (char_ptr) *dir_vec = NULL; - struct cleanup *back_to; - int ix; - char *name; + std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec; if (dirname == 0) return; @@ -479,11 +476,13 @@ add_path (const char *dirname, char **which_path, int parse_separators) dirnames_to_char_ptr_vec_append (&dir_vec, arg); } else - VEC_safe_push (char_ptr, dir_vec, xstrdup (dirname)); - back_to = make_cleanup_free_char_ptr_vec (dir_vec); + dir_vec.emplace_back (xstrdup (dirname)); - for (ix = 0; VEC_iterate (char_ptr, dir_vec, ix, name); ++ix) + struct cleanup *back_to = make_cleanup (null_cleanup, NULL); + + for (const gdb::unique_xmalloc_ptr<char> &name_up : dir_vec) { + char *name = name_up.get (); char *p; struct stat st; @@ -709,13 +708,10 @@ openp (const char *path, openp_flags opts, const char *string, int fd; char *filename; int alloclen; - VEC (char_ptr) *dir_vec; - struct cleanup *back_to; - int ix; - char *dir; /* The errno set for the last name we tried to open (and failed). */ int last_errno = 0; + std::vector<gdb::unique_xmalloc_ptr<char>> dir_vec; /* The open syscall MODE parameter is not specified. */ gdb_assert ((mode & O_CREAT) == 0); @@ -783,10 +779,10 @@ openp (const char *path, openp_flags opts, const char *string, last_errno = ENOENT; dir_vec = dirnames_to_char_ptr_vec (path); - back_to = make_cleanup_free_char_ptr_vec (dir_vec); - for (ix = 0; VEC_iterate (char_ptr, dir_vec, ix, dir); ++ix) + for (const gdb::unique_xmalloc_ptr<char> &dir_up : dir_vec) { + char *dir = dir_up.get (); size_t len = strlen (dir); int reg_file_errno; @@ -856,8 +852,6 @@ openp (const char *path, openp_flags opts, const char *string, last_errno = reg_file_errno; } - do_cleanups (back_to); - done: if (filename_opened) { |