Fix regression in top(1) after r344381, causing informational messages

to no longer be displayed.  This was because the reimplementation of
setup_buffer() did not copy the previous contents into any reallocated
buffer.

Reported by:	James Wright <james.wright@jigsawdezign.com>
PR:		236947
MFC after:	3 days
This commit is contained in:
Dimitry Andric 2019-04-02 18:01:54 +00:00
parent d705ee60a2
commit c26e2e37aa
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=345807

View File

@ -1347,7 +1347,8 @@ i_uptime(struct timeval *bt, time_t *tod)
static char *
setup_buffer(char *buffer, int addlen)
{
size_t len;
size_t len, old_len;
char *new_buffer;
setup_buffer_bufsiz = screen_width;
if (setup_buffer_bufsiz < SETUPBUFFER_MIN_SCREENWIDTH)
@ -1355,13 +1356,18 @@ setup_buffer(char *buffer, int addlen)
setup_buffer_bufsiz = SETUPBUFFER_MIN_SCREENWIDTH;
}
free(buffer);
len = setup_buffer_bufsiz + addlen + SETUPBUFFER_REQUIRED_ADDBUFSIZ;
buffer = calloc(len, sizeof(char));
if (buffer == NULL)
new_buffer = calloc(len, sizeof(char));
if (new_buffer == NULL)
{
errx(4, "can't allocate sufficient memory");
}
if (buffer != NULL)
{
old_len = strlen(buffer);
memcpy(new_buffer, buffer, old_len < len - 1 ? old_len : len - 1);
free(buffer);
}
return buffer;
return new_buffer;
}