From: Jeff Johnston Date: Fri, 13 Dec 2002 17:55:49 +0000 (+0000) Subject: 2002-12-13 Jeff Johnston X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c04e0a08c9ced78d9a762969c584e64b5eca1d7a;p=binutils-gdb.git 2002-12-13 Jeff Johnston * 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bd4af6a2ec6..374231b9db5 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2002-12-13 Jeff Johnston + + * 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 * frame.h (frame_id_unwind): Declare. diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 441f7332360..28dca01ece6 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 diff --git a/gdb/defs.h b/gdb/defs.h index 3ac3d9a5d60..9aa604cf632 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -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 be5d90c3386..c2991b5bfd1 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 @@ -387,6 +393,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;