* cris-dis.c (format_hex): Remove ineffective warning fix.
[deliverable/binutils-gdb.git] / gdb / utils.c
index 1d84967f6f5e3629da1937a0898b35f0faced6e1..9c27b495e06a2c6a7cb2f21df7727e1876760c30 100644 (file)
@@ -1,8 +1,8 @@
 /* General utility routines for GDB, the GNU debugger.
 
    Copyright 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
-   1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
-   Foundation, Inc.
+   1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free
+   Software Foundation, Inc.
 
    This file is part of GDB.
 
 
 #include "readline/readline.h"
 
-#ifdef NEED_DECLARATION_MALLOC
+#if !HAVE_DECL_MALLOC
 extern PTR malloc ();          /* OK: PTR */
 #endif
-#ifdef NEED_DECLARATION_REALLOC
+#if !HAVE_DECL_REALLOC
 extern PTR realloc ();         /* OK: PTR */
 #endif
-#ifdef NEED_DECLARATION_FREE
+#if !HAVE_DECL_FREE
 extern void free ();
 #endif
-/* Actually, we'll never have the decl, since we don't define _GNU_SOURCE.  */
-#if defined(HAVE_CANONICALIZE_FILE_NAME) \
-    && defined(NEED_DECLARATION_CANONICALIZE_FILE_NAME)
-extern char *canonicalize_file_name (const char *);
-#endif
 
 /* readline defines this.  */
 #undef savestring
@@ -416,7 +411,7 @@ free_current_contents (void *ptr)
   void **location = ptr;
   if (location == NULL)
     internal_error (__FILE__, __LINE__,
-                   "free_current_contents: NULL pointer");
+                   _("free_current_contents: NULL pointer"));
   if (*location != NULL)
     {
       xfree (*location);
@@ -641,38 +636,13 @@ fatal (const char *string, ...)
   va_end (args);
 }
 
-/* Cause a silent error to occur.  Any error message is recorded
-   though it is not issued.  */
-NORETURN void
-error_silent (const char *string, ...)
-{
-  va_list args;
-  va_start (args, string);
-  throw_vsilent (string, args);
-  va_end (args);
-}
-
-/* Output an error message including any pre-print text to gdb_stderr.  */
-void
-error_output_message (char *pre_print, char *msg)
-{
-  target_terminal_ours ();
-  wrap_here ("");              /* Force out any buffered output */
-  gdb_flush (gdb_stdout);
-  annotate_error_begin ();
-  if (pre_print)
-    fputs_filtered (pre_print, gdb_stderr);
-  fputs_filtered (msg, gdb_stderr);
-  fprintf_filtered (gdb_stderr, "\n");
-}
-
 NORETURN void
 error_stream (struct ui_file *stream)
 {
   long len;
   char *message = ui_file_xstrdup (stream, &len);
   make_cleanup (xfree, message);
-  error ("%s", message);
+  error (("%s"), message);
 }
 
 /* Print a message reporting an internal error/warning. Ask the user
@@ -746,7 +716,7 @@ further debugging may prove unreliable.", file, line, problem->name, msg);
       /* Default (yes/batch case) is to quit GDB.  When in batch mode
          this lessens the likelhood of GDB going into an infinate
          loop.  */
-      quit_p = query ("%s\nQuit this debugging session? ", reason);
+      quit_p = query (_("%s\nQuit this debugging session? "), reason);
       break;
     case AUTO_BOOLEAN_TRUE:
       quit_p = 1;
@@ -755,7 +725,7 @@ further debugging may prove unreliable.", file, line, problem->name, msg);
       quit_p = 0;
       break;
     default:
-      internal_error (__FILE__, __LINE__, "bad switch");
+      internal_error (__FILE__, __LINE__, _("bad switch"));
     }
 
   switch (problem->should_dump_core)
@@ -764,7 +734,7 @@ further debugging may prove unreliable.", file, line, problem->name, msg);
       /* Default (yes/batch case) is to dump core.  This leaves a GDB
          `dropping' so that it is easier to see that something went
          wrong in GDB.  */
