Fix bug introduced in 9225cfb1 that resulted in hangs

This commit is contained in:
mintsuki 2022-12-04 10:19:10 +01:00
parent 6ee3fe00c6
commit a82ef0a111
1 changed files with 11 additions and 9 deletions

View File

@ -571,8 +571,8 @@ static void fbterm_set_cursor_pos(struct term_context *_ctx, size_t x, size_t y)
static void fbterm_get_cursor_pos(struct term_context *_ctx, size_t *x, size_t *y) { static void fbterm_get_cursor_pos(struct term_context *_ctx, size_t *x, size_t *y) {
struct fbterm_context *ctx = (void *)_ctx; struct fbterm_context *ctx = (void *)_ctx;
*x = ctx->cursor_x; *x = ctx->cursor_x >= _ctx->cols ? _ctx->cols - 1 : ctx->cursor_x;
*y = ctx->cursor_y; *y = ctx->cursor_y >= _ctx->rows ? _ctx->rows - 1 : ctx->cursor_y;
} }
static void fbterm_move_character(struct term_context *_ctx, size_t new_x, size_t new_y, size_t old_x, size_t old_y) { static void fbterm_move_character(struct term_context *_ctx, size_t new_x, size_t new_y, size_t old_x, size_t old_y) {
@ -647,12 +647,12 @@ static void fbterm_set_text_bg_default(struct term_context *_ctx) {
static void draw_cursor(struct term_context *_ctx) { static void draw_cursor(struct term_context *_ctx) {
struct fbterm_context *ctx = (void *)_ctx; struct fbterm_context *ctx = (void *)_ctx;
size_t i = ctx->cursor_x + ctx->cursor_y * _ctx->cols; if (ctx->cursor_x >= _ctx->cols || ctx->cursor_y >= _ctx->rows) {
if (i >= _ctx->cols * _ctx->rows) {
return; return;
} }
size_t i = ctx->cursor_x + ctx->cursor_y * _ctx->cols;
struct fbterm_char c; struct fbterm_char c;
struct fbterm_queue_item *q = ctx->map[i]; struct fbterm_queue_item *q = ctx->map[i];
if (q != NULL) { if (q != NULL) {
@ -694,7 +694,9 @@ static void fbterm_double_buffer_flush(struct term_context *_ctx) {
} }
if ((ctx->old_cursor_x != ctx->cursor_x || ctx->old_cursor_y != ctx->cursor_y) || ctx->cursor_status == false) { if ((ctx->old_cursor_x != ctx->cursor_x || ctx->old_cursor_y != ctx->cursor_y) || ctx->cursor_status == false) {
plot_char(_ctx, &ctx->grid[ctx->old_cursor_x + ctx->old_cursor_y * _ctx->cols], ctx->old_cursor_x, ctx->old_cursor_y); if (ctx->old_cursor_x < _ctx->cols && ctx->old_cursor_y < _ctx->rows) {
plot_char(_ctx, &ctx->grid[ctx->old_cursor_x + ctx->old_cursor_y * _ctx->cols], ctx->old_cursor_x, ctx->old_cursor_y);
}
} }
ctx->old_cursor_x = ctx->cursor_x; ctx->old_cursor_x = ctx->cursor_x;
@ -706,12 +708,12 @@ static void fbterm_double_buffer_flush(struct term_context *_ctx) {
static void fbterm_raw_putchar(struct term_context *_ctx, uint8_t c) { static void fbterm_raw_putchar(struct term_context *_ctx, uint8_t c) {
struct fbterm_context *ctx = (void *)_ctx; struct fbterm_context *ctx = (void *)_ctx;
if (ctx->cursor_x == _ctx->cols && (ctx->cursor_y < _ctx->scroll_bottom_margin - 1 || _ctx->scroll_enabled)) { if (ctx->cursor_x >= _ctx->cols && (ctx->cursor_y < _ctx->scroll_bottom_margin - 1 || _ctx->scroll_enabled)) {
ctx->cursor_x = 0; ctx->cursor_x = 0;
ctx->cursor_y++; ctx->cursor_y++;
} }
if (ctx->cursor_y == _ctx->scroll_bottom_margin) { if (ctx->cursor_y >= _ctx->scroll_bottom_margin) {
ctx->cursor_y--; ctx->cursor_y = _ctx->scroll_bottom_margin - 1;
fbterm_scroll(_ctx); fbterm_scroll(_ctx);
} }