/* A simple growing buffer for GDB.
- Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 2009-2019 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"
void
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 ();
+ new_buffer = (char *) xrealloc (buffer->buffer, new_buffer_size);
memcpy (new_buffer + buffer->used_size, data, size);
buffer->buffer = new_buffer;
buffer->buffer_size = new_buffer_size;
if (percent)
{
char buf[32];
- char *p;
char *str = buf;
+ const char *f_old = f;
switch (*f)
{
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);
- p = xml_escape_text (str);
- buffer_grow_str (buffer, p);
- xfree (p);
+ buffer_grow (buffer, prev, f_old - prev - 1);
+ std::string p = xml_escape_text (str);
+ buffer_grow_str (buffer, p.c_str ());
prev = f + 1;
}
percent = 0;