-      dump_core_p = query ("%s\nCreate a core file of GDB? ", reason);
+      dump_core_p = query (_("%s\nCreate a core file of GDB? "), reason);
       break;
       break;
     case AUTO_BOOLEAN_TRUE:
@@ -774,7 +744,7 @@ further debugging may prove unreliable.", file, line, problem->name, msg);
       dump_core_p = 0;
       break;
     default:
-      internal_error (__FILE__, __LINE__, "bad switch");
+      internal_error (__FILE__, __LINE__, _("bad switch"));
     }
 
   if (quit_p)
@@ -804,7 +774,7 @@ NORETURN void
 internal_verror (const char *file, int line, const char *fmt, va_list ap)
 {
   internal_vproblem (&internal_error_problem, file, line, fmt, ap);
-  throw_reason (RETURN_ERROR);
+  deprecated_throw_reason (RETURN_ERROR);
 }
 
 NORETURN void
@@ -876,7 +846,7 @@ perror_with_name (const char *string)
   bfd_set_error (bfd_error_no_error);
   errno = 0;
 
-  error ("%s.", combined);
+  error (_("%s."), combined);
 }
 
 /* Print the system error message for ERRCODE, and also mention STRING
@@ -905,47 +875,19 @@ print_sys_errmsg (const char *string, int errcode)
 void
 quit (void)
 {
-  struct serial *gdb_stdout_serial = serial_fdopen (1);
-
-  target_terminal_ours ();
-
-  /* We want all output to appear now, before we print "Quit".  We
-     have 3 levels of buffering we have to flush (it's possible that
-     some of these should be changed to flush the lower-level ones
-     too):  */
-
-  /* 1.  The _filtered buffer.  */
-  wrap_here ((char *) 0);
-
-  /* 2.  The stdio buffer.  */
-  gdb_flush (gdb_stdout);
-  gdb_flush (gdb_stderr);
-
-  /* 3.  The system-level buffer.  */
-  serial_drain_output (gdb_stdout_serial);
-  serial_un_fdopen (gdb_stdout_serial);
-
-  annotate_error_begin ();
-
-  /* Don't use *_filtered; we don't want to prompt the user to continue.  */
-  if (quit_pre_print)
-    fputs_unfiltered (quit_pre_print, gdb_stderr);
-
 #ifdef __MSDOS__
   /* No steenking SIGINT will ever be coming our way when the
      program is resumed.  Don't lie.  */
-  fprintf_unfiltered (gdb_stderr, "Quit\n");
+  fatal ("Quit");
 #else
   if (job_control
       /* If there is no terminal switching for this target, then we can't
          possibly get screwed by the lack of job control.  */
       || current_target.to_terminal_ours == NULL)
-    fprintf_unfiltered (gdb_stderr, "Quit\n");
+    fatal ("Quit");
   else
-    fprintf_unfiltered (gdb_stderr,
-                       "Quit (expect signal SIGINT when the program is resumed)\n");
+    fatal ("Quit (expect signal SIGINT when the program is resumed)");
 #endif
-  throw_reason (RETURN_QUIT);
 }
 
 /* Control C comes here */
@@ -970,12 +912,12 @@ nomem (long size)
   if (size > 0)
     {
       internal_error (__FILE__, __LINE__,
-                     "virtual memory exhausted: can't allocate %ld bytes.",
+                     _("virtual memory exhausted: can't allocate %ld bytes."),
                      size);
     }
   else
     {
-      internal_error (__FILE__, __LINE__, "virtual memory exhausted.");
+      internal_error (__FILE__, __LINE__, _("virtual memory exhausted."));
     }
 }
 
@@ -1005,6 +947,12 @@ xmalloc (size_t size)
   return (val);
 }
 
