diff options
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | gdb/Makefile.in | 8 | ||||
-rw-r--r-- | gdb/defs.h | 6 | ||||
-rw-r--r-- | gdb/source.c | 34 |
4 files changed, 53 insertions, 6 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bd4af6a..374231b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2002-12-13 Jeff Johnston <jjohnstn@redhat.com> + + * defs.h (init_last_source_visited): New prototype. + (add_path): Ditto. + * source.c (add_path): New function that adds to a specified path. + (mod_path): Change to call add_path. + (init_last_source_visited): New function to allow interfaces to + initialize static variable: last_source_visited. Part of fix + for PR gdb/741. + * Makefile.in: Add support for mi/mi-cmd-env.c. + 2002-12-13 Andrew Cagney <ac131313@redhat.com> * frame.h (frame_id_unwind): Declare. diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 441f733..28dca01 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -168,12 +168,12 @@ SUBDIR_CLI_UNINSTALL= # SUBDIR_MI_OBS = \ mi-out.o mi-console.o \ - mi-cmds.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \ + mi-cmds.o mi-cmd-env.o mi-cmd-var.o mi-cmd-break.o mi-cmd-stack.o \ mi-cmd-disas.o \ mi-main.o mi-parse.o mi-getopt.o SUBDIR_MI_SRCS = \ mi/mi-out.c mi/mi-console.c \ - mi/mi-cmds.c \ + mi/mi-cmds.c mi/mi-cmd-env.c \ mi/mi-cmd-var.c mi/mi-cmd-break.c mi/mi-cmd-stack.c \ mi/mi-cmd-disas.c \ mi/mi-main.c mi/mi-parse.c mi/mi-getopt.c @@ -2536,6 +2536,10 @@ mi-cmd-break.o: $(srcdir)/mi/mi-cmd-break.c $(defs_h) $(mi_cmds_h) \ mi-cmd-disas.o: $(srcdir)/mi/mi-cmd-disas.c $(defs_h) $(target_h) $(value_h) \ $(mi_cmds_h) $(mi_getopt_h) $(ui_out_h) $(gdb_string_h) $(disasm_h) $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-disas.c +mi-cmd-env.o: $(srcdir)/mi/mi-cmd-env.c $(defs_h) $(mi_cmds_h) $(ui_out_h) \ + $(mi_out_h) $(varobj_h) $(value_h) $(gdb_string_h) $(inferior.h) \ + $(mi_getopt_h) $(environ_h) $(gdbcmd_h) $(top_h) + $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-env.c mi-cmd-stack.o: $(srcdir)/mi/mi-cmd-stack.c $(defs_h) $(target_h) $(frame_h) \ $(value_h) $(mi_cmds_h) $(ui_out_h) $(symtab_h) $(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/mi/mi-cmd-stack.c @@ -572,10 +572,16 @@ extern int source_full_path_of (char *, char **); extern void mod_path (char *, char **); +extern void add_path (char *, char **, int); + extern void directory_command (char *, int); +extern char *source_path; + extern void init_source_path (void); +extern void init_last_source_visited (void); + extern char *symtab_to_filename (struct symtab *); /* From exec.c */ diff --git a/gdb/source.c b/gdb/source.c index be5d90c..c2991b5 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -358,6 +358,12 @@ init_source_path (void) forget_cached_source_info (); } +void +init_last_source_visited (void) +{ + last_source_visited = NULL; +} + /* Add zero or more directories to the front of the source path. */ void @@ -388,6 +394,18 @@ directory_command (char *dirname, int from_tty) void mod_path (char *dirname, char **which_path) { + add_path (dirname, which_path, 1); +} + +/* Workhorse of mod_path. Takes an extra argument to determine + if dirname should be parsed for separators that indicate multiple + directories. This allows for interfaces that pre-parse the dirname + and allow specification of traditional separator characters such + as space or tab. */ + +void +add_path (char *dirname, char **which_path, int parse_separators) +{ char *old = *which_path; int prefix = 0; @@ -404,9 +422,16 @@ mod_path (char *dirname, char **which_path) struct stat st; { - char *separator = strchr (name, DIRNAME_SEPARATOR); - char *space = strchr (name, ' '); - char *tab = strchr (name, '\t'); + char *separator = NULL; + char *space = NULL; + char *tab = NULL; + + if (parse_separators) + { + separator = strchr (name, DIRNAME_SEPARATOR); + space = strchr (name, ' '); + tab = strchr (name, '\t'); + } if (separator == 0 && space == 0 && tab == 0) p = dirname = name + strlen (name); @@ -537,7 +562,8 @@ mod_path (char *dirname, char **which_path) tinybuf[0] = DIRNAME_SEPARATOR; tinybuf[1] = '\0'; - /* If we have already tacked on a name(s) in this command, be sure they stay on the front as we tack on some more. */ + /* If we have already tacked on a name(s) in this command, be sure they stay + on the front as we tack on some more. */ if (prefix) { char *temp, c; |