Index: gdb/macroexp.c |
diff --git a/gdb/macroexp.c b/gdb/macroexp.c |
index d5e4e40326301b36fb1d4cfd2cc602c08d0933f5..fa3431169ea3845832017b52b39b81a78e416047 100644 |
--- a/gdb/macroexp.c |
+++ b/gdb/macroexp.c |
@@ -113,6 +113,17 @@ free_buffer (struct macro_buffer *b) |
xfree (b->text); |
} |
+/* Like free_buffer, but return the text as an xstrdup()d string. |
+ This only exists to try to make the API relatively clean. */ |
+ |
+static char * |
+free_buffer_return_text (struct macro_buffer *b) |
+{ |
+ gdb_assert (! b->shared); |
+ gdb_assert (b->size); |
+ /* Nothing to do. */ |
+ return b->text; |
+} |
/* A cleanup function for macro buffers. */ |
static void |
@@ -639,7 +650,7 @@ append_tokens_without_splicing (struct macro_buffer *dest, |
stringify; it is LEN bytes long. */ |
static void |
-stringify (struct macro_buffer *dest, char *arg, int len) |
+stringify (struct macro_buffer *dest, const char *arg, int len) |
{ |
/* Trim initial whitespace from ARG. */ |
while (len > 0 && macro_is_whitespace (*arg)) |
@@ -682,6 +693,22 @@ stringify (struct macro_buffer *dest, char *arg, int len) |
dest->last_token = dest->len; |
} |
+/* See macroexp.h. */ |
+ |
+char * |
+macro_stringify (const char *str) |
+{ |
+ struct macro_buffer buffer; |
+ int len = strlen (str); |
+ char *result; |
+ |
+ init_buffer (&buffer, len); |
+ stringify (&buffer, str, len); |
+ appendc (&buffer, '\0'); |
+ |
+ return free_buffer_return_text (&buffer); |
+} |
+ |
/* Expanding macros! */ |