summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2013-03-25 10:07:40 +0000
committerNicholas Marriott <nicm@openbsd.org>2013-03-25 10:07:40 +0000
commit304336a5917db5778854c71afd4e1f19bb11e476 (patch)
treebf4efa50599e8dd2bb940b77c3a7745b1e038a23
parent35452b3e55aeaba7d64f604e32b31c80d3f80fde (diff)
Allow lastgc to be NULL in grid_string_cells so find-window doesn't
crash, problem reported by eugene everson.
-rw-r--r--grid.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/grid.c b/grid.c
index 35e719b5..529ce154 100644
--- a/grid.c
+++ b/grid.c
@@ -583,7 +583,7 @@ grid_string_cells_code(const struct grid_cell *lastgc,
/* Convert cells into a string. */
char *
grid_string_cells(struct grid *gd, u_int px, u_int py, u_int nx,
- struct grid_cell **lastgc, int with_codes, int escape_c0)
+ struct grid_cell **lastgc, int with_codes, int escape_c0, int trim)
{
const struct grid_cell *gc;
static struct grid_cell lastgc1;
@@ -595,7 +595,7 @@ grid_string_cells(struct grid *gd, u_int px, u_int py, u_int nx,
GRID_DEBUG(gd, "px=%u, py=%u, nx=%u", px, py, nx);
- if (*lastgc == NULL) {
+ if (lastgc != NULL && *lastgc == NULL) {
memcpy(&lastgc1, &grid_default_cell, sizeof lastgc1);
*lastgc = &lastgc1;
}
@@ -621,7 +621,7 @@ grid_string_cells(struct grid *gd, u_int px, u_int py, u_int nx,
data = ud.data;
size = ud.size;
if (escape_c0 && size == 1 && *data == '\\') {
- data = "\\";
+ data = "\\\\";
size = 2;
}
@@ -638,8 +638,10 @@ grid_string_cells(struct grid *gd, u_int px, u_int py, u_int nx,
off += size;
}
- while (off > 0 && buf[off - 1] == ' ')
- off--;
+ if (trim) {
+ while (off > 0 && buf[off - 1] == ' ')
+ off--;
+ }
buf[off] = '\0';
return (buf);