ls: fix year 9999 bug :)
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 16 Feb 2015 14:36:25 +0000 (15:36 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 16 Feb 2015 14:36:25 +0000 (15:36 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/ls.c

index 1b63be56d7102ef1e8d75cb929b382de0325db4f..a30422a8c34ee7a83ddfc32db526957b1c8e5532 100644 (file)
@@ -581,12 +581,15 @@ static NOINLINE unsigned display_single(const struct dnode *dn)
                } else { /* LIST_DATE_TIME */
                        /* G.current_time_t ~== time(NULL) */
                        time_t age = G.current_time_t - ttime;
-                       printf("%.6s ", filetime + 4); /* "Jun 30" */
                        if (age < 3600L * 24 * 365 / 2 && age > -15 * 60) {
-                               /* hh:mm if less than 6 months old */
-                               printf("%.5s ", filetime + 11);
-                       } else { /* year. buggy if year > 9999 ;) */
-                               printf(" %.4s ", filetime + 20);
+                               /* less than 6 months old */
+                               /* "mmm dd hh:mm " */
+                               printf("%.12s ", filetime + 4);
+                       } else {
+                               /* "mmm dd  yyyy " */
+                               /* "mmm dd yyyyy " after year 9999 :) */
+                               strchr(filetime + 20, '\n')[0] = ' ';
+                               printf("%.7s%6s", filetime + 4, filetime + 20);
                        }
                        column += 13;
                }