[5/6] Use ISCNTRL in tui_copy_source_line

Message ID 20200627212051.6155-6-tom@tromey.com
State New
Headers show
Series
  • Handle UTF-8 in TUI source windows
Related show

Commit Message

Tom Tromey June 27, 2020, 9:20 p.m.
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-06-27  Tom Tromey  <tom@tromey.com>

	PR tui/25342:
	* tui/tui-winsource.c (tui_copy_source_line): Use ISNCTRL.
---
 gdb/ChangeLog           | 5 +++++
 gdb/tui/tui-winsource.c | 7 ++++---
 2 files changed, 9 insertions(+), 3 deletions(-)

-- 
2.17.2

Patch

diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c
index 2300b9ab1e9..30b8f69027a 100644
--- a/gdb/tui/tui-winsource.c
+++ b/gdb/tui/tui-winsource.c
@@ -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);
     }