Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Julian Brown <julian@codesourcery.com>
To: Tom Tromey <tromey@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH/WIP] C/C++ wchar_t/Unicode printing support
Date: Thu, 15 Jan 2009 22:16:00 -0000	[thread overview]
Message-ID: <20090115221523.28c15971@rex.config> (raw)
In-Reply-To: <m3r634jneg.fsf@fleche.redhat.com>

Thanks for the quick reply!

On Thu, 15 Jan 2009 13:59:51 -0700
Tom Tromey <tromey@redhat.com> wrote:

> >>>>> "Julian" == Julian Brown <julian@codesourcery.com> writes:
> 
> Julian> 3. Types which are literally called "wchar_t" are assumed to
> Julian> be wide characters.
> 
> I did something similar -- my patch looks at TYPE_NAME to see if it is
> "wchar_t".  In C, this is a typedef, and so I needed the appended to
> make it work.  Without this patch, lookup_typename will find a
> "wchar_t" symbol whose type has a TYPE_NAME which is not "wchar_t".
> That seemed odd.  The patch changes the dwarf reader so that the
> wchar_t symbol points to a type whose name is "wchar_t".
> 
> I think the failing case here was "p L'a'", so I suppose it would not
> necessarily show up with your patch.

I don't think I'd run across that problem, no...

> Julian> $3 = (wchar_t *) 0x85c4 "Sch\x00f6ne Gr\x00fc\x00dfe"
> 
> It should probably print L"..." :-)

Yeah, true.

> Yeah.  Mine:
> 
> * Handles input and output of wide characters and strings, and also
>   the new C0X u"" and U"" syntax.
> * Adds "%ls" and "%lc" to the gdb printf.

Sounds good.

> * Handles all target character sets, in particular variable length
>   encodings are handled.

My patch is supposed to handle variable-length encodings for target
wide character set -- but that's not tested, so is probably broken :-)

> * Auto-selects the appropriate endianness for wide characters on the
>   target.

Cool.

> * Getting the list of character sets support by iconv is a pain.
>   Right now I just have a list of dubious provenance (read: iconv -l
> | sed).
> 
>   Perhaps we can invoke "iconv -l" at startup... eww.

I ran into this problem too. An earlier version of my patch had this,
in register_iconv_charsets():

  FILE *fh;
  /* Fixed buffers never caused anyone problems did they?  */
  char charset[200];
  int seen_a_charset = 0;
  struct charset *cs;

  fh = popen ("iconv -l", "r");

  if (!fh)
    return 1;

  while (! feof (fh))
    {
      int n = fscanf (fh, " %s/%*s/", &charset[0]);

      if (n != 1)
        break;

      seen_a_charset = 1;

      register_charset (simple_charset (xstrdup (charset), 1, NULL,
                        NULL, NULL, NULL));
    }

  pclose (fh);

  return !seen_a_charset;

...which isn't quite right, but can maybe be adapted into something
which is.

> Another difference is that I have the intermediate step go through the
> host wchar_t rather than UCS-4.  This is nice because it means we can
> use iswprint to decide if something is printable.  But, it may have
> limitations, I suppose, on a host where wchar_t is less capable.

I think that might break for recent win32, where wchar_t is UTF-16 (i.e.
more than one wide character may be needed for a given code point).

> Julian> OK to apply, or any comments?
> 
> If you wouldn't mind holding off, my patch is nearing completion.  It
> is feature complete, and at the moment I am writing test cases.

Sure, I don't mind holding off.

> I'm happy to send what I have now, if you want to see it.  Or it is
> all in the archer git repository on the tromey-archer-charset branch.
> 
> I've lifted stuff -- ideas and code -- from your patch, but the result
> is pretty different.  Perhaps we could discuss the areas where we made
> different decisions and try to plot the best route forward.

OK, I'll have a look, but I'm not sure if I'll have anything sensible to
say :-)

Cheers,

Julian


  parent reply	other threads:[~2009-01-15 22:16 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-15 20:24 Julian Brown
2009-01-15 21:02 ` Tom Tromey
2009-01-15 21:18   ` Joseph S. Myers
2009-01-16  0:01     ` Tom Tromey
2009-01-15 22:16   ` Julian Brown [this message]
2009-01-16  0:53     ` Tom Tromey
2009-01-16  9:36 ` Eli Zaretskii
2009-01-16 16:18   ` Tom Tromey
2009-01-16 16:40     ` Eli Zaretskii
2009-01-16 16:57       ` Mark Kettenis
2009-01-30  4:11 ` Tom Tromey
2009-01-30 22:14   ` Joel Brobecker
     [not found]     ` <m3ocxos6og.fsf@fleche.redhat.com>
2009-02-01 18:23       ` Daniel Jacobowitz
2009-02-01 22:42         ` Tom Tromey
2009-02-01 23:16           ` Daniel Jacobowitz
2009-02-01 23:18             ` Daniel Jacobowitz
2009-02-01 23:26             ` Tom Tromey
2009-02-03  0:41           ` Joel Brobecker

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=20090115221523.28c15971@rex.config \
    --to=julian@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    --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