diff options
author | Kevin Buettner <kevinb@redhat.com> | 2002-09-20 00:24:01 +0000 |
---|---|---|
committer | Kevin Buettner <kevinb@redhat.com> | 2002-09-20 00:24:01 +0000 |
commit | 234b45d446cc127c7cbb5bfb39151b86795ffe3d (patch) | |
tree | 6a83f0d391193971249cf36509e216aae3e86a91 /gdb/c-lang.c | |
parent | bb7eb0390bd1fe1972169391683eeb79cbd986fd (diff) | |
download | gdb-234b45d446cc127c7cbb5bfb39151b86795ffe3d.zip gdb-234b45d446cc127c7cbb5bfb39151b86795ffe3d.tar.gz gdb-234b45d446cc127c7cbb5bfb39151b86795ffe3d.tar.bz2 |
Add support for distinct host and target character sets.
Diffstat (limited to 'gdb/c-lang.c')
-rw-r--r-- | gdb/c-lang.c | 62 |
1 files changed, 19 insertions, 43 deletions
diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 9c30483..6bbd6d9 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -29,6 +29,7 @@ #include "valprint.h" #include "macroscope.h" #include "gdb_assert.h" +#include "charset.h" extern void _initialize_c_language (void); static void c_emit_char (int c, struct ui_file * stream, int quoter); @@ -40,55 +41,30 @@ static void c_emit_char (int c, struct ui_file * stream, int quoter); static void c_emit_char (register int c, struct ui_file *stream, int quoter) { + const char *escape; + int host_char; + c &= 0xFF; /* Avoid sign bit follies */ - if (PRINT_LITERAL_FORM (c)) + escape = c_target_char_has_backslash_escape (c); + if (escape) { - if (c == '\\' || c == quoter) - { - fputs_filtered ("\\", stream); - } - fprintf_filtered (stream, "%c", c); + if (quoter == '"' && strcmp (escape, "0") == 0) + /* Print nulls embedded in double quoted strings as \000 to + prevent ambiguity. */ + fprintf_filtered (stream, "\\000"); + else + fprintf_filtered (stream, "\\%s", escape); } - else + else if (target_char_to_host (c, &host_char) + && host_char_print_literally (host_char)) { - switch (c) - { - case '\n': - fputs_filtered ("\\n", stream); - break; - case '\b': - fputs_filtered ("\\b", stream); - break; - case '\t': - fputs_filtered ("\\t", stream); - break; - case '\f': - fputs_filtered ("\\f", stream); - break; - case '\r': - fputs_filtered ("\\r", stream); - break; - case '\013': - fputs_filtered ("\\v", stream); - break; - case '\033': - fputs_filtered ("\\e", stream); - break; - case '\007': - fputs_filtered ("\\a", stream); - break; - case '\0': - if (quoter == '\'') - fputs_filtered ("\\0", stream); - else - fprintf_filtered (stream, "\\%.3o", (unsigned int) c); - break; - default: - fprintf_filtered (stream, "\\%.3o", (unsigned int) c); - break; - } + if (host_char == '\\' || host_char == quoter) + fputs_filtered ("\\", stream); + fprintf_filtered (stream, "%c", host_char); } + else + fprintf_filtered (stream, "\\%.3o", (unsigned int) c); } void |