diff --git a/procps/top.c b/procps/top.c index 15222f570..5141feef1 100644 --- a/procps/top.c +++ b/procps/top.c @@ -608,8 +608,6 @@ static NOINLINE void display_process_list(int lines_rem, int scr_width) BITS_PER_INT = sizeof(int) * 8 }; - char ppubuf[sizeof(int)*3 * 2 + 12]; - int n; top_status_t *s; unsigned long total_memory = display_header(scr_width, &lines_rem); /* or use total_vsz? */ /* xxx_shift and xxx_scale variables allow us to replace @@ -691,6 +689,9 @@ static NOINLINE void display_process_list(int lines_rem, int scr_width) lines_rem = ntop - G_scroll_ofs; s = top + G_scroll_ofs; while (--lines_rem >= 0) { + int n; + char *pp; + char ppubuf[sizeof(int)*3 * 2 + 12]; char vsz_str_buf[8]; unsigned col; @@ -706,14 +707,15 @@ static NOINLINE void display_process_list(int lines_rem, int scr_width) /* Format PID PPID USER part into 6+6+8 chars: * shrink PID/PPID if possible, then truncate USER */ - char *pp, *p = ppubuf; - if (*p == ' ') { - do - p++, n--; - while (n != 6+6+8 && *p == ' '); - overlapping_strcpy(ppubuf, p); /* shrink PID */ - if (n == 6+6+8) - goto shortened; + char *p; + pp = ppubuf; + if (*pp == ' ') { + do { + pp++, n--; + if (n == 6+6+8) + goto shortened; + } while (*pp == ' '); + overlapping_strcpy(ppubuf, pp); /* shrink PID */ } pp = p = skip_non_whitespace(ppubuf) + 1; if (*p == ' ') { @@ -724,13 +726,14 @@ static NOINLINE void display_process_list(int lines_rem, int scr_width) } ppubuf[6+6+8] = '\0'; /* truncate USER */ } + pp = ppubuf; shortened: col = snprintf(line_buf, scr_width, "\n" "%s %s %.5s" FMT IF_FEATURE_TOP_SMP_PROCESS(" %3d") IF_FEATURE_TOP_CPU_USAGE_PERCENTAGE(FMT) " ", - ppubuf, + pp, s->state, vsz_str_buf, SHOW_STAT(pmem) IF_FEATURE_TOP_SMP_PROCESS(, s->last_seen_on_cpu)