I have forgotten that I took up this bug in Jun this year. Already fixed in distribution?
On 2013/10/01, at 20:34, arisawa <aris...@ar.aichi-u.ac.jp> wrote: > Hello, > > Am I missing something? > It seems logic is inverted to me. > > Kenji Arisawa > > maia% ls -l > ... > --rw-rw-r-- M 323 arisawa arisawa 0 Sep 29 06:29 x > --rw-rw-r-- M 323 arisawa arisawa 14 Sep 28 17:50 z > maia% mtime x > 1380403777 x > maia% if(test z -older 1380403777) echo older > maia% if(! test z -older 1380403777) echo older > older > maia% > > > man test(1) > f -older t True if file f is older than (modified before) > time t. If t is a integer followed by the letters > y(years), M(months), d(days), h(hours), > m(minutes), or s(seconds), it represents current > time minus the specified time. If there is no > letter, it represents seconds since epoch. You > can also concatenate mixed units. For example, > 3d12h means three days and twelve hours ago. > > the source code /sys/src/cmd/test.c > int > isolder(char *pin, char *f) > { > int r; > ulong n, m; > char *p = pin; > Dir *dir; > > dir = dirstat(f); > if (dir == nil) > return 0; > > /* parse time */ > n = 0; > while(*p){ > m = strtoul(p, &p, 0); > switch(*p){ > case 0: > n = m; > break; > case 'y': > m *= 12; > /* fall through */ > case 'M': > m *= 30; > /* fall through */ > case 'd': > m *= 24; > /* fall through */ > case 'h': > m *= 60; > /* fall through */ > case 'm': > m *= 60; > /* fall through */ > case 's': > n += m; > p++; > break; > default: > synbad("bad time syntax, ", pin); > } > } > > r = dir->mtime + n < time(0); > free(dir); > return r; > } > > > >