OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-6.8/] [gdb/] [mi/] [mi-cmd-env.c] - Diff between revs 157 and 816

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 157 Rev 816
/* MI Command Set - environment commands.
/* MI Command Set - environment commands.
 
 
   Copyright (C) 2002, 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
   Copyright (C) 2002, 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
 
 
   Contributed by Red Hat Inc.
   Contributed by Red Hat Inc.
 
 
   This file is part of GDB.
   This file is part of GDB.
 
 
   This program is free software; you can redistribute it and/or modify
   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
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
#include "defs.h"
#include "defs.h"
#include "inferior.h"
#include "inferior.h"
#include "value.h"
#include "value.h"
#include "mi-out.h"
#include "mi-out.h"
#include "mi-cmds.h"
#include "mi-cmds.h"
#include "mi-getopt.h"
#include "mi-getopt.h"
#include "symtab.h"
#include "symtab.h"
#include "target.h"
#include "target.h"
#include "environ.h"
#include "environ.h"
#include "command.h"
#include "command.h"
#include "ui-out.h"
#include "ui-out.h"
#include "top.h"
#include "top.h"
 
 
#include "gdb_string.h"
#include "gdb_string.h"
#include "gdb_stat.h"
#include "gdb_stat.h"
 
 
static void env_mod_path (char *dirname, char **which_path);
static void env_mod_path (char *dirname, char **which_path);
extern void _initialize_mi_cmd_env (void);
extern void _initialize_mi_cmd_env (void);
 
 
static const char path_var_name[] = "PATH";
static const char path_var_name[] = "PATH";
static char *orig_path = NULL;
static char *orig_path = NULL;
 
 
/* The following is copied from mi-main.c so for m1 and below we can
/* The following is copied from mi-main.c so for m1 and below we can
   perform old behavior and use cli commands.  If ARGS is non-null,
   perform old behavior and use cli commands.  If ARGS is non-null,
   append it to the CMD.  */
   append it to the CMD.  */
static void
static void
env_execute_cli_command (const char *cmd, const char *args)
env_execute_cli_command (const char *cmd, const char *args)
{
{
  if (cmd != 0)
  if (cmd != 0)
    {
    {
      struct cleanup *old_cleanups;
      struct cleanup *old_cleanups;
      char *run;
      char *run;
      if (args != NULL)
      if (args != NULL)
        run = xstrprintf ("%s %s", cmd, args);
        run = xstrprintf ("%s %s", cmd, args);
      else
      else
        run = xstrdup (cmd);
        run = xstrdup (cmd);
      old_cleanups = make_cleanup (xfree, run);
      old_cleanups = make_cleanup (xfree, run);
      execute_command ( /*ui */ run, 0 /*from_tty */ );
      execute_command ( /*ui */ run, 0 /*from_tty */ );
      do_cleanups (old_cleanups);
      do_cleanups (old_cleanups);
      return;
      return;
    }
    }
}
}
 
 
 
 
/* Print working directory.  */
/* Print working directory.  */
/* JPB: Some picky Ubuntu GCC compilers don't like the result of getcwd being
/* JPB: Some picky Ubuntu GCC compilers don't like the result of getcwd being
   ignored (even if you cast it to void). So capture the value and ignore
   ignored (even if you cast it to void). So capture the value and ignore
   THAT. */
   THAT. */