+void *
+xzalloc (size_t size)
+{
+  return xcalloc (1, size);
+}
+
 PTR                            /* OK: PTR */
 xrealloc (PTR ptr, size_t size)        /* OK: PTR */
 {
@@ -1094,7 +1042,7 @@ xstrvprintf (const char *format, va_list ap)
      should never happen, but just to be sure.  */
   if (status < 0)
     internal_error (__FILE__, __LINE__,
-                   "vasprintf call failed (errno %d)", errno);
+                   _("vasprintf call failed (errno %d)"), errno);
   return ret;
 }
 
@@ -1182,15 +1130,15 @@ query (const char *ctlstr, ...)
       gdb_flush (gdb_stdout);
 
       if (annotation_level > 1)
-       printf_filtered ("\n\032\032pre-query\n");
+       printf_filtered (("\n\032\032pre-query\n"));
 
       va_start (args, ctlstr);
       vfprintf_filtered (gdb_stdout, ctlstr, args);
       va_end (args);
-      printf_filtered ("(y or n) ");
+      printf_filtered (_("(y or n) "));
 
       if (annotation_level > 1)
-       printf_filtered ("\n\032\032query\n");
+       printf_filtered (("\n\032\032query\n"));
 
       wrap_here ("");
       gdb_flush (gdb_stdout);
@@ -1223,11 +1171,11 @@ query (const char *ctlstr, ...)
          retval = 0;
          break;
        }
-      printf_filtered ("Please answer y or n.\n");
+      printf_filtered (_("Please answer y or n.\n"));
     }
 
   if (annotation_level > 1)
-    printf_filtered ("\n\032\032post-query\n");
+    printf_filtered (("\n\032\032post-query\n"));
   return retval;
 }
 \f
@@ -1284,13 +1232,13 @@ defaulted_query (const char *ctlstr, const char defchar, va_list args)
       gdb_flush (gdb_stdout);
 
       if (annotation_level > 1)
-       printf_filtered ("\n\032\032pre-query\n");
+       printf_filtered (("\n\032\032pre-query\n"));
 
       vfprintf_filtered (gdb_stdout, ctlstr, args);
-      printf_filtered ("(%s or %s) ", y_string, n_string);
+      printf_filtered (_("(%s or %s) "), y_string, n_string);
 
       if (annotation_level > 1)
-       printf_filtered ("\n\032\032query\n");
+       printf_filtered (("\n\032\032query\n"));
 
       wrap_here ("");
       gdb_flush (gdb_stdout);
@@ -1329,12 +1277,12 @@ defaulted_query (const char *ctlstr, const char defchar, va_list args)
          break;
        }
       /* Invalid entries are not defaulted and require another selection.  */
-      printf_filtered ("Please answer %s or %s.\n",
+      printf_filtered (_("Please answer %s or %s.\n"),
                       y_string, n_string);
     }
 
   if (annotation_level > 1)
-    printf_filtered ("\n\032\032post-query\n");
+    printf_filtered (("\n\032\032post-query\n"));
   return retval;
 }
 \f
@@ -1384,7 +1332,7 @@ no_control_char_error (const char *start, const char *end)
   memcpy (copy, start, len);
   copy[len] = '\0';
 
-  error ("There is no control character `\\%s' in the `%s' character set.",
+  error (_("There is no control character `\\%s' in the `%s' character set."),
         copy, target_charset ());
 }
 
@@ -1432,8 +1380,8 @@ parse_escape (char **string_ptr)
              c = 0177;
 
              if (!host_char_to_target (c, &target_char))
-               error ("There is no character corresponding to `Delete' "
-                      "in the target character set `%s'.", host_charset ());
+               error (_("There is no character corresponding to `Delete' "
+                      "in the target character set `%s'."), host_charset ());
 
              return target_char;
            }
@@ -1718,7 +1666,7 @@ prompt_for_continue (void)
   char cont_prompt[120];
 
   if (annotation_level > 1)
-    printf_unfiltered ("\n\032\032pre-prompt-for-continue\n");
+    printf_unfiltered (("\n\032\032pre-prompt-for-continue\n"));
 
   strcpy (cont_prompt,
          "---Type <return> to continue, or q <return> to quit---");
