Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Kevin Buettner <kevinb@redhat.com>
To: gdb-patches@sources.redhat.com
Cc: tromey@redhat.com, Jim Blandy <jimb@redhat.com>
Subject: Re: [PATCH RFC] Character set support
Date: Thu, 19 Sep 2002 17:36:00 -0000	[thread overview]
Message-ID: <1020920003625.ZM23109@localhost.localdomain> (raw)
In-Reply-To: Kevin Buettner <kevinb@redhat.com> "[PATCH RFC] Character set support" (Sep 12,  5:30pm)

On Sep 12,  5:30pm, Kevin Buettner wrote:

> I'll wait a week for comments after which time, if there are no
> objections, I'll commit it.
> 
> Kevin
> 
> gdb/ChangeLog:
> 2002-MM-DD  Jim Blandy  <jimb@redhat.com>
> 
> 	Add support for distinct host and target character sets.
> 	* charset.c, charset.h: New files.
> 	* c-exp.y: #include "charset.h".
> 	(yylex): Convert character and string literals to the target
> 	character set, before returning them as the semantic value of the
> 	token.
> 	* c-lang.c: #include "charset.h".
> 	(c_emit_char): Use charset-specific methods to recognize
> 	characters with backslash escape forms, to decide which characters
> 	to print literally and which to print using numeric escape
> 	sequences, and to convert target characters to host characters
> 	before printing.
> 	* utils.c: #include "charset.h".
> 	(no_control_char_error): New function.
> 	(parse_escape): Use charset-specific methods to recognize
> 	backslash escapes, parse `control character' notation, and convert
> 	characters from the host character set to the target character set.
> 	* configure.in: Set the default host character set.
> 	Check where to find iconv, and what its argument types might be.
> 	* acinclude.m4 (AM_ICONV): New macro, borrowed from GCC.
> 	* Makefile.in (SFILES): List charset.c.
> 	(COMMON_OBS): List charset.o.	
> 	(charset.o): New rule.
> 	(charset_h): New header dependency variable.
> 	(c-lang.o, utils.o, c-exp.tab.o): Note dependency on $(charset_h).
> 	(LIBICONV): New variable, set by configure.
> 	(CLIBS): Include $(LIBICONV) here.
> 	* aclocal.m4, config.in, configure: Regenerated.
> 
> gdb/testsuite/ChangeLog:
> 2002-MM-DD  Jim Blandy  <jimb@redhat.com>
> 
>         * gdb.base/charset.exp, gdb.base/charset.c: New files.

I've committed the portions above.  I'll wait on the docs portion of the
patch until Eli has had a chance to look it over.

I ended up with a conflict when I updated c-lang.c.  I'm reposting
that portion of the patch since it is somewhat different than what I
originally posted.  The conflict was due to Tom Tromey's additon of
the embedded \0 disambiguation code in c_emit_char().  I'd appreciate
it if both Tom and Jim would look over this patch to see if it looks
sensible.  I've run the testsuite and have done some testing by hand and
the results look good to me...

Index: c-lang.c
===================================================================
RCS file: /cvs/src/src/gdb/c-lang.c,v
retrieving revision 1.14
diff -u -p -r1.14 c-lang.c
--- c-lang.c	17 Sep 2002 17:01:47 -0000	1.14
+++ c-lang.c	20 Sep 2002 00:22:40 -0000
@@ -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 u
 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


  parent reply	other threads:[~2002-09-20  0:36 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-09-12 17:31 Kevin Buettner
2002-09-12 17:41 ` Daniel Jacobowitz
2002-09-12 20:24   ` Jim Blandy
2002-09-12 20:45     ` Andrew Cagney
2002-09-13 10:05       ` Jim Blandy
2002-09-13 11:39         ` Andrew Cagney
2002-09-13 19:06           ` Jim Blandy
2002-09-16 22:25             ` Andrew Cagney
2002-09-19 12:52               ` Jim Blandy
2002-09-19 13:27                 ` Kevin Buettner
2002-09-20 13:49                   ` Eli Zaretskii
2002-09-13  7:02     ` Daniel Jacobowitz
2002-09-13 10:16       ` Jim Blandy
2002-09-13 10:33         ` Daniel Jacobowitz
2002-09-13 11:42           ` Andrew Cagney
2002-09-13 12:11             ` Kevin Buettner
2002-09-13 12:15               ` Daniel Jacobowitz
2002-09-12 17:53 ` Andrew Cagney
2002-09-12 18:08   ` Kevin Buettner
2002-09-19 17:36 ` Kevin Buettner [this message]
2002-09-19 17:46   ` Kevin Buettner
2002-09-19 18:12   ` Andrew Cagney
2002-09-20  0:12     ` Kevin Buettner
2002-09-20  9:08       ` Andrew Cagney
2002-09-20 14:58         ` Kevin Buettner
2002-09-20 16:33           ` Andrew Cagney
2002-09-21  1:26           ` Eli Zaretskii
2002-09-20 16:55         ` Kevin Buettner
2002-09-20  8:59 ` Eli Zaretskii
2002-09-20 17:34   ` Kevin Buettner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1020920003625.ZM23109@localhost.localdomain \
    --to=kevinb@redhat.com \
    --cc=gdb-patches@sources.redhat.com \
    --cc=jimb@redhat.com \
    --cc=tromey@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox