When formating the time for "ls -l"-style output, show dates in the future
authorguenther <guenther@openbsd.org>
Thu, 9 Jan 2014 03:26:00 +0000 (03:26 +0000)
committerguenther <guenther@openbsd.org>
Thu, 9 Jan 2014 03:26:00 +0000 (03:26 +0000)
with the year, and rearrange a comparison to avoid a potentional signed
arithmetic overflow that would give the wrong result.

ok djm@

usr.bin/ssh/sftp-common.c

index ffc0166..ba73ba7 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: sftp-common.c,v 1.25 2013/11/08 11:15:19 dtucker Exp $ */
+/* $OpenBSD: sftp-common.c,v 1.26 2014/01/09 03:26:00 guenther Exp $ */
 /*
  * Copyright (c) 2001 Markus Friedl.  All rights reserved.
  * Copyright (c) 2001 Damien Miller.  All rights reserved.
@@ -191,6 +191,7 @@ ls_file(const char *name, const struct stat *st, int remote, int si_units)
        char *user, *group;
        char buf[1024], mode[11+1], tbuf[12+1], ubuf[11+1], gbuf[11+1];
        char sbuf[FMT_SCALED_STRSIZE];
+       time_t now;
 
        strmode(st->st_mode, mode);
        if (!remote) {
@@ -206,7 +207,9 @@ ls_file(const char *name, const struct stat *st, int remote, int si_units)
                group = gbuf;
        }
        if (ltime != NULL) {
-               if (time(NULL) - st->st_mtime < (365*24*60*60)/2)
+               now = time(NULL);
+               if (now - (365*24*60*60)/2 < st->st_mtime &&
+                   now >= st->st_mtime)
                        sz = strftime(tbuf, sizeof tbuf, "%b %e %H:%M", ltime);
                else
                        sz = strftime(tbuf, sizeof tbuf, "%b %e  %Y", ltime);