svn commit: r345953 - stable/12/usr.bin/top
Dimitry Andric
dim at FreeBSD.org
Tue Sep 3 14:06:22 UTC 2019
Author: dim
Date: Fri Apr 5 16:12:31 2019
New Revision: 345953
URL: https://svnweb.freebsd.org/changeset/base/345953
Log:
MFC r345807:
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 at jigsawdezign.com>
PR: 236947
Modified:
stable/12/usr.bin/top/display.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/usr.bin/top/display.c
==============================================================================
--- stable/12/usr.bin/top/display.c Fri Apr 5 16:09:23 2019 (r345952)
+++ stable/12/usr.bin/top/display.c Fri Apr 5 16:12:31 2019 (r345953)
@@ -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;
}
More information about the svn-src-stable
mailing list