Fix the problem that the entry broke into two lines with multi-byte
AM/PM format. Reported by: takawata
This commit is contained in:
parent
e13d7b1486
commit
34903a55c3
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=196652
@ -38,6 +38,6 @@
|
||||
extern int use_ampm;
|
||||
|
||||
struct kinfo_proc;
|
||||
void pr_attime(time_t *, time_t *);
|
||||
int pr_attime(time_t *, time_t *);
|
||||
int pr_idle(time_t);
|
||||
int proc_compare(struct kinfo_proc *, struct kinfo_proc *);
|
||||
|
@ -52,13 +52,14 @@ static const char sccsid[] = "@(#)pr_time.c 8.2 (Berkeley) 4/4/94";
|
||||
* pr_attime --
|
||||
* Print the time since the user logged in.
|
||||
*/
|
||||
void
|
||||
int
|
||||
pr_attime(time_t *started, time_t *now)
|
||||
{
|
||||
static char buf[256];
|
||||
static wchar_t buf[256];
|
||||
struct tm tp, tm;
|
||||
time_t diff;
|
||||
char fmt[20];
|
||||
wchar_t *fmt;
|
||||
int len, width, offset = 0;
|
||||
|
||||
tp = *localtime(started);
|
||||
tm = *localtime(now);
|
||||
@ -66,7 +67,7 @@ pr_attime(time_t *started, time_t *now)
|
||||
|
||||
/* If more than a week, use day-month-year. */
|
||||
if (diff > 86400 * 7)
|
||||
(void)strcpy(fmt, "%d%b%y");
|
||||
fmt = L"%d%b%y";
|
||||
|
||||
/* If not today, use day-hour-am/pm. */
|
||||
else if (tm.tm_mday != tp.tm_mday ||
|
||||
@ -74,16 +75,26 @@ pr_attime(time_t *started, time_t *now)
|
||||
tm.tm_year != tp.tm_year) {
|
||||
/* The line below does not take DST into consideration */
|
||||
/* else if (*now / 86400 != *started / 86400) { */
|
||||
(void)strcpy(fmt, use_ampm ? "%a%I%p" : "%a%H");
|
||||
fmt = use_ampm ? L"%a%I%p" : L"%a%H";
|
||||
}
|
||||
|
||||
/* Default is hh:mm{am,pm}. */
|
||||
else {
|
||||
(void)strcpy(fmt, use_ampm ? "%l:%M%p" : "%k:%M");
|
||||
fmt = use_ampm ? L"%l:%M%p" : L"%k:%M";
|
||||
}
|
||||
|
||||
(void)strftime(buf, sizeof(buf), fmt, &tp);
|
||||
(void)wprintf(L"%-7.7s", buf);
|
||||
(void)wcsftime(buf, sizeof(buf), fmt, &tp);
|
||||
len = wcslen(buf);
|
||||
width = wcswidth(buf, len);
|
||||
if (len == width)
|
||||
(void)wprintf(L"%-7.7ls", buf);
|
||||
else if (width < 7)
|
||||
(void)wprintf(L"%ls%.*s", buf, 7 - width, " ");
|
||||
else {
|
||||
(void)wprintf(L"%ls", buf);
|
||||
offset = width - 7;
|
||||
}
|
||||
return (offset);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -137,7 +137,7 @@ main(int argc, char *argv[])
|
||||
struct stat *stp;
|
||||
FILE *ut;
|
||||
time_t touched;
|
||||
int ch, i, nentries, nusers, wcmd, longidle, dropgid;
|
||||
int ch, i, nentries, nusers, wcmd, longidle, longattime, dropgid;
|
||||
const char *memf, *nlistf, *p;
|
||||
char *x_suffix;
|
||||
char buf[MAXHOSTNAMELEN], errbuf[_POSIX2_LINE_MAX];
|
||||
@ -406,9 +406,10 @@ main(int argc, char *argv[])
|
||||
ep->utmp.ut_line : ep->utmp.ut_line + 3,
|
||||
W_DISPHOSTSIZE, W_DISPHOSTSIZE, *p ? p : "-");
|
||||
t = _time_to_time32(ep->utmp.ut_time);
|
||||
pr_attime(&t, &now);
|
||||
longattime = pr_attime(&t, &now);
|
||||
longidle = pr_idle(ep->idle);
|
||||
(void)printf("%.*s\n", argwidth - longidle, ep->args);
|
||||
(void)printf("%.*s\n", argwidth - longidle - longattime,
|
||||
ep->args);
|
||||
}
|
||||
(void)kvm_close(kd);
|
||||
exit(0);
|
||||
|
Loading…
Reference in New Issue
Block a user