@@ -1744,7 +1692,7 @@ prompt_for_continue (void)
   ignore = gdb_readline_wrapper (cont_prompt);
 
   if (annotation_level > 1)
-    printf_unfiltered ("\n\032\032post-prompt-for-continue\n");
+    printf_unfiltered (("\n\032\032post-prompt-for-continue\n"));
 
   if (ignore)
     {
@@ -1799,7 +1747,7 @@ wrap_here (char *indent)
 {
   /* This should have been allocated, but be paranoid anyway. */
   if (!wrap_buffer)
-    internal_error (__FILE__, __LINE__, "failed internal consistency check");
+    internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
 
   if (wrap_buffer[0])
     {
@@ -2498,49 +2446,59 @@ initialize_utils (void)
 {
   struct cmd_list_element *c;
 
-  c = add_set_cmd ("width", class_support, var_uinteger, &chars_per_line,
-                  "Set number of characters gdb thinks are in a line.",
-                  &setlist);
-  deprecated_add_show_from_set (c, &showlist);
-  set_cmd_sfunc (c, set_width_command);
+  add_setshow_uinteger_cmd ("width", class_support, &chars_per_line, _("\
+Set number of characters gdb thinks are in a line."), _("\
+Show number of characters gdb thinks are in a line."), NULL,
+                           set_width_command,
+                           NULL, /* FIXME: i18n: */
+                           &setlist, &showlist);
 
-  c = add_set_cmd ("height", class_support, var_uinteger, &lines_per_page,
-                  "Set number of lines gdb thinks are in a page.", &setlist);
-  deprecated_add_show_from_set (c, &showlist);
-  set_cmd_sfunc (c, set_height_command);
+  add_setshow_uinteger_cmd ("height", class_support, &lines_per_page, _("\
+Set number of lines gdb thinks are in a page."), _("\
+Show number of lines gdb thinks are in a page."), NULL,
+                           set_height_command,
+                           NULL, /* FIXME: i18n: */
+                           &setlist, &showlist);
 
   init_page_info ();
 
-  deprecated_add_show_from_set
-    (add_set_cmd ("demangle", class_support, var_boolean,
-                 (char *) &demangle,
-                 "Set demangling of encoded C++/ObjC names when displaying symbols.",
-                 &setprintlist), &showprintlist);
-
-  deprecated_add_show_from_set
-    (add_set_cmd ("pagination", class_support,
-                 var_boolean, (char *) &pagination_enabled,
-                 "Set state of pagination.", &setlist), &showlist);
+  add_setshow_boolean_cmd ("demangle", class_support, &demangle, _("\
+Set demangling of encoded C++/ObjC names when displaying symbols."), _("\
+Show demangling of encoded C++/ObjC names when displaying symbols."), NULL,
+                          NULL,
+                          NULL, /* FIXME: i18n: */
+                          &setprintlist, &showprintlist);
+
+  add_setshow_boolean_cmd ("pagination", class_support,
+                          &pagination_enabled, _("\
+Set state of pagination."), _("\
+Show state of pagination."), NULL,
+                          NULL,
+                          NULL, /* FIXME: i18n: */
+                          &setlist, &showlist);
 
   if (xdb_commands)
     {
       add_com ("am", class_support, pagination_on_command,
-              "Enable pagination");
+              _("Enable pagination"));
       add_com ("sm", class_support, pagination_off_command,
-              "Disable pagination");
+              _("Disable pagination"));
     }
 
-  deprecated_add_show_from_set
-    (add_set_cmd ("sevenbit-strings", class_support, var_boolean,
-                 (char *) &sevenbit_strings,
-                 "Set printing of 8-bit characters in strings as \\nnn.",
-                 &setprintlist), &showprintlist);
+  add_setshow_boolean_cmd ("sevenbit-strings", class_support,
+                          &sevenbit_strings, _("\
+Set printing of 8-bit characters in strings as \\nnn."), _("\
+Show printing of 8-bit characters in strings as \\nnn."), NULL,
+                          NULL,
+                          NULL, /* FIXME: i18n: */
+                          &setprintlist, &showprintlist);
 
-  deprecated_add_show_from_set
-    (add_set_cmd ("asm-demangle", class_support, var_boolean,
-                 (char *) &asm_demangle,
-                 "Set demangling of C++/ObjC names in disassembly listings.",
-                 &setprintlist), &showprintlist);
+  add_setshow_boolean_cmd ("asm-demangle", class_support, &asm_demangle, _("\
+Set demangling of C++/ObjC names in disassembly listings."), _("\
+Show demangling of C++/ObjC names in disassembly listings."), NULL,
+                          NULL,
+                          NULL, /* FIXME: i18n: */
+                          &setprintlist, &showprintlist);
 }
 
 /* Machine specific function to handle SIGWINCH signal. */
@@ -2580,6 +2538,25 @@ paddr_nz (CORE_ADDR addr)
   return phex_nz (addr, TARGET_ADDR_BIT / 8);
 }
 
