summaryrefslogtreecommitdiff
path: root/src/libvterm/src/termscreen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libvterm/src/termscreen.c')
-rw-r--r--src/libvterm/src/termscreen.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/libvterm/src/termscreen.c b/src/libvterm/src/termscreen.c
index cfae088ba..0cd31cedf 100644
--- a/src/libvterm/src/termscreen.c
+++ b/src/libvterm/src/termscreen.c
@@ -1,5 +1,6 @@
#include "vterm_internal.h"
+/* vim: set sw=2 : */
#include <stdio.h>
#include <string.h>
@@ -95,8 +96,7 @@ static ScreenCell *realloc_buffer(VTermScreen *screen, ScreenCell *buffer, int n
}
}
- if(buffer)
- vterm_allocator_free(screen->vt, buffer);
+ vterm_allocator_free(screen->vt, buffer);
return new_buffer;
}
@@ -518,8 +518,7 @@ static int resize(int new_rows, int new_cols, VTermPos *delta, void *user)
screen->rows = new_rows;
screen->cols = new_cols;
- if(screen->sb_buffer)
- vterm_allocator_free(screen->vt, screen->sb_buffer);
+ vterm_allocator_free(screen->vt, screen->sb_buffer);
screen->sb_buffer = vterm_allocator_malloc(screen->vt, sizeof(VTermScreenCell) * new_cols);
@@ -619,16 +618,21 @@ static VTermStateCallbacks state_cbs = {
&setlineinfo /* setlineinfo */
};
+/*
+ * Allocate a new screen and return it.
+ * Return NULL when out of memory.
+ */
static VTermScreen *screen_new(VTerm *vt)
{
VTermState *state = vterm_obtain_state(vt);
VTermScreen *screen;
int rows, cols;
- if(!state)
+ if (state == NULL)
return NULL;
-
screen = vterm_allocator_malloc(vt, sizeof(VTermScreen));
+ if (screen == NULL)
+ return NULL;
vterm_get_size(vt, &rows, &cols);
@@ -646,10 +650,13 @@ static VTermScreen *screen_new(VTerm *vt)
screen->cbdata = NULL;
screen->buffers[0] = realloc_buffer(screen, NULL, rows, cols);
-
screen->buffer = screen->buffers[0];
-
screen->sb_buffer = vterm_allocator_malloc(screen->vt, sizeof(VTermScreenCell) * cols);
+ if (screen->buffer == NULL || screen->sb_buffer == NULL)
+ {
+ vterm_screen_free(screen);
+ return NULL;
+ }
vterm_state_set_callbacks(screen->state, &state_cbs, screen);
@@ -659,11 +666,8 @@ static VTermScreen *screen_new(VTerm *vt)
INTERNAL void vterm_screen_free(VTermScreen *screen)
{
vterm_allocator_free(screen->vt, screen->buffers[0]);
- if(screen->buffers[1])
- vterm_allocator_free(screen->vt, screen->buffers[1]);
-
+ vterm_allocator_free(screen->vt, screen->buffers[1]);
vterm_allocator_free(screen->vt, screen->sb_buffer);
-
vterm_allocator_free(screen->vt, screen);
}