Fix elf64-ppc.c electric fence warning
[deliverable/binutils-gdb.git] / gdb / common / buffer.c
index 37b7b55f7488d35899cd0546a2e15177b1dd03a1..28b2625f069301ccf1994e4918d94a0f1b3f2e00 100644 (file)
@@ -1,6 +1,6 @@
 /* A simple growing buffer for GDB.
   
-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
+   Copyright (C) 2009-2015 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifdef GDBSERVER
-#include "server.h"
-#else
-#include "defs.h"
-#endif
-
+#include "common-defs.h"
 #include "xml-utils.h"
 #include "buffer.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
+#include "inttypes.h"
+#include <stdint.h>
 
 void
 buffer_grow (struct buffer *buffer, const char *data, size_t size)
@@ -47,8 +40,6 @@ buffer_grow (struct buffer *buffer, const char *data, size_t size)
   while (buffer->used_size + size > new_buffer_size)
     new_buffer_size *= 2;
   new_buffer = xrealloc (buffer->buffer, new_buffer_size);
-  if (!new_buffer)
-    abort ();
   memcpy (new_buffer + buffer->used_size, data, size);
   buffer->buffer = new_buffer;
   buffer->buffer_size = new_buffer_size;
@@ -101,6 +92,7 @@ buffer_xml_printf (struct buffer *buffer, const char *format, ...)
          char buf[32];
          char *p;
          char *str = buf;
+         const char *f_old = f;
          
          switch (*f)
            {
@@ -119,14 +111,60 @@ buffer_xml_printf (struct buffer *buffer, const char *format, ...)
            case 'o':
              sprintf (str, "%o", va_arg (ap, unsigned int));
              break;
+           case 'l':
+             f++;
+             switch (*f)
+               {
+               case 'd':
+                 sprintf (str, "%ld", va_arg (ap, long));
+                 break;
+               case 'u':
+                 sprintf (str, "%lu", va_arg (ap, unsigned long));
+                 break;
+               case 'x':
+                 sprintf (str, "%lx", va_arg (ap, unsigned long));
+                 break;
+               case 'o':
+                 sprintf (str, "%lo", va_arg (ap, unsigned long));
+                 break;
+               case 'l':
+                 f++;
+                 switch (*f)
+                   {
+                   case 'd':
+                     sprintf (str, "%" PRId64,
+                              (int64_t) va_arg (ap, long long));
+                     break;
+                   case 'u':
+                     sprintf (str, "%" PRIu64,
+                              (uint64_t) va_arg (ap, unsigned long long));
+                     break;
+                   case 'x':
+                     sprintf (str, "%" PRIx64,
+                              (uint64_t) va_arg (ap, unsigned long long));
+                     break;
+                   case 'o':
+                     sprintf (str, "%" PRIo64,
+                              (uint64_t) va_arg (ap, unsigned long long));
+                     break;
+                   default:
+                     str = 0;
+                     break;
+                   }
+                 break;
+               default:
+                 str = 0;
+                 break;
+               }
+             break;
            default:
              str = 0;
              break;
            }
-         
+
          if (str)
            {
-             buffer_grow (buffer, prev, f - prev - 1);
+             buffer_grow (buffer, prev, f_old - prev - 1);
              p = xml_escape_text (str);
              buffer_grow_str (buffer, p);
              xfree (p);
This page took 0.025692 seconds and 4 git commands to generate.