Automatic date update in version.in
[deliverable/binutils-gdb.git] / gdb / cli / cli-dump.c
index 248529df1650646dca06cb82fc1b0c3d86d45b07..481c3a28bc6a287f731be3308f5661d2c0eb83c2 100644 (file)
@@ -1,7 +1,6 @@
 /* Dump-to-file commands, for GDB, the GNU debugger.
 
-   Copyright (c) 2002, 2005, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   Copyright (C) 2002-2015 Free Software Foundation, Inc.
 
    Contributed by Red Hat.
 
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include "gdb_string.h"
 #include "cli/cli-decode.h"
 #include "cli/cli-cmds.h"
 #include "value.h"
 #include "completer.h"
-#include "cli/cli-dump.h"
-#include "gdb_assert.h"
 #include <ctype.h>
 #include "target.h"
 #include "readline/readline.h"
 #include "gdbcore.h"
 #include "cli/cli-utils.h"
+#include "gdb_bfd.h"
+#include "filestuff.h"
 
-#define XMALLOC(TYPE) ((TYPE*) xmalloc (sizeof (TYPE)))
 
-
-char *
-scan_expression_with_cleanup (char **cmd, const char *def)
+static const char *
+scan_expression_with_cleanup (const char **cmd, const char *def)
 {
   if ((*cmd) == NULL || (**cmd) == '\0')
     {
@@ -50,19 +46,19 @@ scan_expression_with_cleanup (char **cmd, const char *def)
   else
     {
       char *exp;
-      char *end;
+      const char *end;
 
       end = (*cmd) + strcspn (*cmd, " \t");
       exp = savestring ((*cmd), end - (*cmd));
       make_cleanup (xfree, exp);
-      (*cmd) = skip_spaces (end);
+      (*cmd) = skip_spaces_const (end);
       return exp;
     }
 }
 
 
-char *
-scan_filename_with_cleanup (char **cmd, const char *defname)
+static char *
+scan_filename_with_cleanup (const char **cmd, const char *defname)
 {
   char *filename;
   char *fullname;
@@ -80,13 +76,13 @@ scan_filename_with_cleanup (char **cmd, const char *defname)
   else
     {
       /* FIXME: should parse a possibly quoted string.  */
-      char *end;
+      const char *end;
 
-      (*cmd) = skip_spaces (*cmd);
+      (*cmd) = skip_spaces_const (*cmd);
       end = *cmd + strcspn (*cmd, " \t");
       filename = savestring ((*cmd), end - (*cmd));
       make_cleanup (xfree, filename);
-      (*cmd) = skip_spaces (end);
+      (*cmd) = skip_spaces_const (end);
     }
   gdb_assert (filename != NULL);
 
@@ -96,10 +92,10 @@ scan_filename_with_cleanup (char **cmd, const char *defname)
   return fullname;
 }
 
