From 6edc3845bd90760c9c1c3173ef1f680a30c45f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Thu, 11 Jul 2019 16:32:33 +0200 Subject: [PATCH] selection: calculate required length for clipboard text --- selection.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/selection.c b/selection.c index 67cf10ea..d2d43e60 100644 --- a/selection.c +++ b/selection.c @@ -34,8 +34,17 @@ extract_selection(const struct terminal *term) assert(start->row <= end->row); - /* TODO: calculate length required */ - char buf[4096]; + size_t max_cells = 0; + if (start->row == end->row) { + assert(start->col <= end->col); + max_cells = end->col - start->col + 1; + } else { + max_cells = term->cols - start->col; + max_cells += term->cols * (end->row - start->row - 1); + max_cells += end->col + 1; + } + + char *buf = malloc(max_cells * 4 + 1); int idx = 0; int start_col = start->col; @@ -75,7 +84,7 @@ extract_selection(const struct terminal *term) } buf[idx] = '\0'; - return strdup(buf); + return buf; } void