diff options
author | joe <joe@FreeBSD.org> | 2000-06-18 22:18:04 +0000 |
---|---|---|
committer | joe <joe@FreeBSD.org> | 2000-06-18 22:18:04 +0000 |
commit | 52bc7db3a0ceaee4389cf1aa5a5721b7bf2ee5c1 (patch) | |
tree | 4c3762e4bacd92232abab0308b43362c35b7d9d9 /bin | |
parent | 2be2bf630e2ac589096459b976c068ab57cb075c (diff) | |
download | FreeBSD-src-52bc7db3a0ceaee4389cf1aa5a5721b7bf2ee5c1.zip FreeBSD-src-52bc7db3a0ceaee4389cf1aa5a5721b7bf2ee5c1.tar.gz |
Don't assume that the output of strftime for "%c" ("national
representation of time and date") won't change in time. Instead
of hard coding the locations of the time elements and hoping that
they don't move use strftime to generate the desired formats in
the first place.
PR: bin/7826
Diffstat (limited to 'bin')
-rw-r--r-- | bin/ls/print.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/bin/ls/print.c b/bin/ls/print.c index 596825c..d397c1c 100644 --- a/bin/ls/print.c +++ b/bin/ls/print.c @@ -293,30 +293,25 @@ static void printtime(ftime) time_t ftime; { - int i; char longstring[80]; static time_t now; + const char *format; if (now == 0) now = time(NULL); - strftime(longstring, sizeof(longstring), "%c", localtime(&ftime)); - for (i = 4; i < 11; ++i) - (void)putchar(longstring[i]); - #define SIXMONTHS ((365 / 2) * 86400) if (f_sectime) - for (i = 11; i < 24; i++) - (void)putchar(longstring[i]); + /* Mmm dd hh:mm:ss yyyy */ + format = "%b %e %T %Y "; else if (ftime + SIXMONTHS > now && ftime < now + SIXMONTHS) - for (i = 11; i < 16; ++i) - (void)putchar(longstring[i]); - else { - (void)putchar(' '); - for (i = 20; i < 24; ++i) - (void)putchar(longstring[i]); - } - (void)putchar(' '); + /* Mmm dd hh:mm */ + format = "%b %e %R "; + else + /* Mmm dd yyyy */ + format = "%b %e %Y "; + strftime(longstring, sizeof(longstring), format, localtime(&ftime)); + fputs(longstring, stdout); } static int |