Use ISCNTRL in tui_copy_source_line
authorTom Tromey <tom@tromey.com>
Mon, 28 Sep 2020 02:30:30 +0000 (20:30 -0600)
committerTom Tromey <tom@tromey.com>
Mon, 28 Sep 2020 02:30:32 +0000 (20:30 -0600)
This changes tui_copy_source_line to use ISCNTRL.  This lets it work
more nicely with UTF-8 input.  Note that this still won't work for
stateful multi-byte encodings; for that much more work would be
required.  However, I think this patch does not make gdb any worse in
this scenario.

gdb/ChangeLog
2020-09-27  Tom Tromey  <tom@tromey.com>

PR tui/25342:
* tui/tui-winsource.c (tui_copy_source_line): Use ISNCTRL.

gdb/ChangeLog
gdb/tui/tui-winsource.c

index 38b9fa6b353e5be3776cfdf122b5545eb0f496d0..fc016aeb3456ae4dfeb5b93f6664905ff3659369 100644 (file)
@@ -1,3 +1,8 @@
+2020-09-27  Tom Tromey  <tom@tromey.com>
+
+       PR tui/25342:
+       * tui/tui-winsource.c (tui_copy_source_line): Use ISNCTRL.
+
 2020-09-27  Tom Tromey  <tom@tromey.com>
 
        * unittests/tui-selftests.c: Update.
index 2300b9ab1e923a0edbe0816b1dc75c2687e85898..30b8f69027aed0a94e3f5d3bc44c7f8e5a298638 100644 (file)
@@ -28,6 +28,7 @@
 #include "source.h"
 #include "objfiles.h"
 #include "filenames.h"
+#include "safe-ctype.h"
 
 #include "tui/tui.h"
 #include "tui/tui-data.h"
@@ -107,7 +108,9 @@ tui_copy_source_line (const char **ptr, int *length)
        {
          /* Nothing.  */
        }
-      else if (c < 040 && c != '\t')
+      else if (c == '\t')
+       process_tab ();
+      else if (ISCNTRL (c))
        {
          result.push_back ('^');
          result.push_back (c + 0100);
@@ -119,8 +122,6 @@ tui_copy_source_line (const char **ptr, int *length)
          result.push_back ('?');
          ++column;
        }
-      else if (c == '\t')
-       process_tab ();
       else
        result.push_back (c);
     }