Proposed patch for gdb/mi 741

Elena Zannoni ezannoni@redhat.com
Mon Dec 9 20:59:00 GMT 2002


J. Johnston writes:
 > No problem.  Hopefully the last iteration.  I added the
 > reset option to -environment-path and also added new tests
 > to mi-basics.exp.  The Makefile.in has been cleaned
 > up properly w/r the header files and I fixed the typo you noticed
 > in the call to mi_getopt.
 > 
 > Ok to commit?

Yep.

thanks
Elena


 > 
 > -- Jeff J.
 > 
 > gdb/ChangeLog:
 > 
 > 2002-12-09  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.
 > 	
 > gdb/mi/ChangeLog:
 > 
 > 2002-12-09  Jeff Johnston  <jjohnstn@redhat.com>
 > 
 >          * mi-cmds.c (-environment-directory) Change to use mi_cmd_env_dir,
 >          (-environment-cd): Change to use mi_cmd_env_cd,.
 >          (-environment-pwd): Change to use mi_cmd_env_pwd.
 >          (-environment-path): Change to use mi_cmd_env_path.
 >          * mi-cmds.h (mi_cmd_env_cd, mi_cmd_env_dir): New prototypes.
 >          (mi_cmd_env_path, mi_cmd_env_pwd): Ditto.
 >          * mi-cmd-env.c: New file.  Part of fix for PR gdb/741.
 >          * gdbmi.texinfo (environment-cd): Update output and example.
 >          (environment-pwd): Ditto.
 >          (environment-dir): Update output, description, and examples.
 >          (environment-path): Ditto.
 > 
 > gdb/testsuite/gdb.mi/ChangeLog:
 > 
 > 2002-12-09  Jeff Johnston  <jjohnstn@redhat.com>
 > 
 >          * mi-basics.exp: Change tests for -environment-directory.  Also add
 >          tests for -environment-cd, -environment-pwd, and -environment-path.
 > 	Part of fix for PR gdb/741.
 > 
 > Elena Zannoni wrote:
 > > J. Johnston writes:
 > >  > 
 > > 
 > > Ok I noticed a few more things in mi-cmd-env.c, the rest is ok.
 > > 
 > > Sorry, another iteration....
 > > 
 > > See below.
 > > 
 > > 
 > > 
 > >  > gdb/ChangeLog:
 > >  > 
 > >  > 2002-11-11  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.
 > >  > 	
 > >  > gdb/mi/ChangeLog:
 > >  > 
 > >  > 2002-11-11  Jeff Johnston  <jjohnstn@redhat.com>
 > >  >  
 > >  >         * mi-cmds.c (-environment-directory) Change to use mi_cmd_env_dir,
 > >  >         (-environment-cd): Change to use mi_cmd_env_cd,.
 > >  >         (-environment-pwd): Change to use mi_cmd_env_pwd.
 > >  >         (-environment-path): Change to use mi_cmd_env_path.
 > >  >         * mi-cmds.h (mi_cmd_env_cd, mi_cmd_env_dir): New prototypes.
 > >  >         (mi_cmd_env_path, mi_cmd_env_pwd): Ditto.
 > >  >         * mi-cmd-env.c: New file.  Part of fix for PR gdb/741.
 > >  >         * gdbmi.texinfo (environment-cd): Update output and example.
 > >  >         (environment-pwd): Ditto.
 > >  >         (environment-dir): Update output, description, and examples.
 > >  >         (environment-path): Ditto.
 > >  >   
 > >  > gdb/testsuite/gdb.mi/ChangeLog:
 > >  >   
 > >  > 2002-11-11  Jeff Johnston  <jjohnstn@redhat.com>
 > >  >  
 > >  >         * mi-basics.exp: Change tests for -environment-directory.  Also add
 > >  >         tests for -environment-cd and -environment-pwd.  Part of fix for
 > >  >         PR gdb/741.Index: defs.h
 > >  > ===================================================================
 > >  > RCS file: /cvs/src/src/gdb/defs.h,v
 > >  > retrieving revision 1.102
 > >  > diff -u -r1.102 defs.h
 > >  > --- defs.h	15 Oct 2002 02:16:51 -0000	1.102
 > >  > +++ defs.h	9 Nov 2002 00:33:14 -0000
 > >  > @@ -572,9 +572,15 @@
 > >  >  
 > >  >  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 *);
 > >  >  
 > >  > Index: source.c
 > >  > ===================================================================
 > >  > RCS file: /cvs/src/src/gdb/source.c,v
 > >  > retrieving revision 1.36
 > >  > diff -u -r1.36 source.c
 > >  > --- source.c	24 Oct 2002 21:02:53 -0000	1.36
 > >  > +++ source.c	9 Nov 2002 00:33:14 -0000
 > >  > @@ -357,6 +357,12 @@
 > >  >    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 @@
 > >  >  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;
 > >  >  
 > >  > @@ -403,9 +421,16 @@
 > >  >        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);
 > >  > @@ -536,7 +561,8 @@
 > >  >  	    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;
 > >  > Index: Makefile.in
 > >  > ===================================================================
 > >  > RCS file: /cvs/src/src/gdb/Makefile.in,v
 > >  > retrieving revision 1.278
 > >  > diff -u -r1.278 Makefile.in
 > >  > --- Makefile.in	8 Nov 2002 20:48:54 -0000	1.278
 > >  > +++ Makefile.in	9 Nov 2002 00:33:14 -0000
 > >  > @@ -166,12 +166,12 @@
 > >  >  #
 > >  >  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
 > >  > @@ -2487,6 +2487,10 @@
 > >  >  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)
 > >  > +	$(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
 > >  > Index: mi/mi-cmd-env.c
 > >  > ===================================================================
 > >  > RCS file: mi/mi-cmd-env.c
 > >  > diff -N mi/mi-cmd-env.c
 > >  > --- mi/mi-cmd-env.c	1 Jan 1970 00:00:00 -0000
 > >  > +++ mi/mi-cmd-env.c	9 Nov 2002 00:33:14 -0000
 > >  > @@ -0,0 +1,202 @@
 > >  > +/* MI Command Set - environment commands.
 > >  > +   Copyright 2002 Free Software Foundation, Inc.
 > >  > +   Contributed by Red Hat Inc.
 > >  > +
 > >  > +   This file is part of GDB.
 > >  > +
 > >  > +   This program is free software; you can redistribute it and/or modify
 > >  > +   it under the terms of the GNU General Public License as published by
 > >  > +   the Free Software Foundation; either version 2 of the License, or
 > >  > +   (at your option) any later version.
 > >  > +
 > >  > +   This program is distributed in the hope that it will be useful,
 > >  > +   but WITHOUT ANY WARRANTY; without even the implied warranty of
 > >  > +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 > >  > +   GNU General Public License for more details.
 > >  > +
 > >  > +   You should have received a copy of the GNU General Public License
 > >  > +   along with this program; if not, write to the Free Software
 > >  > +   Foundation, Inc., 59 Temple Place - Suite 330,
 > >  > +   Boston, MA 02111-1307, USA.  */
 > >  > +
 > >  > +#include <string.h>
 > >  > +#include <sys/stat.h>
 > >  > +
 > >  > +#include "defs.h"
 > >  > +#include "target.h"
 > >  > +#include "frame.h"
 > >  > +#include "value.h"
 > >  > +#include "mi-cmds.h"
 > >  > +#include "mi-out.h"
 > >  > +#include "mi-getopt.h"
 > >  > +#include "ui-out.h"
 > >  > +#include "symtab.h"
 > >  > +#include "filenames.h"
 > >  > +#include "environ.h"
 > >  > +#include "command.h"
 > >  > +#include "top.h"
 > >  > +#include "inferior.h"
 > >  > +
 > > 
 > > Are all these includes needed? they are not listed in the Makefile
 > > dependencies.
 > > 
 > > 
 > >  > +static void env_cli_command (const char *cli, char *args);
 > >  > +static void env_mod_path (char *dirname, char **which_path);
 > >  > +
 > >  > +static const char path_var_name[] = "PATH";
 > >  > +
 > >  > +/* The following is copied from mi-main.c so for m1 and below we
 > >  > +   can perform old behavior and use cli commands.  */
 > >  > +static void
 > >  > +env_execute_cli_command (const char *cli, char *args)
 > >  > +{
 > >  > +  if (cli != 0)
 > >  > +    {
 > >  > +      struct cleanup *old_cleanups;
 > >  > +      char *run;
 > >  > +      xasprintf (&run, cli, args);
 > >  > +      old_cleanups = make_cleanup (xfree, run);
 > >  > +      execute_command ( /*ui */ run, 0 /*from_tty */ );
 > >  > +      do_cleanups (old_cleanups);
 > >  > +      return;
 > >  > +    }
 > >  > +}
 > >  > +
 > >  > +
 > >  > +/* Print working directory.  */
 > >  > +enum mi_cmd_result
 > >  > +mi_cmd_env_pwd (char *command, char **argv, int argc)
 > >  > +{
 > >  > +  if (argc > 0)
 > >  > +    error ("mi_cmd_env_pwd: No arguments required");
 > >  > +          
 > >  > +  if (mi_version (uiout) < 2)
 > >  > +    {
 > >  > +      env_execute_cli_command ("pwd", NULL);
 > >  > +      return MI_CMD_DONE;
 > >  > +    }
 > >  > +     
 > >  > +  /* Otherwise the mi level is 2 or higher.  */
 > >  > +
 > >  > +  getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
 > >  > +  ui_out_field_string (uiout, "cwd", gdb_dirbuf);
 > >  > +
 > >  > +  return MI_CMD_DONE;
 > >  > +}
 > >  > +
 > >  > +/* Change working directory.  */
 > >  > +enum mi_cmd_result
 > >  > +mi_cmd_env_cd (char *command, char **argv, int argc)
 > >  > +{
 > >  > +  if (argc == 0 || argc > 1)
 > >  > +    error ("mi_cmd_env_cd: Usage DIRECTORY");
 > >  > +          
 > >  > +  env_execute_cli_command ("cd %s", argv[0]);
 > >  > +
 > >  > +  return MI_CMD_DONE;
 > >  > +}
 > >  > +
 > >  > +static void
 > >  > +env_mod_path (char *dirname, char **which_path)
 > >  > +{
 > >  > +  if (dirname == 0 || dirname[0] == '\0')
 > >  > +    return;
 > >  > +
 > >  > +  /* Call add_path with last arg 0 to indicate not to parse for 
 > >  > +     separator characters.  */
 > >  > +  add_path (dirname, which_path, 0);
 > >  > +}
 > >  > +
 > >  > +/* Add one or more directories to start of executable search path.  */
 > >  > +enum mi_cmd_result
 > >  > +mi_cmd_env_path (char *command, char **argv, int argc)
 > >  > +{
 > >  > +  char *exec_path;
 > >  > +  char *env;
 > >  > +  int i;
 > >  > +
 > >  > +  if (mi_version (uiout) < 2)
 > >  > +    {
 > >  > +      for (i = argc - 1; i >= 0; --i)
 > >  > +	env_execute_cli_command ("path %s", argv[i]);
 > >  > +      return MI_CMD_DONE;
 > >  > +    }
 > >  > +
 > >  > +  /* Otherwise the mi level is 2 or higher.  */
 > >  > +  dont_repeat ();
 > >  > +  env = get_in_environ (inferior_environ, path_var_name);
 > >  > +
 > >  > +  /* Can be null if path is not set.  */
 > >  > +  if (!env)
 > >  > +    env = "";
 > >  > +  exec_path = xstrdup (env);
 > >  > +
 > >  > +  for (i = argc - 1; i >= 0; --i)
 > >  > +    env_mod_path (argv[i], &exec_path);
 > >  > +
 > > 
 > > 
 > > Could you add a -reset option here too? We might as well have some symmetry.
 > > 
 > >  > +  set_in_environ (inferior_environ, path_var_name, exec_path);
 > >  > +  xfree (exec_path);
 > >  > +  env = get_in_environ (inferior_environ, path_var_name);
 > >  > +  ui_out_field_string (uiout, "path", env);
 > >  > +
 > >  > +  return MI_CMD_DONE;
 > >  > +}
 > >  > +
 > >  > +/* Add zero or more directories to the front of the source path.  */
 > >  > +enum mi_cmd_result
 > >  > +mi_cmd_env_dir (char *command, char **argv, int argc)
 > >  > +{
 > >  > +  int i;
 > >  > +  int optind = 0;
 > >  > +  int reset = 0;
 > >  > +  char *optarg;
 > >  > +  enum opt
 > >  > +    {
 > >  > +      RESET_OPT
 > >  > +    };
 > >  > +  static struct mi_opt opts[] =
 > >  > +  {
 > >  > +    {"r", RESET_OPT, 0},
 > >  > +    0
 > >  > +  };
 > >  > +
 > >  > +  dont_repeat ();
 > >  > +
 > >  > +  if (mi_version (uiout) < 2)
 > >  > +    {
 > >  > +      for (i = argc - 1; i >= 0; --i)
 > >  > +	env_execute_cli_command ("dir %s", argv[i]);
 > >  > +      return MI_CMD_DONE;
 > >  > +    }
 > >  > +
 > >  > +  /* Otherwise mi level is 2 or higher.  */
 > >  > +  while (1)
 > >  > +    {
 > >  > +      int opt = mi_getopt ("mi_cmd_data_read_memory", argc, argv, opts,
 > >                                 ^^^^^^^^^^^^^^^^^^^^^^^
 > > 
 > > 
 > >  > +                           &optind, &optarg);
 > >  > +      if (opt < 0)
 > >  > +        break;
 > >  > +      switch ((enum opt) opt)
 > >  > +        {
 > >  > +        case RESET_OPT:
 > >  > +          reset = 1;
 > >  > +          break;
 > >  > +        }
 > >  > +    }
 > >  > +  argv += optind;
 > >  > +  argc -= optind;
 > >  > +
 > >  > +  if (reset)
 > >  > +    {
 > >  > +      /* No args implies reset to default path.  */
 > >  > +      xfree (source_path);
 > >  > +      init_source_path ();
 > >  > +    }
 > >  > +
 > >  > +  for (i = argc - 1; i >= 0; --i)
 > >  > +    env_mod_path (argv[i], &source_path);
 > >  > +  init_last_source_visited ();
 > >  > +
 > >  > +  ui_out_field_string (uiout, "source-path", source_path);
 > >  > +  forget_cached_source_info ();
 > >  > +
 > >  > +  return MI_CMD_DONE;
 > >  > +}
 > >  > +
 > >  > Index: mi/mi-cmds.h
 > >  > ===================================================================
 > >  > RCS file: /cvs/src/src/gdb/mi/mi-cmds.h,v
 > >  > retrieving revision 1.5
 > >  > diff -u -r1.5 mi-cmds.h
 > >  > --- mi/mi-cmds.h	6 Mar 2001 08:21:45 -0000	1.5
 > >  > +++ mi/mi-cmds.h	9 Nov 2002 00:33:14 -0000
 > >  > @@ -64,6 +64,10 @@
 > >  >  extern mi_cmd_argv_ftype mi_cmd_data_read_memory;
 > >  >  extern mi_cmd_argv_ftype mi_cmd_data_write_memory;
 > >  >  extern mi_cmd_argv_ftype mi_cmd_data_write_register_values;
 > >  > +extern mi_cmd_argv_ftype mi_cmd_env_cd;
 > >  > +extern mi_cmd_argv_ftype mi_cmd_env_dir;
 > >  > +extern mi_cmd_argv_ftype mi_cmd_env_path;
 > >  > +extern mi_cmd_argv_ftype mi_cmd_env_pwd;
 > >  >  extern mi_cmd_args_ftype mi_cmd_exec_continue;
 > >  >  extern mi_cmd_args_ftype mi_cmd_exec_finish;
 > >  >  extern mi_cmd_args_ftype mi_cmd_exec_next;
 > >  > Index: mi/mi-cmds.c
 > >  > ===================================================================
 > >  > RCS file: /cvs/src/src/gdb/mi/mi-cmds.c,v
 > >  > retrieving revision 1.8
 > >  > diff -u -r1.8 mi-cmds.c
 > >  > --- mi/mi-cmds.c	6 Mar 2001 08:21:45 -0000	1.8
 > >  > +++ mi/mi-cmds.c	9 Nov 2002 00:33:14 -0000
 > >  > @@ -56,10 +56,10 @@
 > >  >    {"display-enable", 0, 0},
 > >  >    {"display-insert", 0, 0},
 > >  >    {"display-list", 0, 0},
 > >  > -  {"environment-cd", "cd %s", 0},
 > >  > -  {"environment-directory", "dir %s", 0},
 > >  > -  {"environment-path", "path %s", 0},
 > >  > -  {"environment-pwd", "pwd", 0},
 > >  > +  {"environment-cd", 0, 0, mi_cmd_env_cd},
 > >  > +  {"environment-directory", 0, 0, mi_cmd_env_dir},
 > >  > +  {"environment-path", 0, 0, mi_cmd_env_path},
 > >  > +  {"environment-pwd", 0, 0, mi_cmd_env_pwd},
 > >  >    {"exec-abort", 0, 0},
 > >  >    {"exec-arguments", "set args %s", 0},
 > >  >    {"exec-continue", 0, mi_cmd_exec_continue},
 > >  > Index: gdbmi.texinfo
 > >  > ===================================================================
 > >  > RCS file: /cvs/src/src/gdb/mi/gdbmi.texinfo,v
 > >  > retrieving revision 1.29
 > >  > diff -u -r1.29 gdbmi.texinfo
 > >  > --- gdbmi.texinfo	3 Oct 2002 22:31:31 -0000	1.29
 > >  > +++ gdbmi.texinfo	9 Nov 2002 00:30:50 -0000
 > >  > @@ -1665,10 +1665,18 @@
 > >  >  @subsubheading Synopsis
 > >  >  
 > >  >  @example
 > >  > - -environment-directory @var{pathdir}
 > >  > + -environment-directory [ -r ] [ @var{pathdir} ]+
 > >  >  @end example
 > >  >  
 > >  > -Add directory @var{pathdir} to beginning of search path for source files.
 > >  > +Add directories @var{pathdir} to beginning of search path for source files.
 > >  > +If the @samp{-r} option is used, the search path is reset to the default
 > >  > +search path.  If directories @var{pathdir} are supplied in addition to the 
 > >  > +@samp{-r} option, the search path is first reset and then addition
 > >  > +occurs as normal.
 > >  > +Specifying multiple directories in a single command
 > >  > +results in the directories added to the beginning of the
 > >  > +search path in the same order they were presented in the command.
 > >  > +If no directories are specified, the current search path is displayed.
 > >  >  
 > >  >  @subsubheading @value{GDBN} Command
 > >  >  
 > >  > @@ -1679,7 +1687,16 @@
 > >  >  @smallexample
 > >  >  (@value{GDBP})
 > >  >  -environment-directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
 > >  > -^done
 > >  > +^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
 > >  > +(@value{GDBP})
 > >  > +-environment-directory ""
 > >  > +^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
 > >  > +(@value{GDBP})
 > >  > +-environment-directory -r /home/jjohnstn/src/gdb
 > >  > +^done,source-path="/home/jjohnstn/src/gdb:$cdir:$cwd"
 > >  > +(@value{GDBP})
 > >  > +-environment-directory -r
 > >  > +^done,source-path="$cdir:$cwd"
 > >  >  (@value{GDBP})
 > >  >  @end smallexample
 > >  >  
 > >  > @@ -1690,10 +1707,12 @@
 > >  >  @subsubheading Synopsis
 > >  >  
 > >  >  @example
 > >  > - -environment-path ( @var{pathdir} )+
 > >  > + -environment-path [ @var{pathdir} ]+
 > >  >  @end example
 > >  >  
 > >  >  Add directories @var{pathdir} to beginning of search path for object files.
 > >  > +If no paths or an empty path is specified, the current object search path
 > >  > +is displayed with no modification.
 > >  >  
 > >  >  @subsubheading @value{GDBN} Command
 > >  >  
 > >  > @@ -1704,7 +1723,10 @@
 > >  >  @smallexample
 > >  >  (@value{GDBP})
 > >  >  -environment-path /kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb
 > >  > -^done
 > >  > +^done,path="/kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb:/usr/bin"
 > >  > +(@value{GDBP})
 > >  > +-environment-path 
 > >  > +^done,path="/kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb:/usr/bin"
 > >  >  (@value{GDBP})
 > >  >  @end smallexample
 > >  >  
 > >  > @@ -1729,8 +1751,7 @@
 > >  >  @smallexample
 > >  >  (@value{GDBP})
 > >  >  -environment-pwd
 > >  > -~Working directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb.
 > >  > -^done
 > >  > +^done,cwd="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb"
 > >  >  (@value{GDBP})
 > >  >  @end smallexample
 > >  >  
 > >  > Index: mi-basics.exp
 > >  > ===================================================================
 > >  > RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-basics.exp,v
 > >  > retrieving revision 1.6
 > >  > diff -u -r1.6 mi-basics.exp
 > >  > --- mi-basics.exp	27 Jun 2001 17:27:07 -0000	1.6
 > >  > +++ mi-basics.exp	11 Nov 2002 21:11:07 -0000
 > >  > @@ -148,26 +148,52 @@
 > >  >      global srcdir
 > >  >      global subdir
 > >  >  
 > >  > -    # Clear the search directories, then specify one to be searched
 > >  > +    # Add to the search directories, display, then reset back to default
 > >  >      # Tests:
 > >  > -    # -environment-directory
 > >  >      # -environment-directory arg
 > >  > +    # -environment-directory 
 > >  > +    # -environment-directory -r
 > >  >  
 > >  >  #exp_internal 1
 > >  > -    mi_gdb_test "202-environment-directory" \
 > >  > -             "\\\^done" \
 > >  > +    mi_gdb_test "202-environment-directory ${srcdir}/${subdir}" \
 > >  > +             "\\\^done,source-path=\"${srcdir}/${subdir}:\\\$cdir:\\\$cwd\"" \
 > >  > +             "environment-directory arg operation"
 > >  > +
 > >  > +    mi_gdb_test "203-environment-directory" \
 > >  > +             "\\\^done,source-path=\"${srcdir}/${subdir}:\\\$cdir:\\\$cwd\"" \
 > >  > +             "environment-directory empty-string operation"
 > >  > +
 > >  > +    mi_gdb_test "204-environment-directory -r" \
 > >  > +             "\\\^done,source-path=\"\\\$cdir:\\\$cwd\"" \
 > >  >               "environment-directory operation"
 > >  >  
 > >  > -    mi_gdb_test "203-environment-directory ${srcdir}/${subdir}" \
 > >  > -             "\\\^done" \
 > >  > -             "environment-directory arg operation"
 > >  >  #exp_internal 0
 > >  >  }
 > >  >  
 > >  > +proc test_cwd_specification {} {
 > >  > +    global mi_gdb_prompt
 > >  > +    global objdir
 > >  > +    global subdir
 > >  > +
 > >  > +    # Change the working directory, then print the current working directory
 > >  > +    # Tests:
 > >  > +    # -environment-cd ${objdir}
 > >  > +    # -environment-pwd
 > >  > +
 > >  > +    mi_gdb_test "205-environment-cd ${objdir}" \
 > >  > +             "\\\^done" \
 > >  > +             "environment-cd arg operation"
 > >  > +
 > >  > +    mi_gdb_test "206-environment-pwd" \
 > >  > +             "\\\^done,cwd=\"${objdir}\"" \
 > >  > +             "environment-pwd operation"
 > >  > +}
 > >  > +
 > >  >  if [test_mi_interpreter_selection] {
 > >  >    test_exec_and_symbol_mi_operatons
 > >  >    test_breakpoints_deletion
 > >  >    test_dir_specification
 > >  > +  test_cwd_specification
 > >  >  }
 > >  >  
 > >  >  mi_gdb_exit
 > 
 > Index: defs.h
 > ===================================================================
 > RCS file: /cvs/src/src/gdb/defs.h,v
 > retrieving revision 1.102
 > diff -u -r1.102 defs.h
 > --- defs.h	15 Oct 2002 02:16:51 -0000	1.102
 > +++ defs.h	10 Dec 2002 00:15:26 -0000
 > @@ -572,9 +572,15 @@
 >  
 >  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 *);
 >  
 > Index: source.c
 > ===================================================================
 > RCS file: /cvs/src/src/gdb/source.c,v
 > retrieving revision 1.36
 > diff -u -r1.36 source.c
 > --- source.c	24 Oct 2002 21:02:53 -0000	1.36
 > +++ source.c	10 Dec 2002 00:15:26 -0000
 > @@ -357,6 +357,12 @@
 >    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 @@
 >  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;
 >  
 > @@ -403,9 +421,16 @@
 >        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);
 > @@ -536,7 +561,8 @@
 >  	    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;
 > Index: Makefile.in
 > ===================================================================
 > RCS file: /cvs/src/src/gdb/Makefile.in,v
 > retrieving revision 1.290
 > diff -u -r1.290 Makefile.in
 > --- Makefile.in	5 Dec 2002 05:17:39 -0000	1.290
 > +++ Makefile.in	10 Dec 2002 00:15:26 -0000
 > @@ -168,12 +168,12 @@
 >  #
 >  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
 > @@ -2526,6 +2526,10 @@
 >  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
 > Index: mi-cmd-env.c
 > ===================================================================
 > RCS file: mi-cmd-env.c
 > diff -N mi-cmd-env.c
 > --- mi-cmd-env.c	1 Jan 1970 00:00:00 -0000
 > +++ mi-cmd-env.c	10 Dec 2002 00:16:45 -0000
 > @@ -0,0 +1,254 @@
 > +/* MI Command Set - environment commands.
 > +   Copyright 2002 Free Software Foundation, Inc.
 > +   Contributed by Red Hat Inc.
 > +
 > +   This file is part of GDB.
 > +
 > +   This program is free software; you can redistribute it and/or modify
 > +   it under the terms of the GNU General Public License as published by
 > +   the Free Software Foundation; either version 2 of the License, or
 > +   (at your option) any later version.
 > +
 > +   This program is distributed in the hope that it will be useful,
 > +   but WITHOUT ANY WARRANTY; without even the implied warranty of
 > +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 > +   GNU General Public License for more details.
 > +
 > +   You should have received a copy of the GNU General Public License
 > +   along with this program; if not, write to the Free Software
 > +   Foundation, Inc., 59 Temple Place - Suite 330,
 > +   Boston, MA 02111-1307, USA.  */
 > +
 > +#include <string.h>
 > +#include <sys/stat.h>
 > +
 > +#include "defs.h"
 > +#include "inferior.h"
 > +#include "value.h"
 > +#include "mi-out.h"
 > +#include "mi-cmds.h"
 > +#include "mi-getopt.h"
 > +#include "symtab.h"
 > +#include "target.h"
 > +#include "environ.h"
 > +#include "command.h"
 > +#include "ui-out.h"
 > +#include "top.h"
 > +
 > +static void env_cli_command (const char *cli, char *args);
 > +static void env_mod_path (char *dirname, char **which_path);
 > +extern void _initialize_mi_cmd_env (void);
 > +
 > +static const char path_var_name[] = "PATH";
 > +static char *orig_path = NULL;
 > +
 > +/* The following is copied from mi-main.c so for m1 and below we
 > +   can perform old behavior and use cli commands.  */
 > +static void
 > +env_execute_cli_command (const char *cli, char *args)
 > +{
 > +  if (cli != 0)
 > +    {
 > +      struct cleanup *old_cleanups;
 > +      char *run;
 > +      xasprintf (&run, cli, args);
 > +      old_cleanups = make_cleanup (xfree, run);
 > +      execute_command ( /*ui */ run, 0 /*from_tty */ );
 > +      do_cleanups (old_cleanups);
 > +      return;
 > +    }
 > +}
 > +
 > +
 > +/* Print working directory.  */
 > +enum mi_cmd_result
 > +mi_cmd_env_pwd (char *command, char **argv, int argc)
 > +{
 > +  if (argc > 0)
 > +    error ("mi_cmd_env_pwd: No arguments required");
 > +          
 > +  if (mi_version (uiout) < 2)
 > +    {
 > +      env_execute_cli_command ("pwd", NULL);
 > +      return MI_CMD_DONE;
 > +    }
 > +     
 > +  /* Otherwise the mi level is 2 or higher.  */
 > +
 > +  getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
 > +  ui_out_field_string (uiout, "cwd", gdb_dirbuf);
 > +
 > +  return MI_CMD_DONE;
 > +}
 > +
 > +/* Change working directory.  */
 > +enum mi_cmd_result
 > +mi_cmd_env_cd (char *command, char **argv, int argc)
 > +{
 > +  if (argc == 0 || argc > 1)
 > +    error ("mi_cmd_env_cd: Usage DIRECTORY");
 > +          
 > +  env_execute_cli_command ("cd %s", argv[0]);
 > +
 > +  return MI_CMD_DONE;
 > +}
 > +
 > +static void
 > +env_mod_path (char *dirname, char **which_path)
 > +{
 > +  if (dirname == 0 || dirname[0] == '\0')
 > +    return;
 > +
 > +  /* Call add_path with last arg 0 to indicate not to parse for 
 > +     separator characters.  */
 > +  add_path (dirname, which_path, 0);
 > +}
 > +
 > +/* Add one or more directories to start of executable search path.  */
 > +enum mi_cmd_result
 > +mi_cmd_env_path (char *command, char **argv, int argc)
 > +{
 > +  char *exec_path;
 > +  char *env;
 > +  int reset = 0;
 > +  int optind = 0;
 > +  int i;
 > +  char *optarg;
 > +  enum opt
 > +    {
 > +      RESET_OPT
 > +    };
 > +  static struct mi_opt opts[] =
 > +  {
 > +    {"r", RESET_OPT, 0},
 > +    0
 > +  };
 > +
 > +  dont_repeat ();
 > +
 > +  if (mi_version (uiout) < 2)
 > +    {
 > +      for (i = argc - 1; i >= 0; --i)
 > +	env_execute_cli_command ("path %s", argv[i]);
 > +      return MI_CMD_DONE;
 > +    }
 > +
 > +  /* Otherwise the mi level is 2 or higher.  */
 > +  while (1)
 > +    {
 > +      int opt = mi_getopt ("mi_cmd_env_path", argc, argv, opts,
 > +                           &optind, &optarg);
 > +      if (opt < 0)
 > +        break;
 > +      switch ((enum opt) opt)
 > +        {
 > +        case RESET_OPT:
 > +          reset = 1;
 > +          break;
 > +        }
 > +    }
 > +  argv += optind;
 > +  argc -= optind;
 > +
 > +
 > +  if (reset)
 > +    {
 > +      /* Reset implies resetting to original path first.  */
 > +      exec_path = xstrdup (orig_path);
 > +    }
 > +  else
 > +    {
 > +      /* Otherwise, get current path to modify.  */
 > +      env = get_in_environ (inferior_environ, path_var_name);
 > +
 > +      /* Can be null if path is not set.  */
 > +      if (!env)
 > +        env = "";
 > +      exec_path = xstrdup (env);
 > +    }
 > +
 > +  for (i = argc - 1; i >= 0; --i)
 > +    env_mod_path (argv[i], &exec_path);
 > +
 > +  set_in_environ (inferior_environ, path_var_name, exec_path);
 > +  xfree (exec_path);
 > +  env = get_in_environ (inferior_environ, path_var_name);
 > +  ui_out_field_string (uiout, "path", env);
 > +
 > +  return MI_CMD_DONE;
 > +}
 > +
 > +/* Add zero or more directories to the front of the source path.  */
 > +enum mi_cmd_result
 > +mi_cmd_env_dir (char *command, char **argv, int argc)
 > +{
 > +  int i;
 > +  int optind = 0;
 > +  int reset = 0;
 > +  char *optarg;
 > +  enum opt
 > +    {
 > +      RESET_OPT
 > +    };
 > +  static struct mi_opt opts[] =
 > +  {
 > +    {"r", RESET_OPT, 0},
 > +    0
 > +  };
 > +
 > +  dont_repeat ();
 > +
 > +  if (mi_version (uiout) < 2)
 > +    {
 > +      for (i = argc - 1; i >= 0; --i)
 > +	env_execute_cli_command ("dir %s", argv[i]);
 > +      return MI_CMD_DONE;
 > +    }
 > +
 > +  /* Otherwise mi level is 2 or higher.  */
 > +  while (1)
 > +    {
 > +      int opt = mi_getopt ("mi_cmd_env_dir", argc, argv, opts,
 > +                           &optind, &optarg);
 > +      if (opt < 0)
 > +        break;
 > +      switch ((enum opt) opt)
 > +        {
 > +        case RESET_OPT:
 > +          reset = 1;
 > +          break;
 > +        }
 > +    }
 > +  argv += optind;
 > +  argc -= optind;
 > +
 > +  if (reset)
 > +    {
 > +      /* Reset means setting to default path first.  */
 > +      xfree (source_path);
 > +      init_source_path ();
 > +    }
 > +
 > +  for (i = argc - 1; i >= 0; --i)
 > +    env_mod_path (argv[i], &source_path);
 > +  init_last_source_visited ();
 > +
 > +  ui_out_field_string (uiout, "source-path", source_path);
 > +  forget_cached_source_info ();
 > +
 > +  return MI_CMD_DONE;
 > +}
 > +
 > +void 
 > +_initialize_mi_cmd_env (void)
 > +{
 > +  char *env;
 > +
 > +  /* We want original execution path to reset to, if desired later.  */
 > +  env = get_in_environ (inferior_environ, path_var_name);
 > +
 > +  /* Can be null if path is not set.  */
 > +  if (!env)
 > +    env = "";
 > +  orig_path = xstrdup (env);
 > +}
 > Index: mi-cmds.h
 > ===================================================================
 > RCS file: /cvs/src/src/gdb/mi/mi-cmds.h,v
 > retrieving revision 1.5
 > diff -u -r1.5 mi-cmds.h
 > --- mi-cmds.h	6 Mar 2001 08:21:45 -0000	1.5
 > +++ mi-cmds.h	10 Dec 2002 00:16:45 -0000
 > @@ -64,6 +64,10 @@
 >  extern mi_cmd_argv_ftype mi_cmd_data_read_memory;
 >  extern mi_cmd_argv_ftype mi_cmd_data_write_memory;
 >  extern mi_cmd_argv_ftype mi_cmd_data_write_register_values;
 > +extern mi_cmd_argv_ftype mi_cmd_env_cd;
 > +extern mi_cmd_argv_ftype mi_cmd_env_dir;
 > +extern mi_cmd_argv_ftype mi_cmd_env_path;
 > +extern mi_cmd_argv_ftype mi_cmd_env_pwd;
 >  extern mi_cmd_args_ftype mi_cmd_exec_continue;
 >  extern mi_cmd_args_ftype mi_cmd_exec_finish;
 >  extern mi_cmd_args_ftype mi_cmd_exec_next;
 > Index: mi-cmds.c
 > ===================================================================
 > RCS file: /cvs/src/src/gdb/mi/mi-cmds.c,v
 > retrieving revision 1.8
 > diff -u -r1.8 mi-cmds.c
 > --- mi-cmds.c	6 Mar 2001 08:21:45 -0000	1.8
 > +++ mi-cmds.c	10 Dec 2002 00:16:45 -0000
 > @@ -56,10 +56,10 @@
 >    {"display-enable", 0, 0},
 >    {"display-insert", 0, 0},
 >    {"display-list", 0, 0},
 > -  {"environment-cd", "cd %s", 0},
 > -  {"environment-directory", "dir %s", 0},
 > -  {"environment-path", "path %s", 0},
 > -  {"environment-pwd", "pwd", 0},
 > +  {"environment-cd", 0, 0, mi_cmd_env_cd},
 > +  {"environment-directory", 0, 0, mi_cmd_env_dir},
 > +  {"environment-path", 0, 0, mi_cmd_env_path},
 > +  {"environment-pwd", 0, 0, mi_cmd_env_pwd},
 >    {"exec-abort", 0, 0},
 >    {"exec-arguments", "set args %s", 0},
 >    {"exec-continue", 0, mi_cmd_exec_continue},
 > Index: testsuite/gdb.mi/mi-basics.exp
 > ===================================================================
 > RCS file: /cvs/src/src/gdb/testsuite/gdb.mi/mi-basics.exp,v
 > retrieving revision 1.6
 > diff -u -r1.6 mi-basics.exp
 > --- testsuite/gdb.mi/mi-basics.exp	27 Jun 2001 17:27:07 -0000	1.6
 > +++ testsuite/gdb.mi/mi-basics.exp	10 Dec 2002 00:18:48 -0000
 > @@ -148,26 +148,98 @@
 >      global srcdir
 >      global subdir
 >  
 > -    # Clear the search directories, then specify one to be searched
 > +    # Add to the search directories, display, then reset back to default
 >      # Tests:
 > -    # -environment-directory
 >      # -environment-directory arg
 > +    # -environment-directory 
 > +    # -environment-directory -r
 >  
 >  #exp_internal 1
 > -    mi_gdb_test "202-environment-directory" \
 > -             "\\\^done" \
 > +    mi_gdb_test "202-environment-directory ${srcdir}/${subdir}" \
 > +             "\\\^done,source-path=\"${srcdir}/${subdir}:\\\$cdir:\\\$cwd\"" \
 > +             "environment-directory arg operation"
 > +
 > +    mi_gdb_test "203-environment-directory" \
 > +             "\\\^done,source-path=\"${srcdir}/${subdir}:\\\$cdir:\\\$cwd\"" \
 > +             "environment-directory empty-string operation"
 > +
 > +    mi_gdb_test "204-environment-directory -r" \
 > +             "\\\^done,source-path=\"\\\$cdir:\\\$cwd\"" \
 >               "environment-directory operation"
 >  
 > -    mi_gdb_test "203-environment-directory ${srcdir}/${subdir}" \
 > -             "\\\^done" \
 > -             "environment-directory arg operation"
 >  #exp_internal 0
 >  }
 >  
 > +proc test_cwd_specification {} {
 > +    global mi_gdb_prompt
 > +    global objdir
 > +    global subdir
 > +
 > +    # Change the working directory, then print the current working directory
 > +    # Tests:
 > +    # -environment-cd ${objdir}
 > +    # -environment-pwd
 > +
 > +    mi_gdb_test "205-environment-cd ${objdir}" \
 > +             "\\\^done" \
 > +             "environment-cd arg operation"
 > +
 > +    mi_gdb_test "206-environment-pwd" \
 > +             "\\\^done,cwd=\"${objdir}\"" \
 > +             "environment-pwd operation"
 > +}
 > +
 > +proc test_path_specification {} {
 > +    global mi_gdb_prompt
 > +    global orig_path
 > +    global objdir
 > +    global srcdir
 > +
 > +    # Add to the path, display, then reset 
 > +    # Tests:
 > +    # -environment-path 
 > +    # -environment-path dir1 dir2
 > +    # -environment-path -r dir
 > +    # -environment-path -r
 > +
 > +#exp_internal 1
 > +
 > +    send_gdb "-environment-path\n"
 > +    gdb_expect 20 {
 > +	-re "\\\^done,path=\"\(.*\)\"\r\n$mi_gdb_prompt" { 
 > +	  set orig_path $expect_out(1,string); 
 > +	}
 > +	timeout { 
 > +	  perror "-environment-path (timeout)" ; 
 > +	  return 
 > +	}
 > +    }
 > +
 > +    mi_gdb_test "207-environment-path" \
 > +             "\\\^done,path=\"$orig_path\"" \
 > +             "environment-path no-args operation"
 > +
 > +    mi_gdb_test "208-environment-path $srcdir $objdir" \
 > +             "\\\^done,path=\"$srcdir:$objdir:$orig_path\"" \
 > +             "environment-path dir1 dir2 operation"
 > +
 > +    mi_gdb_test "209-environment-path -r $objdir" \
 > +             "\\\^done,path=\"$objdir:$orig_path\"" \
 > +             "environment-path -r dir operation"
 > +
 > +    mi_gdb_test "210-environment-path -r" \
 > +             "\\\^done,path=\"$orig_path\"" \
 > +             "environment-path -r operation"
 > +
 > +#exp_internal 0
 > +} 
 > +
 >  if [test_mi_interpreter_selection] {
 >    test_exec_and_symbol_mi_operatons
 >    test_breakpoints_deletion
 >    test_dir_specification
 > +  test_cwd_specification
 > +  test_path_specification
 >  }
 >  
 >  mi_gdb_exit
 > Index: gdbmi.texinfo
 > ===================================================================
 > RCS file: /cvs/src/src/gdb/mi/gdbmi.texinfo,v
 > retrieving revision 1.30
 > diff -u -r1.30 gdbmi.texinfo
 > --- gdbmi.texinfo	11 Nov 2002 17:09:50 -0000	1.30
 > +++ gdbmi.texinfo	10 Dec 2002 00:12:25 -0000
 > @@ -1665,10 +1665,18 @@
 >  @subsubheading Synopsis
 >  
 >  @example
 > - -environment-directory @var{pathdir}
 > + -environment-directory [ -r ] [ @var{pathdir} ]+
 >  @end example
 >  
 > -Add directory @var{pathdir} to beginning of search path for source files.
 > +Add directories @var{pathdir} to beginning of search path for source files.
 > +If the @samp{-r} option is used, the search path is reset to the default
 > +search path.  If directories @var{pathdir} are supplied in addition to the 
 > +@samp{-r} option, the search path is first reset and then addition
 > +occurs as normal.
 > +Specifying multiple directories in a single command
 > +results in the directories added to the beginning of the
 > +search path in the same order they were presented in the command.
 > +If no directories are specified, the current search path is displayed.
 >  
 >  @subsubheading @value{GDBN} Command
 >  
 > @@ -1679,7 +1687,16 @@
 >  @smallexample
 >  (@value{GDBP})
 >  -environment-directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
 > -^done
 > +^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
 > +(@value{GDBP})
 > +-environment-directory ""
 > +^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
 > +(@value{GDBP})
 > +-environment-directory -r /home/jjohnstn/src/gdb
 > +^done,source-path="/home/jjohnstn/src/gdb:$cdir:$cwd"
 > +(@value{GDBP})
 > +-environment-directory -r
 > +^done,source-path="$cdir:$cwd"
 >  (@value{GDBP})
 >  @end smallexample
 >  
 > @@ -1690,10 +1707,19 @@
 >  @subsubheading Synopsis
 >  
 >  @example
 > - -environment-path ( @var{pathdir} )+
 > + -environment-path [ -r ] [ @var{pathdir} ]+
 >  @end example
 >  
 >  Add directories @var{pathdir} to beginning of search path for object files.
 > +If the @samp{-r} option is used, the search path is reset to the original
 > +search path that existed at gdb start-up.  If directories @var{pathdir} are 
 > +supplied in addition to the 
 > +@samp{-r} option, the search path is first reset and then addition
 > +occurs as normal.
 > +Specifying multiple directories in a single command
 > +results in the directories added to the beginning of the
 > +search path in the same order they were presented in the command.
 > +If no directories are specified, the current path is displayed.
 >  
 >  @subsubheading @value{GDBN} Command
 >  
 > @@ -1703,8 +1729,14 @@
 >  
 >  @smallexample
 >  (@value{GDBP})
 > +-environment-path 
 > +^done,path="/usr/bin"
 > +(@value{GDBP})
 >  -environment-path /kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb
 > -^done
 > +^done,path="/kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb:/usr/bin"
 > +(@value{GDBP})
 > +-environment-path -r /usr/local/bin
 > +^done,path="/usr/local/bin:/usr/bin"
 >  (@value{GDBP})
 >  @end smallexample
 >  
 > @@ -1729,8 +1761,7 @@
 >  @smallexample
 >  (@value{GDBP})
 >  -environment-pwd
 > -~Working directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb.
 > -^done
 > +^done,cwd="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb"
 >  (@value{GDBP})
 >  @end smallexample
 >  



More information about the Gdb-patches mailing list