Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Sep 1996 19:57:18 +0300 (EET DST)
From:      Sakari Jalovaara <sja@sja.home.tekla.fi>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   bin/1657: ls(1) output of future mtime
Message-ID:  <199609201657.TAA00841@sja.home.tekla.fi>
Resent-Message-ID: <199609201700.KAA05754@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         1657
>Category:       bin
>Synopsis:       ls(1) output of future mtime
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Sep 20 10:00:01 PDT 1996
>Last-Modified:
>Originator:     Sakari Jalovaara
>Organization:
>Release:        FreeBSD 2.2-960801-SNAP i386
>Environment:

	Any

>Description:

	If a file has modification time far in the future, the output
	of ls(1) does not show the modification year.  (Ditto for
	access and change times.)

>How-To-Repeat:

	Create a file with a modification time more than a year in the future
	(e.g. use "touch -t".)  Type "ls -lt".

	E.g.: (note that "Sep 13" seems to be sorted before "Sep 14", which
	is confusing)

	~/Xm (sja@estabur) 127> /bin/ls -lt DialogS*
	-rw-r--r--  1 sja  sja   5328 Sep 13 23:29 DialogS.c
	-rw-r--r--  1 sja  sja  62413 Sep 14 16:24 DialogS.o
	~/Xm (sja@estabur) 128> /bin/ls -ltT DialogS*
	-rw-r--r--  1 sja  sja   5328 Sep 13 23:29:31 2000 DialogS.c
	-rw-r--r--  1 sja  sja  62413 Sep 14 16:24:43 1996 DialogS.o

	(The cause of the above 4-year time warp is unknown.  Kernel
	bug, hardware clock glitch, ...?)

	ls should _not_ print the year for _all_ future times, since network
	file systems often cause time shifts of a few seconds.
	The year is useful for dates more than six months in the future.

>Fix:

	/usr/src/bin/ls/print.c, function printtime():

*** print.c.orig	Sat Sep 14 16:45:55 1996
--- print.c	Sat Sep 14 16:53:51 1996
***************
*** 231,236 ****
--- 231,240 ----
  {
  	int i;
  	char longstring[80];
+ 	static time_t now;
+ 
+ 	if (now == 0)
+ 		now = time(NULL);
  
  	strftime(longstring, sizeof(longstring), "%c", localtime(&ftime));
  	for (i = 4; i < 11; ++i)
***************
*** 240,246 ****
  	if (f_sectime)
  		for (i = 11; i < 24; i++)
  			(void)putchar(longstring[i]);
! 	else if (ftime + SIXMONTHS > time(NULL))
  		for (i = 11; i < 16; ++i)
  			(void)putchar(longstring[i]);
  	else {
--- 244,250 ----
  	if (f_sectime)
  		for (i = 11; i < 24; i++)
  			(void)putchar(longstring[i]);
! 	else if (ftime + SIXMONTHS > now && ftime < now + SIXMONTHS)
  		for (i = 11; i < 16; ++i)
  			(void)putchar(longstring[i]);
  	else {
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199609201657.TAA00841>