summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul LeoNerd Evans <leonerd@leonerd.org.uk>2012-09-29 12:22:43 +0100
committerPaul LeoNerd Evans <leonerd@leonerd.org.uk>2012-09-29 12:22:43 +0100
commit2be3b0b4301bc4456e9f56e41636ae3bad99b64d (patch)
treeef0ec0b0bba0f4a22bbc2f65d2c10c8659f97698
parentc8f2f0acd1650ecf226237e41ea1df88f4fee652 (diff)
vterm_screen_get_cell() should return int to indicate bounds-checking failure
-rw-r--r--include/vterm.h2
-rw-r--r--src/screen.c6
-rw-r--r--t/harness.c3
3 files changed, 7 insertions, 4 deletions
diff --git a/include/vterm.h b/include/vterm.h
index 191edec..90507d3 100644
--- a/include/vterm.h
+++ b/include/vterm.h
@@ -213,7 +213,7 @@ typedef struct {
VTermColor fg, bg;
} VTermScreenCell;
-void vterm_screen_get_cell(VTermScreen *screen, VTermPos pos, VTermScreenCell *cell);
+int vterm_screen_get_cell(VTermScreen *screen, VTermPos pos, VTermScreenCell *cell);
int vterm_screen_is_eol(VTermScreen *screen, VTermPos pos);
diff --git a/src/screen.c b/src/screen.c
index 994c645..1fdb793 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -620,11 +620,11 @@ size_t vterm_screen_get_text(VTermScreen *screen, char *str, size_t len, const V
}
/* Copy internal to external representation of a screen cell */
-void vterm_screen_get_cell(VTermScreen *screen, VTermPos pos, VTermScreenCell *cell)
+int vterm_screen_get_cell(VTermScreen *screen, VTermPos pos, VTermScreenCell *cell)
{
ScreenCell *intcell = getcell(screen, pos.row, pos.col);
if(!intcell)
- return;
+ return 0;
for(int i = 0; ; i++) {
cell->chars[i] = intcell->chars[i];
@@ -648,6 +648,8 @@ void vterm_screen_get_cell(VTermScreen *screen, VTermPos pos, VTermScreenCell *c
cell->width = 2;
else
cell->width = 1;
+
+ return 1;
}
int vterm_screen_is_eol(VTermScreen *screen, VTermPos pos)
diff --git a/t/harness.c b/t/harness.c
index a8b6dcd..08580e2 100644
--- a/t/harness.c
+++ b/t/harness.c
@@ -715,7 +715,8 @@ int main(int argc, char **argv)
goto abort_line;
}
VTermScreenCell cell;
- vterm_screen_get_cell(screen, pos, &cell);
+ if(!vterm_screen_get_cell(screen, pos, &cell))
+ goto abort_line;
printf("{");
for(int i = 0; cell.chars[i] && i < VTERM_MAX_CHARS_PER_CELL; i++) {
printf("%s0x%x", i ? "," : "", cell.chars[i]);