From 2977b257d2cfd271da2c8bec6bf14dcf0e7c5dc5 Mon Sep 17 00:00:00 2001 From: Craig Barnes Date: Thu, 13 May 2021 15:32:40 +0100 Subject: [PATCH] Revert "vt: make anywhere() function return `term->vt.state` by default" The loop in vt_from_slave() doesn't update `term->vt.state` on each iteration and therefore may be incorrect when accessed by the anywhere() function. Since this function is the only place other than the outer loop where this field is read and since updating it per-iteration seems to have quite some overhead, we instead just revert back to passing the default return value to anywhere(), as was done prior to e4ff8d83d16. This reverts commit e4ff8d83d1628c2fc92b14c7b0845215962fcbfc. --- vt.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/vt.c b/vt.c index 6ef993c3..5d8dc2b7 100644 --- a/vt.c +++ b/vt.c @@ -763,7 +763,7 @@ action_utf8_44(struct terminal *term, uint8_t c) IGNORE_WARNING("-Wpedantic") static enum state -anywhere(struct terminal *term, uint8_t data) +anywhere(struct terminal *term, uint8_t data, enum state default_return) { switch (data) { /* exit current enter new state */ @@ -782,7 +782,7 @@ anywhere(struct terminal *term, uint8_t data) case 0x9e ... 0x9f: return STATE_SOS_PM_APC_STRING; } - return term->vt.state; + return default_return; } static enum state @@ -802,7 +802,7 @@ state_ground_switch(struct terminal *term, uint8_t data) case 0xf0 ... 0xf4: action_utf8_41(term, data); return STATE_UTF8_41; } - return anywhere(term, data); + return anywhere(term, data, STATE_GROUND); } static enum state @@ -829,7 +829,7 @@ state_escape_switch(struct terminal *term, uint8_t data) case 0x7f: action_ignore(term); return STATE_ESCAPE; } - return anywhere(term, data); + return anywhere(term, data, STATE_ESCAPE); } static enum state @@ -846,7 +846,7 @@ state_escape_intermediate_switch(struct terminal *term, uint8_t data) case 0x7f: action_ignore(term); return STATE_ESCAPE_INTERMEDIATE; } - return anywhere(term, data); + return anywhere(term, data, STATE_ESCAPE_INTERMEDIATE); } static enum state @@ -866,7 +866,7 @@ state_csi_entry_switch(struct terminal *term, uint8_t data) case 0x7f: action_ignore(term); return STATE_CSI_ENTRY; } - return anywhere(term, data); + return anywhere(term, data, STATE_CSI_ENTRY); } static enum state @@ -888,7 +888,7 @@ state_csi_param_switch(struct terminal *term, uint8_t data) case 0x7f: action_ignore(term); return STATE_CSI_PARAM; } - return anywhere(term, data); + return anywhere(term, data, STATE_CSI_PARAM); } static enum state @@ -906,7 +906,7 @@ state_csi_intermediate_switch(struct terminal *term, uint8_t data) case 0x7f: action_ignore(term); return STATE_CSI_INTERMEDIATE; } - return anywhere(term, data); + return anywhere(term, data, STATE_CSI_INTERMEDIATE); } static enum state @@ -923,7 +923,7 @@ state_csi_ignore_switch(struct terminal *term, uint8_t data) case 0x7f: action_ignore(term); return STATE_CSI_IGNORE; } - return anywhere(term, data); + return anywhere(term, data, STATE_CSI_IGNORE); } static enum state @@ -968,7 +968,7 @@ state_dcs_entry_switch(struct terminal *term, uint8_t data) case 0x7f: action_ignore(term); return STATE_DCS_ENTRY; } - return anywhere(term, data); + return anywhere(term, data, STATE_DCS_ENTRY); } static enum state @@ -989,7 +989,7 @@ state_dcs_param_switch(struct terminal *term, uint8_t data) case 0x7f: action_ignore(term); return STATE_DCS_PARAM; } - return anywhere(term, data); + return anywhere(term, data, STATE_DCS_PARAM); } static enum state @@ -1007,7 +1007,7 @@ state_dcs_intermediate_switch(struct terminal *term, uint8_t data) case 0x7f: action_ignore(term); return STATE_DCS_INTERMEDIATE; } - return anywhere(term, data); + return anywhere(term, data, STATE_DCS_INTERMEDIATE); } static enum state @@ -1021,7 +1021,7 @@ state_dcs_ignore_switch(struct terminal *term, uint8_t data) case 0x20 ... 0x7f: action_ignore(term); return STATE_DCS_IGNORE; } - return anywhere(term, data); + return anywhere(term, data, STATE_DCS_IGNORE); } static enum state @@ -1064,7 +1064,7 @@ state_sos_pm_apc_string_switch(struct terminal *term, uint8_t data) case 0x1c ... 0x7f: action_ignore(term); return STATE_SOS_PM_APC_STRING; } - return anywhere(term, data); + return anywhere(term, data, STATE_SOS_PM_APC_STRING); } static enum state