From 3d82c70793a930761ec6ec677e911e3fffe18449 Mon Sep 17 00:00:00 2001 From: Boris Faure Date: Wed, 6 Feb 2019 22:33:52 +0100 Subject: [PATCH] tests: get rid of that useless UTF8CC code @glima: this should fix your issue --- src/bin/termptyesc.c | 58 ++++++++++++++++---------------------------- tests/c2.sh | 13 ++++++++++ tests/tests.results | 1 + 3 files changed, 35 insertions(+), 37 deletions(-) create mode 100755 tests/c2.sh diff --git a/src/bin/termptyesc.c b/src/bin/termptyesc.c index bac4b809..6edd601f 100644 --- a/src/bin/termptyesc.c +++ b/src/bin/termptyesc.c @@ -27,8 +27,9 @@ #define ST 0x9c // String Terminator #define BEL 0x07 // Bell #define ESC 033 // Escape -#define DEL 127 -#define UTF8CC 0xc2 +#define CSI 0x9b +#define OSC 0x9d +#define DEL 0x7f /* XXX: all handle_ functions return the number of bytes successfully read, 0 * if not enough bytes could be read @@ -3579,7 +3580,7 @@ _handle_esc_osc(Termpty *ty, const Eina_Unicode *c, const Eina_Unicode *ce) { if ((cc < ce - 1) && (((*cc == ESC) && (*(cc + 1) == '\\')) || - ((*cc == UTF8CC) && (*(cc + 1) == ST)))) + (*cc == ST))) { cc++; break; @@ -3797,7 +3798,7 @@ _handle_esc_dcs(Termpty *ty, { if ((cc < ce - 1) && (((*cc == ESC) && (*(cc + 1) == '\\')) || - ((*cc == UTF8CC) && (*(cc + 1) == ST)))) + (*cc == ST))) { cc++; break; @@ -4086,6 +4087,16 @@ _handle_esc(Termpty *ty, const Eina_Unicode *c, const Eina_Unicode *ce) if (ty->cb.cancel_sel.func) ty->cb.cancel_sel.func(ty->cb.cancel_sel.data); return 1; + case '"': + if (len < 2) + return 0; + /* Seems like this sequence activates C1... */ + if (c[1] != 'C') + { + ERR("invalid 0x1b 0x22 sequence"); + ty->decoding_error = 0; + } + return 2; case '(': // charset 0 if (len < 2) return 0; ty->termstate.chset[0] = c[1]; @@ -4152,32 +4163,6 @@ _handle_esc(Termpty *ty, const Eina_Unicode *c, const Eina_Unicode *ce) return 0; } -static int -_handle_utf8_control_code(Termpty *ty, const Eina_Unicode *c, const Eina_Unicode *ce) -{ - int len = ce - c; - - if (len < 1) - return 0; - DBG("c0 utf8: '%s' (0x%02x)", _safechar(c[0]), c[0]); - switch (c[0]) - { - case 0x9b: - len = _handle_esc_csi(ty, c + 1, ce); - if (len == 0) return 0; - return 1 + len; - case 0x9d: - len = _handle_esc_osc(ty, c + 1, ce); - if (len == 0) return 0; - return 1 + len; - default: - ty->decoding_error = EINA_TRUE; - WRN("Unhandled utf8 control code '%s' (0x%02x)", _safechar(c[0]), (unsigned int) c[0]); - return 1; - } - return 0; -} - /* XXX: ce is excluded */ int @@ -4225,25 +4210,24 @@ termpty_handle_seq(Termpty *ty, const Eina_Unicode *c, const Eina_Unicode *ce) goto end; } } - else if (c[0] == 0x7f) // DEL + else if (c[0] == DEL) { WRN("Unhandled char 0x%02x [DEL]", (unsigned int) c[0]); ty->decoding_error = EINA_TRUE; len = 1; goto end; } - else if (c[0] == 0x9b) // ANSI ESC!!! + else if (c[0] == CSI) { - DBG("ANSI CSI!!!!!"); len = _handle_esc_csi(ty, c + 1, ce); if (len == 0) goto end; len++; goto end; } - else if (c[0] == UTF8CC) + else if (c[0] == OSC) { - len = _handle_utf8_control_code(ty, c + 1, ce); + len = _handle_esc_osc(ty, c + 1, ce); if (len == 0) goto end; len++; @@ -4290,8 +4274,8 @@ termpty_handle_seq(Termpty *ty, const Eina_Unicode *c, const Eina_Unicode *ce) cc = (Eina_Unicode *)c; DBG("txt: ["); - while ((cc < ce) && (*cc >= 0x20) && (*cc != 0x7f) && (*cc != 0x9b) - && (*cc != UTF8CC)) + while ((cc < ce) && (*cc >= 0x20) && (*cc != DEL) && (*cc != CSI) + && (*cc != OSC)) { DBG("%s", _safechar(*cc)); cc++; diff --git a/tests/c2.sh b/tests/c2.sh new file mode 100755 index 00000000..b25f08ec --- /dev/null +++ b/tests/c2.sh @@ -0,0 +1,13 @@ +#!/bin/sh + + +# fill space with E +printf '\033#8' +# set color +printf '\033[46;31;3m' + +# set C1 +printf '\x1b\x22\x43' + +# move +printf '\xc2\x1b[4;4H#' diff --git a/tests/tests.results b/tests/tests.results index 37e680ed..d4ad440b 100644 --- a/tests/tests.results +++ b/tests/tests.results @@ -76,3 +76,4 @@ da.sh 3083fbec33befe5299ca3726a19fcff2 uts.sh 1c72fe49e7f98aac137d436ac4906bc8 vpa.sh c712e5c3c5e31a362e4257200d92d9a6 decswbv.sh f7dde335d44f8691041d40c3efd24ffb +c2.sh 1ee773a0e5ac3c0217d08e4afdb1fef6