summaryrefslogtreecommitdiffstats
path: root/contrib/top
diff options
context:
space:
mode:
authorkeramida <keramida@FreeBSD.org>2005-05-18 13:48:33 +0000
committerkeramida <keramida@FreeBSD.org>2005-05-18 13:48:33 +0000
commitc355fa8659de0fe742763123445875b6ae9bbd32 (patch)
treeb37c0e552600f59b50506cb200587658607c35d4 /contrib/top
parentdec56f15487767a20c1089c1d3c2ad308e3a1c84 (diff)
downloadFreeBSD-src-c355fa8659de0fe742763123445875b6ae9bbd32.zip
FreeBSD-src-c355fa8659de0fe742763123445875b6ae9bbd32.tar.gz
Properly trim the header line too, to fix wrap-around problems that
have been noticed by running top(1) in terminals that are too narrow (or on systems with usernames that were too long, pushing everything too far to the right). Note that this does *not* solve the wrap-around problem of the system statistics, which is an entirely different matter :-/ Tested on: i386, sparc64 (panther), amd64 (sledge) Approved by: davidxu (in principle)
Diffstat (limited to 'contrib/top')
-rw-r--r--contrib/top/display.c42
1 files changed, 41 insertions, 1 deletions
diff --git a/contrib/top/display.c b/contrib/top/display.c
index b1b6435..08814b3 100644
--- a/contrib/top/display.c
+++ b/contrib/top/display.c
@@ -626,6 +626,33 @@ u_message()
static int header_length;
/*
+ * Trim a header string to the current display width and return a newly
+ * allocated area with the trimmed header.
+ */
+
+char *
+trim_header(text)
+
+char *text;
+
+{
+ char *s;
+ int width;
+
+ s = NULL;
+ width = display_width;
+ header_length = strlen(text);
+ if (header_length >= width) {
+ s = malloc((width + 1) * sizeof(char));
+ if (s == NULL)
+ return (NULL);
+ strncpy(s, text, width);
+ s[width] = '\0';
+ }
+ return (s);
+}
+
+/*
* *_header(text) - print the header for the process area
*
* Assumptions: cursor is on the previous line and lastline is consistent
@@ -636,7 +663,12 @@ i_header(text)
char *text;
{
- header_length = strlen(text);
+ char *s;
+
+ s = trim_header(text);
+ if (s != NULL)
+ text = s;
+
if (header_status == ON)
{
putchar('\n');
@@ -647,6 +679,7 @@ char *text;
{
header_status = OFF;
}
+ free(s);
}
/*ARGSUSED*/
@@ -655,6 +688,12 @@ u_header(text)
char *text; /* ignored */
{
+ char *s;
+
+ s = trim_header(text);
+ if (s != NULL)
+ text = s;
+
if (header_status == ERASE)
{
putchar('\n');
@@ -662,6 +701,7 @@ char *text; /* ignored */
clear_eol(header_length);
header_status = OFF;
}
+ free(s);
}
/*
OpenPOWER on IntegriCloud