diff --git a/src/bin/backlog.c b/src/bin/backlog.c index 3941d218..0679383e 100644 --- a/src/bin/backlog.c +++ b/src/bin/backlog.c @@ -181,6 +181,7 @@ void termpty_backlog_size_set(Termpty *ty, size_t size) { Termsave *new_back; + size_t i; if (ty->backsize == size) return; @@ -192,34 +193,28 @@ termpty_backlog_size_set(Termpty *ty, size_t size) termpty_backlog_free(ty); goto end; } - if (size > 0) + if (size > ty->backsize) { - size_t i; - if (size > ty->backsize) - { - new_back = realloc(ty->back, sizeof(Termsave) * size); - if (!new_back) - return; - memset(new_back + ty->backsize, 0, - sizeof(Termsave) * (size - ty->backsize)); - ty->back = new_back; - } - else - { - new_back = calloc(1, sizeof(Termsave) * size); - if (!new_back) - return; - for (i = 0; i < size; i++) - new_back[i] = ty->back[i]; - for (i = size; i < ty->backsize; i++) - termpty_save_free(ty, &ty->back[i]); - free(ty->back); - ty->back = new_back; - } - _accounting_change(sizeof(Termsave) * (size - ty->backsize)); + new_back = realloc(ty->back, sizeof(Termsave) * size); + if (!new_back) + return; + memset(new_back + ty->backsize, 0, + sizeof(Termsave) * (size - ty->backsize)); + ty->back = new_back; } else - ty->back = NULL; + { + new_back = calloc(1, sizeof(Termsave) * size); + if (!new_back) + return; + for (i = 0; i < size; i++) + new_back[i] = ty->back[i]; + for (i = size; i < ty->backsize; i++) + termpty_save_free(ty, &ty->back[i]); + free(ty->back); + ty->back = new_back; + } + _accounting_change(sizeof(Termsave) * (size - ty->backsize)); end: ty->backpos = 0; ty->backsize = size;