+const char *
+paddress (CORE_ADDR addr)
+{
+  /* Truncate address to the size of a target address, avoiding shifts
+     larger or equal than the width of a CORE_ADDR.  The local
+     variable ADDR_BIT stops the compiler reporting a shift overflow
+     when it won't occur. */
+  /* NOTE: This assumes that the significant address information is
+     kept in the least significant bits of ADDR - the upper bits were
+     either zero or sign extended.  Should ADDRESS_TO_POINTER() or
+     some ADDRESS_TO_PRINTABLE() be used to do the conversion?  */
+
+  int addr_bit = TARGET_ADDR_BIT;
+
+  if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
+    addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
+  return hex_string (addr);
+}
+
 static void
 decimal2str (char *paddr_str, char *sign, ULONGEST addr, int width)
 {
@@ -2612,7 +2589,7 @@ decimal2str (char *paddr_str, char *sign, ULONGEST addr, int width)
       break;
     default:
       internal_error (__FILE__, __LINE__,
-                     "failed internal consistency check");
+                     _("failed internal consistency check"));
     }
 }
 
@@ -2649,7 +2626,7 @@ octal2str (char *paddr_str, ULONGEST addr, int width)
       break;
     default:
       internal_error (__FILE__, __LINE__,
-                     "failed internal consistency check");
+                     _("failed internal consistency check"));
     }
 }
 
@@ -2759,7 +2736,7 @@ hex_string_custom (LONGEST num, int width)
     width = hex_len;
   if (width + 2 >= CELLSIZE)
     internal_error (__FILE__, __LINE__,
-                   "hex_string_custom: insufficient space to store result");
+                   _("hex_string_custom: insufficient space to store result"));
 
   strcpy (result_end - width - 2, "0x");
   memset (result_end - width, '0', width);
@@ -2811,7 +2788,7 @@ int_string (LONGEST val, int radix, int is_signed, int width,
       }
     default:
       internal_error (__FILE__, __LINE__,
-                     "failed internal consistency check");
+                     _("failed internal consistency check"));
     }
 }      
 
@@ -2850,7 +2827,7 @@ string_to_core_addr (const char *my_string)
          else if (isxdigit (my_string[i]))
            addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16);
          else
-           internal_error (__FILE__, __LINE__, "invalid hex");
+           internal_error (__FILE__, __LINE__, _("invalid hex"));
        }
     }
   else
@@ -2862,7 +2839,7 @@ string_to_core_addr (const char *my_string)
          if (isdigit (my_string[i]))
            addr = (my_string[i] - '0') + (addr * 10);
          else
-           internal_error (__FILE__, __LINE__, "invalid decimal");
+           internal_error (__FILE__, __LINE__, _("invalid decimal"));
        }
     }
   return addr;
This page took 0.030862 seconds and 4 git commands to generate.