diff options
-rw-r--r-- | src/core-commands.c | 5 | ||||
-rw-r--r-- | src/qreg.c | 7 | ||||
-rw-r--r-- | tests/testsuite.at | 3 |
3 files changed, 10 insertions, 5 deletions
diff --git a/src/core-commands.c b/src/core-commands.c index d959f10..52059a8 100644 --- a/src/core-commands.c +++ b/src/core-commands.c @@ -1029,7 +1029,8 @@ teco_state_start_get(teco_machine_main_t *ctx, GError **error) teco_error_range_set(error, "A"); return; } - teco_expressions_push(teco_interface_ssm(SCI_GETCHARAT, v, 0)); + /* internally, the character is casted to signed char */ + teco_expressions_push((guchar)teco_interface_ssm(SCI_GETCHARAT, v, 0)); } static teco_state_t * @@ -1764,7 +1765,7 @@ static teco_state_t * teco_state_ascii_input(teco_machine_main_t *ctx, gchar chr, GError **error) { if (ctx->mode == TECO_MODE_NORMAL) - teco_expressions_push(chr); + teco_expressions_push((guchar)chr); return &teco_state_start; } @@ -261,7 +261,8 @@ teco_qreg_plain_get_character(teco_qreg_t *qreg, guint position, GError **error) teco_doc_edit(&qreg->string); if (position < teco_view_ssm(teco_qreg_view, SCI_GETLENGTH, 0, 0)) - ret = teco_view_ssm(teco_qreg_view, SCI_GETCHARAT, position, 0); + /* internally, values are casted to signed char */ + ret = (guchar)teco_view_ssm(teco_qreg_view, SCI_GETCHARAT, position, 0); else g_set_error(error, TECO_ERROR, TECO_ERROR_RANGE, "Position %u out of range", position); @@ -407,7 +408,7 @@ teco_qreg_external_get_character(teco_qreg_t *qreg, guint position, GError **err return -1; } - return str.data[position]; + return (guchar)str.data[position]; } /** @@ -510,7 +511,7 @@ teco_qreg_bufferinfo_get_character(teco_qreg_t *qreg, guint position, GError **e return -1; } - return teco_ring_current->filename[position]; + return (guchar)teco_ring_current->filename[position]; } /** @static @memberof teco_qreg_t */ diff --git a/tests/testsuite.at b/tests/testsuite.at index 3965730..6ea95ab 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -81,6 +81,9 @@ AT_CLEANUP AT_SETUP([8-bit cleanlyness]) AT_CHECK([$SCITECO -e "0:@EUa/f^@^@/ :Qa-4\"N(0/0)' Ga Z= Z-4\"N(0/0)'"], 0, ignore, ignore) +AT_CHECK([$SCITECO -e "129@I// -A-129\"N(0/0)'"], 0, ignore, ignore) +AT_CHECK([$SCITECO -e "129@^Ua// 0Qa-129\"N(0/0)'"], 0, ignore, ignore) +AT_CHECK([$SCITECO -e "@^Ua/^^/ 129:@^Ua// Ma-129\"N(0/0)'"], 0, ignore, ignore) AT_CLEANUP AT_SETUP([Automatic EOL normalization]) |