enum mi_cmd_result
enum mi_cmd_result
mi_cmd_env_pwd (char *command, char **argv, int argc)
mi_cmd_env_pwd (char *command, char **argv, int argc)
{
{
  char *res;                    /* For getcwd result */
  char *res;                    /* For getcwd result */
  if (argc > 0)
  if (argc > 0)
    error (_("mi_cmd_env_pwd: No arguments required"));
    error (_("mi_cmd_env_pwd: No arguments required"));
 
 
  if (mi_version (uiout) < 2)
  if (mi_version (uiout) < 2)
    {
    {
      env_execute_cli_command ("pwd", NULL);
      env_execute_cli_command ("pwd", NULL);
      return MI_CMD_DONE;
      return MI_CMD_DONE;
    }
    }
 
 
  /* Otherwise the mi level is 2 or higher.  */
  /* Otherwise the mi level is 2 or higher.  */
 
 
  res = getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));       /* JPB */
  res = getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));       /* JPB */
  ui_out_field_string (uiout, "cwd", gdb_dirbuf);
  ui_out_field_string (uiout, "cwd", gdb_dirbuf);
 
 
  return MI_CMD_DONE;
  return MI_CMD_DONE;
}
}
 
 
/* Change working directory.  */
/* Change working directory.  */
enum mi_cmd_result
enum mi_cmd_result
mi_cmd_env_cd (char *command, char **argv, int argc)
mi_cmd_env_cd (char *command, char **argv, int argc)
{
{
  if (argc == 0 || argc > 1)
  if (argc == 0 || argc > 1)
    error (_("mi_cmd_env_cd: Usage DIRECTORY"));
    error (_("mi_cmd_env_cd: Usage DIRECTORY"));
 
 
  env_execute_cli_command ("cd", argv[0]);
  env_execute_cli_command ("cd", argv[0]);
 
 
  return MI_CMD_DONE;
  return MI_CMD_DONE;
}
}
 
 
static void
static void
env_mod_path (char *dirname, char **which_path)
env_mod_path (char *dirname, char **which_path)
{
{
  if (dirname == 0 || dirname[0] == '\0')
  if (dirname == 0 || dirname[0] == '\0')
    return;
    return;
 
 
  /* Call add_path with last arg 0 to indicate not to parse for
  /* Call add_path with last arg 0 to indicate not to parse for
     separator characters.  */
     separator characters.  */
  add_path (dirname, which_path, 0);
  add_path (dirname, which_path, 0);
}
}
 
 
/* Add one or more directories to start of executable search path.  */
/* Add one or more directories to start of executable search path.  */
enum mi_cmd_result
enum mi_cmd_result
mi_cmd_env_path (char *command, char **argv, int argc)
mi_cmd_env_path (char *command, char **argv, int argc)
{
{
  char *exec_path;
  char *exec_path;
  char *env;
  char *env;
  int reset = 0;
  int reset = 0;
  int optind = 0;
  int optind = 0;
  int i;
  int i;
  char *optarg;
  char *optarg;
  enum opt
  enum opt
    {
    {
      RESET_OPT
      RESET_OPT
    };
    };
  static struct mi_opt opts[] =
  static struct mi_opt opts[] =
  {
  {
    {"r", RESET_OPT, 0},
    {"r", RESET_OPT, 0},
    { 0, 0, 0 }
    { 0, 0, 0 }
  };
  };
 
 
  dont_repeat ();
  dont_repeat ();
 
 
  if (mi_version (uiout) < 2)
  if (mi_version (uiout) < 2)
    {
    {
      for (i = argc - 1; i >= 0; --i)
      for (i = argc - 1; i >= 0; --i)
        env_execute_cli_command ("path", argv[i]);
        env_execute_cli_command ("path", argv[i]);
      return MI_CMD_DONE;
      return MI_CMD_DONE;
    }
    }
 
 
  /* Otherwise the mi level is 2 or higher.  */
  /* Otherwise the mi level is 2 or higher.  */
  while (1)
  while (1)
    {
    {
      int opt = mi_getopt ("mi_cmd_env_path", argc, argv, opts,
      int opt = mi_getopt ("mi_cmd_env_path", argc, argv, opts,
                           &optind, &optarg);
                           &optind, &optarg);
      if (opt < 0)
      if (opt < 0)
        break;
        break;
      switch ((enum opt) opt)
      switch ((enum opt) opt)
        {
        {
        case RESET_OPT:
        case RESET_OPT:
          reset = 1;
          reset = 1;
          break;
          break;
        }
        }
    }
    }
  argv += optind;
  argv += optind;
  argc -= optind;
  argc -= optind;
 
 
 
 
  if (reset)
  if (reset)
    {
    {
      /* Reset implies resetting to original path first.  */
      /* Reset implies resetting to original path first.  */
      exec_path = xstrdup (orig_path);
      exec_path = xstrdup (orig_path);
    }
    }
  else
  else
    {
    {
      /* Otherwise, get current path to modify.  */
      /* Otherwise, get current path to modify.  */
      env = get_in_environ (inferior_environ, path_var_name);
      env = get_in_environ (inferior_environ, path_var_name);
 
 
      /* Can be null if path is not set.  */
      /* Can be null if path is not set.  */
      if (!env)
      if (!env)
        env = "";
        env = "";
      exec_path = xstrdup (env);
      exec_path = xstrdup (env);
    }
    }
 
 
  for (i = argc - 1; i >= 0; --i)
  for (i = argc - 1; i >= 0; --i)
    env_mod_path (argv[i], &exec_path);
    env_mod_path (argv[i], &exec_path);
 
 
  set_in_environ (inferior_environ, path_var_name, exec_path);
  set_in_environ (inferior_environ, path_var_name, exec_path);
  xfree (exec_path);
  xfree (exec_path);
  env = get_in_environ (inferior_environ, path_var_name);
  env = get_in_environ (inferior_environ, path_var_name);
  ui_out_field_string (uiout, "path", env);
  ui_out_field_string (uiout, "path", env);
 
 
  return MI_CMD_DONE;
  return MI_CMD_DONE;
}
}
 
 
/* Add zero or more directories to the front of the source path.  */
/* Add zero or more directories to the front of the source path.  */
enum mi_cmd_result
enum mi_cmd_result
mi_cmd_env_dir (char *command, char **argv, int argc)
mi_cmd_env_dir (char *command, char **argv, int argc)
{
{
  int i;
  int i;
  int optind = 0;
  int optind = 0;
  int reset = 0;
  int reset = 0;
  char *optarg;
  char *optarg;
  enum opt
  enum opt
    {
    {
      RESET_OPT
      RESET_OPT
    };
    };
  static struct mi_opt opts[] =
  static struct mi_opt opts[] =
  {
  {
    {"r", RESET_OPT, 0},
    {"r", RESET_OPT, 0},
    { 0, 0, 0 }
    { 0, 0, 0 }
  };
  };
 
 
  dont_repeat ();
  dont_repeat ();
 
 
  if (mi_version (uiout) < 2)
  if (mi_version (uiout) < 2)
    {
    {
      for (i = argc - 1; i >= 0; --i)
      for (i = argc - 1; i >= 0; --i)
        env_execute_cli_command ("dir", argv[i]);
        env_execute_cli_command ("dir", argv[i]);
      return MI_CMD_DONE;
      return MI_CMD_DONE;
    }
    }
 
 
  /* Otherwise mi level is 2 or higher.  */
  /* Otherwise mi level is 2 or higher.  */
  while (1)
  while (1)
    {
    {
      int opt = mi_getopt ("mi_cmd_env_dir", argc, argv, opts,
      int opt = mi_getopt ("mi_cmd_env_dir", argc, argv, opts,
                           &optind, &optarg);
                           &optind, &optarg);
      if (opt < 0)
      if (opt < 0)
        break;
        break;
      switch ((enum opt) opt)
      switch ((enum opt) opt)
        {
        {
        case RESET_OPT:
        case RESET_OPT:
          reset = 1;
          reset = 1;
          break;
          break;
        }
        }
    }
    }
  argv += optind;
  argv += optind;
  argc -= optind;
  argc -= optind;
 
 
  if (reset)
  if (reset)
    {
    {
      /* Reset means setting to default path first.  */
      /* Reset means setting to default path first.  */
      xfree (source_path);
      xfree (source_path);
      init_source_path ();
      init_source_path ();
    }
    }
 
 
  for (i = argc - 1; i >= 0; --i)
  for (i = argc - 1; i >= 0; --i)
    env_mod_path (argv[i], &source_path);
    env_mod_path (argv[i], &source_path);
  init_last_source_visited ();
  init_last_source_visited ();
 
 
  ui_out_field_string (uiout, "source-path", source_path);
  ui_out_field_string (uiout, "source-path", source_path);
  forget_cached_source_info ();
  forget_cached_source_info ();
 
 
  return MI_CMD_DONE;
  return MI_CMD_DONE;
}
}
 
 
/* Set the inferior terminal device name.  */
/* Set the inferior terminal device name.  */
enum mi_cmd_result
enum mi_cmd_result
mi_cmd_inferior_tty_set (char *command, char **argv, int argc)
mi_cmd_inferior_tty_set (char *command, char **argv, int argc)
{
{
  set_inferior_io_terminal (argv[0]);
  set_inferior_io_terminal (argv[0]);
 
 
  return MI_CMD_DONE;
  return MI_CMD_DONE;
}
}
 
 
/* Print the inferior terminal device name  */
/* Print the inferior terminal device name  */
enum mi_cmd_result
enum mi_cmd_result
mi_cmd_inferior_tty_show (char *command, char **argv, int argc)
mi_cmd_inferior_tty_show (char *command, char **argv, int argc)
{
{
  const char *inferior_io_terminal = get_inferior_io_terminal ();
  const char *inferior_io_terminal = get_inferior_io_terminal ();
 
 
  if ( !mi_valid_noargs ("mi_cmd_inferior_tty_show", argc, argv))
  if ( !mi_valid_noargs ("mi_cmd_inferior_tty_show", argc, argv))
    error (_("mi_cmd_inferior_tty_show: Usage: No args"));
    error (_("mi_cmd_inferior_tty_show: Usage: No args"));
 
 
  if (inferior_io_terminal)
  if (inferior_io_terminal)
    ui_out_field_string (uiout, "inferior_tty_terminal", inferior_io_terminal);
    ui_out_field_string (uiout, "inferior_tty_terminal", inferior_io_terminal);
 
 
  return MI_CMD_DONE;
  return MI_CMD_DONE;
}
}
 
 
void
void
_initialize_mi_cmd_env (void)
_initialize_mi_cmd_env (void)
{
{
  char *env;
  char *env;
 
 
  /* We want original execution path to reset to, if desired later.  */
  /* We want original execution path to reset to, if desired later.  */
  env = get_in_environ (inferior_environ, path_var_name);
  env = get_in_environ (inferior_environ, path_var_name);
 
 
  /* Can be null if path is not set.  */
  /* Can be null if path is not set.  */
  if (!env)
  if (!env)
    env = "";
    env = "";
  orig_path = xstrdup (env);
  orig_path = xstrdup (env);
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.