-FILE *
+static FILE *
 fopen_with_cleanup (const char *filename, const char *mode)
 {
-  FILE *file = fopen (filename, mode);
+  FILE *file = gdb_fopen_cloexec (filename, mode);
 
   if (file == NULL)
     perror_with_name (filename);
@@ -112,12 +108,12 @@ bfd_openr_with_cleanup (const char *filename, const char *target)
 {
   bfd *ibfd;
 
-  ibfd = bfd_openr (filename, target);
+  ibfd = gdb_bfd_openr (filename, target);
   if (ibfd == NULL)
     error (_("Failed to open %s: %s."), filename, 
           bfd_errmsg (bfd_get_error ()));
 
-  make_cleanup_bfd_close (ibfd);
+  make_cleanup_bfd_unref (ibfd);
   if (!bfd_check_format (ibfd, bfd_object))
     error (_("'%s' is not a recognized file format."), filename);
 
@@ -132,11 +128,11 @@ bfd_openw_with_cleanup (const char *filename, const char *target,
 
   if (*mode == 'w')    /* Write: create new file */
     {
-      obfd = bfd_openw (filename, target);
+      obfd = gdb_bfd_openw (filename, target);
       if (obfd == NULL)
        error (_("Failed to open %s: %s."), filename, 
               bfd_errmsg (bfd_get_error ()));
-      make_cleanup_bfd_close (obfd);
+      make_cleanup_bfd_unref (obfd);
       if (!bfd_set_format (obfd, bfd_object))
        error (_("bfd_openw_with_cleanup: %s."), bfd_errmsg (bfd_get_error ()));
     }
@@ -150,31 +146,31 @@ bfd_openw_with_cleanup (const char *filename, const char *target,
   return obfd;
 }
 
-struct cmd_list_element *dump_cmdlist;
-struct cmd_list_element *append_cmdlist;
-struct cmd_list_element *srec_cmdlist;
-struct cmd_list_element *ihex_cmdlist;
-struct cmd_list_element *tekhex_cmdlist;
-struct cmd_list_element *binary_dump_cmdlist;
-struct cmd_list_element *binary_append_cmdlist;
+static struct cmd_list_element *dump_cmdlist;
+static struct cmd_list_element *append_cmdlist;
+static struct cmd_list_element *srec_cmdlist;
+static struct cmd_list_element *ihex_cmdlist;
+static struct cmd_list_element *tekhex_cmdlist;
+static struct cmd_list_element *binary_dump_cmdlist;
+static struct cmd_list_element *binary_append_cmdlist;
 
 static void
 dump_command (char *cmd, int from_tty)
 {
   printf_unfiltered (_("\"dump\" must be followed by a subcommand.\n\n"));
-  help_list (dump_cmdlist, "dump ", -1, gdb_stdout);
+  help_list (dump_cmdlist, "dump ", all_commands, gdb_stdout);
 }
 
 static void
 append_command (char *cmd, int from_tty)
 {
   printf_unfiltered (_("\"append\" must be followed by a subcommand.\n\n"));
-  help_list (dump_cmdlist, "append ", -1, gdb_stdout);
+  help_list (dump_cmdlist, "append ", all_commands, gdb_stdout);
 }
 
 static void
 dump_binary_file (const char *filename, const char *mode, 
-                 const bfd_byte *buf, int len)
+                 const bfd_byte *buf, ULONGEST len)
 {
   FILE *file;
   int status;
@@ -188,7 +184,7 @@ dump_binary_file (const char *filename, const char *mode,
 static void
 dump_bfd_file (const char *filename, const char *mode, 
               const char *target, CORE_ADDR vaddr, 
-              const bfd_byte *buf, int len)
+              const bfd_byte *buf, ULONGEST len)
 {
   bfd *obfd;
   asection *osection;
@@ -208,16 +204,16 @@ dump_bfd_file (const char *filename, const char *mode,
 }
 
 static void
-dump_memory_to_file (char *cmd, char *mode, char *file_format)
+dump_memory_to_file (const char *cmd, const char *mode, const char *file_format)
 {
   struct cleanup *old_cleanups = make_cleanup (null_cleanup, NULL);
   CORE_ADDR lo;
   CORE_ADDR hi;
   ULONGEST count;
-  char *filename;
+  const char *filename;
   void *buf;
-  char *lo_exp;
-  char *hi_exp;
+  const char *lo_exp;
+  const char *hi_exp;
 
   /* Open the file.  */
   filename = scan_filename_with_cleanup (&cmd, NULL);
@@ -264,11 +260,11 @@ dump_memory_command (char *cmd, char *mode)
 }
 
 static void
-dump_value_to_file (char *cmd, char *mode, char *file_format)
+dump_value_to_file (const char *cmd, const char *mode, const char *file_format)
 {
   struct cleanup *old_cleanups = make_cleanup (null_cleanup, NULL);
   struct value *val;
-  char *filename;
+  const char *filename;
 
   /* Open the file.  */
   filename = scan_filename_with_cleanup (&cmd, NULL);
@@ -388,7 +384,7 @@ call_dump_func (struct cmd_list_element *c, char *args, int from_tty)
   d->func (args, d->mode);
 }
 
-void
+static void
 add_dump_command (char *name, void (*func) (char *args, char *mode),
                  char *descr)
 
@@ -398,7 +394,7 @@ add_dump_command (char *name, void (*func) (char *args, char *mode),
 
   c = add_cmd (name, all_commands, NULL, descr, &dump_cmdlist);
   c->completer =  filename_completer;
-  d = XMALLOC (struct dump_context);
+  d = XNEW (struct dump_context);
   d->func = func;
   d->mode = FOPEN_WB;
   set_cmd_context (c, d);
@@ -406,7 +402,7 @@ add_dump_command (char *name, void (*func) (char *args, char *mode),
 
   c = add_cmd (name, all_commands, NULL, descr, &append_cmdlist);
   c->completer =  filename_completer;
-  d = XMALLOC (struct dump_context);
+  d = XNEW (struct dump_context);
   d->func = func;
   d->mode = FOPEN_AB;
   set_cmd_context (c, d);
@@ -486,10 +482,10 @@ restore_section_callback (bfd *ibfd, asection *isec, void *args)
 
   if (data->load_offset != 0 || data->load_start != 0 || data->load_end != 0)
     printf_filtered (" into memory (%s to %s)\n",
-                    paddress (target_gdbarch,
+                    paddress (target_gdbarch (),
                               (unsigned long) sec_start
                               + sec_offset + data->load_offset), 
-                    paddress (target_gdbarch,
+                    paddress (target_gdbarch (),
                               (unsigned long) sec_start + sec_offset
                                + data->load_offset + sec_load_count));
   else
@@ -505,8 +501,9 @@ restore_section_callback (bfd *ibfd, asection *isec, void *args)
 }
 
 static void
-restore_binary_file (char *filename, struct callback_data *data)
+restore_binary_file (const char *filename, struct callback_data *data)
 {
+  struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
   FILE *file = fopen_with_cleanup (filename, FOPEN_RB);
   gdb_byte *buf;
   long len;
@@ -552,16 +549,17 @@ restore_binary_file (char *filename, struct callback_data *data)
   len = target_write_memory (data->load_start + data->load_offset, buf, len);
   if (len != 0)
     warning (_("restore: memory write failed (%s)."), safe_strerror (len));
-  return;
+  do_cleanups (cleanup);
 }
 
 static void
-restore_command (char *args, int from_tty)
+restore_command (char *args_in, int from_tty)
 {
   char *filename;
   struct callback_data data;
   bfd *ibfd;
   int binary_flag = 0;
+  const char *args = args_in;
 
   if (!target_has_execution)
     noprocess ();
@@ -581,7 +579,7 @@ restore_command (char *args, int from_tty)
        {
          binary_flag = 1;
          args += strlen (binary_string);
-         args = skip_spaces (args);
+         args = skip_spaces_const (args);
        }
       /* Parse offset (optional).  */
       if (args != NULL && *args != '\0')
@@ -627,35 +625,36 @@ static void
 srec_dump_command (char *cmd, int from_tty)
 {
   printf_unfiltered ("\"dump srec\" must be followed by a subcommand.\n");
-  help_list (srec_cmdlist, "dump srec ", -1, gdb_stdout);
+  help_list (srec_cmdlist, "dump srec ", all_commands, gdb_stdout);
 }
 
 static void
 ihex_dump_command (char *cmd, int from_tty)
 {
   printf_unfiltered ("\"dump ihex\" must be followed by a subcommand.\n");
-  help_list (ihex_cmdlist, "dump ihex ", -1, gdb_stdout);
+  help_list (ihex_cmdlist, "dump ihex ", all_commands, gdb_stdout);
 }
 
 static void
 tekhex_dump_command (char *cmd, int from_tty)
 {
   printf_unfiltered ("\"dump tekhex\" must be followed by a subcommand.\n");
-  help_list (tekhex_cmdlist, "dump tekhex ", -1, gdb_stdout);
+  help_list (tekhex_cmdlist, "dump tekhex ", all_commands, gdb_stdout);
 }
 
 static void
 binary_dump_command (char *cmd, int from_tty)
 {
   printf_unfiltered ("\"dump binary\" must be followed by a subcommand.\n");
-  help_list (binary_dump_cmdlist, "dump binary ", -1, gdb_stdout);
+  help_list (binary_dump_cmdlist, "dump binary ", all_commands, gdb_stdout);
 }
 
 static void
 binary_append_command (char *cmd, int from_tty)
 {
   printf_unfiltered ("\"append binary\" must be followed by a subcommand.\n");
-  help_list (binary_append_cmdlist, "append binary ", -1, gdb_stdout);
+  help_list (binary_append_cmdlist, "append binary ", all_commands,
+            gdb_stdout);
 }
 
 extern initialize_file_ftype _initialize_cli_dump; /* -Wmissing-prototypes */
This page took 0.030105 seconds and 4 git commands to generate.