aboutsummaryrefslogtreecommitdiff
path: root/gdb/elfread.c
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2012-04-17 15:47:09 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2012-04-17 15:47:09 +0000
commite4ab2fad14aace768d2241c2595a29de08deabad (patch)
treecd2e2e7af1c89b6bc4f1e0f660576be30517b5ed /gdb/elfread.c
parent5ee4ed9f2eeafe7f0be32e0d197240e2b52c6d41 (diff)
downloadgdb-e4ab2fad14aace768d2241c2595a29de08deabad.zip
gdb-e4ab2fad14aace768d2241c2595a29de08deabad.tar.gz
gdb-e4ab2fad14aace768d2241c2595a29de08deabad.tar.bz2
gdb/
Code cleanup. * charset.c (find_charset_names): Remove variables ix and elt. Use free_char_ptr_vec. * elfread.c (build_id_to_debug_filename): New variables debugdir_vec, back_to and ix. Use dirnames_to_char_ptr_vec. Remove variable debugdir_end. New variable debugdir_len. * gdb_vecs.h (free_char_ptr_vec, make_cleanup_free_char_ptr_vec) (dirnames_to_char_ptr_vec_append, dirnames_to_char_ptr_vec): New declarations. * progspace.c (clear_program_space_solib_cache): Remove variables ix and elt. Use free_char_ptr_vec. * source.c (add_path): Remove variables argv, arg and argv_index. New variables dir_vec, back_to, ix and name. Use dirnames_to_char_ptr_vec_append. Use freeargv instead of make_cleanup_freeargv. Remove variable separator. Simplify the code no longer expecting DIRNAME_SEPARATOR. (openp): Remove variable p, p1 and len. New variables dir_vec, back_to, ix and dir. Use dirnames_to_char_ptr_vec. Simplify the code no longer expecting DIRNAME_SEPARATOR. * symfile.c (find_separate_debug_file): New variables debugdir_vec, back_to and ix. Use dirnames_to_char_ptr_vec. Remove variable debugdir_end. * utils.c (free_char_ptr_vec, do_free_char_ptr_vec) (make_cleanup_free_char_ptr_vec, dirnames_to_char_ptr_vec_append) (dirnames_to_char_ptr_vec): New functions.
Diffstat (limited to 'gdb/elfread.c')
-rw-r--r--gdb/elfread.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/gdb/elfread.c b/gdb/elfread.c
index 9f8a7e8..117e674 100644
--- a/gdb/elfread.c
+++ b/gdb/elfread.c
@@ -1123,6 +1123,9 @@ static char *
build_id_to_debug_filename (struct build_id *build_id)
{
char *link, *debugdir, *retval = NULL;
+ VEC (char_ptr) *debugdir_vec;
+ struct cleanup *back_to;
+ int ix;
/* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */
link = alloca (strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1
@@ -1131,22 +1134,18 @@ build_id_to_debug_filename (struct build_id *build_id)
/* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
cause "/.build-id/..." lookups. */
- debugdir = debug_file_directory;
- do
+ debugdir_vec = dirnames_to_char_ptr_vec (debug_file_directory);
+ back_to = make_cleanup_free_char_ptr_vec (debugdir_vec);
+
+ for (ix = 0; VEC_iterate (char_ptr, debugdir_vec, ix, debugdir); ++ix)
{
- char *s, *debugdir_end;
+ size_t debugdir_len = strlen (debugdir);
gdb_byte *data = build_id->data;
size_t size = build_id->size;
+ char *s;
- while (*debugdir == DIRNAME_SEPARATOR)
- debugdir++;
-
- debugdir_end = strchr (debugdir, DIRNAME_SEPARATOR);
- if (debugdir_end == NULL)
- debugdir_end = &debugdir[strlen (debugdir)];
-
- memcpy (link, debugdir, debugdir_end - debugdir);
- s = &link[debugdir_end - debugdir];
+ memcpy (link, debugdir, debugdir_len);
+ s = &link[debugdir_len];
s += sprintf (s, "/.build-id/");
if (size > 0)
{
@@ -1171,11 +1170,9 @@ build_id_to_debug_filename (struct build_id *build_id)
if (retval != NULL)
break;
-
- debugdir = debugdir_end;
}
- while (*debugdir != 0);
+ do_cleanups (back_to);
return retval;
}