gdb/mi/mi-cmd-env.c - gdb
Global variables defined
Functions defined
Source code
- #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"
- #include <sys/stat.h>
- 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;
- static void
- env_execute_cli_command (const char *cmd, const char *args)
- {
- if (cmd != 0)
- {
- struct cleanup *old_cleanups;
- char *run;
- if (args != NULL)
- run = xstrprintf ("%s %s", cmd, args);
- else
- run = xstrdup (cmd);
- old_cleanups = make_cleanup (xfree, run);
- execute_command ( run, 0 );
- do_cleanups (old_cleanups);
- return;
- }
- }
- void
- mi_cmd_env_pwd (char *command, char **argv, int argc)
- {
- struct ui_out *uiout = current_uiout;
- if (argc > 0)
- error (_("-environment-pwd: No arguments allowed"));
- if (mi_version (uiout) < 2)
- {
- env_execute_cli_command ("pwd", NULL);
- return;
- }
-
- if (! getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
- error (_("-environment-pwd: error finding name of working directory: %s"),
- safe_strerror (errno));
- ui_out_field_string (uiout, "cwd", gdb_dirbuf);
- }
- void
- mi_cmd_env_cd (char *command, char **argv, int argc)
- {
- if (argc == 0 || argc > 1)
- error (_("-environment-cd: Usage DIRECTORY"));
- env_execute_cli_command ("cd", argv[0]);
- }
- static void
- env_mod_path (char *dirname, char **which_path)
- {
- if (dirname == 0 || dirname[0] == '\0')
- return;
-
- add_path (dirname, which_path, 0);
- }
- void
- mi_cmd_env_path (char *command, char **argv, int argc)
- {
- struct ui_out *uiout = current_uiout;
- char *exec_path;
- char *env;
- int reset = 0;
- int oind = 0;
- int i;
- char *oarg;
- enum opt
- {
- RESET_OPT
- };
- static const struct mi_opt opts[] =
- {
- {"r", RESET_OPT, 0},
- { 0, 0, 0 }
- };
- dont_repeat ();
- if (mi_version (uiout) < 2)
- {
- for (i = argc - 1; i >= 0; --i)
- env_execute_cli_command ("path", argv[i]);
- return;
- }
-
- while (1)
- {
- int opt = mi_getopt ("-environment-path", argc, argv, opts,
- &oind, &oarg);
- if (opt < 0)
- break;
- switch ((enum opt) opt)
- {
- case RESET_OPT:
- reset = 1;
- break;
- }
- }
- argv += oind;
- argc -= oind;
- if (reset)
- {
-
- exec_path = xstrdup (orig_path);
- }
- else
- {
-
- env = get_in_environ (current_inferior ()->environment, path_var_name);
-
- if (!env)
- env = "";
- exec_path = xstrdup (env);
- }
- for (i = argc - 1; i >= 0; --i)
- env_mod_path (argv[i], &exec_path);
- set_in_environ (current_inferior ()->environment, path_var_name, exec_path);
- xfree (exec_path);
- env = get_in_environ (current_inferior ()->environment, path_var_name);
- ui_out_field_string (uiout, "path", env);
- }
- void
- mi_cmd_env_dir (char *command, char **argv, int argc)
- {
- struct ui_out *uiout = current_uiout;
- int i;
- int oind = 0;
- int reset = 0;
- char *oarg;
- enum opt
- {
- RESET_OPT
- };
- static const struct mi_opt opts[] =
- {
- {"r", RESET_OPT, 0},
- { 0, 0, 0 }
- };
- dont_repeat ();
- if (mi_version (uiout) < 2)
- {
- for (i = argc - 1; i >= 0; --i)
- env_execute_cli_command ("dir", argv[i]);
- return;
- }
-
- while (1)
- {
- int opt = mi_getopt ("-environment-directory", argc, argv, opts,
- &oind, &oarg);
- if (opt < 0)
- break;
- switch ((enum opt) opt)
- {
- case RESET_OPT:
- reset = 1;
- break;
- }
- }
- argv += oind;
- argc -= oind;
- if (reset)
- {
-
- xfree (source_path);
- init_source_path ();
- }
- for (i = argc - 1; i >= 0; --i)
- env_mod_path (argv[i], &source_path);
- ui_out_field_string (uiout, "source-path", source_path);
- forget_cached_source_info ();
- }
- void
- mi_cmd_inferior_tty_set (char *command, char **argv, int argc)
- {
- set_inferior_io_terminal (argv[0]);
- }
- void
- mi_cmd_inferior_tty_show (char *command, char **argv, int argc)
- {
- const char *inferior_io_terminal = get_inferior_io_terminal ();
- if ( !mi_valid_noargs ("-inferior-tty-show", argc, argv))
- error (_("-inferior-tty-show: Usage: No args"));
- if (inferior_io_terminal)
- ui_out_field_string (current_uiout,
- "inferior_tty_terminal", inferior_io_terminal);
- }
- void
- _initialize_mi_cmd_env (void)
- {
- struct gdb_environ *environment;
- char *env;
-
- environment = make_environ ();
- init_environ (environment);
- env = get_in_environ (environment, path_var_name);
-
- if (!env)
- env = "";
- orig_path = xstrdup (env);
- free_environ (environment);
- }