OK bluhm@
On Sun, Aug 07, 2022 at 06:22:38PM -0500, Scott Cheloha wrote:
> On Fri, Sep 18, 2020 at 03:59:05PM -0500, Scott Cheloha wrote:
> >
> > [...]
> >
> > - An HH:MM:SS format uptime is useful in top(1). It's also more
> > visually consistent with the local timestamp printed on the line
> > above it, so it is easier to read at a glance.
> >
> > - The variable printing of "days" is annoying. I would rather it
> > just told me "0 days" if it had been less than one day. It sucks
> > when the information you want moves around or isn't shown at all.
> > It's clever, sure, but I'd rather it be consistent.
> >
> > This patch changes the uptime format string to "up D days HH:MM:SS".
> > The format string does not vary with the elapsed uptime. There is no
> > inclusion/omission of the plural suffix depending on whether days is
> > equal to one.
> >
> > [...]
>
> Whoops, forgot about this one. September 18, 2020. What a time to be
> alive.
>
> Let's try this again. 98 week bump.
>
> To recap, this patch makes the uptime formatting in top(1) produce
> more constant-width results. The formatting is now always:
>
> up D days HH:MM:SS
>
> so only the day-count changes size. The day-count is also always
> printed: if the machine has not been up for a full day it prints
>
> up 0 days HH:MM:SS
>
> For example, the upper lines on the top(1) running on my machine
> currently look like this:
>
> load averages: 0.29, 0.29, 0.27 jetsam.attlocal.net
> 18:12:16
> 82 processes: 81 idle, 1 on processor up 3 days
> 07:14:01
>
> I have been running with this for almost two years and I love it.
> I would like to commit it.
>
> The only feedback I got when I originally posted this was that the
> output formatting would no longer be the same as uptime(1)'s. I don't
> think that matters very much. The person who offered the feedback
> didn't think it mattered either, they were just hypothesizing
> objections.
>
> ok?
>
> Index: display.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/top/display.c,v
> retrieving revision 1.65
> diff -u -p -r1.65 display.c
> --- display.c 26 Aug 2020 16:21:28 -0000 1.65
> +++ display.c 7 Aug 2022 23:14:25 -0000
> @@ -208,31 +208,28 @@ display_init(struct statics * statics)
> return (display_lines);
> }
>
> +/*
> + * Print the time elapsed since the system booted.
> + */
> static void
> format_uptime(char *buf, size_t buflen)
> {
> - time_t uptime;
> - int days, hrs, mins;
> struct timespec boottime;
> + time_t uptime;
> + unsigned int days, hrs, mins, secs;
> +
> + if (clock_gettime(CLOCK_BOOTTIME, &boottime) == -1)
> + err(1, "clock_gettime");
>
> - /*
> - * Print how long system has been up.
> - */
> - if (clock_gettime(CLOCK_BOOTTIME, &boottime) != -1) {
> - uptime = boottime.tv_sec;
> - uptime += 30;
> - days = uptime / (3600 * 24);
> - uptime %= (3600 * 24);
> - hrs = uptime / 3600;
> - uptime %= 3600;
> - mins = uptime / 60;
> - if (days > 0)
> - snprintf(buf, buflen, "up %d day%s, %2d:%02d",
> - days, days > 1 ? "s" : "", hrs, mins);
> - else
> - snprintf(buf, buflen, "up %2d:%02d",
> - hrs, mins);
> - }
> + uptime = boottime.tv_sec;
> + days = uptime / (3600 * 24);
> + uptime %= (3600 * 24);
> + hrs = uptime / 3600;
> + uptime %= 3600;
> + mins = uptime / 60;
> + secs = uptime % 60;
> + snprintf(buf, buflen, "up %u days %02u:%02u:%02u",
> + days, hrs, mins, secs);
> }
>
>