'at' bugs
don at hscfvax.UUCP
don at hscfvax.UUCP
Tue Mar 6 04:00:40 AEST 1984
Subject: two bugs in at
Index: usr.bin/at 4.2BSD
Description:
(1) at's date algorithm is wrong .07% of the time: it thinks the julian
date of March 1st in leap years is 60, not 61 (it screwed up
our accounting last month)
(2) if you try to queue more than 100 jobs at a single time, it loops
(patiently looking for an unused 2-digit sequence)
Repeat-By:
(1) unless you lie to Unix about today's date you'll have to wait
four years
(2) just try it
Fix:
19a20,21
> #define MAXJOBS 20 /* max no. of jobs queued in a particular minute */
>
282a285,286
> if (detail->tm_year%4==0 && found > 1)
> uday += 1;
285,286d288
< if (detail->tm_year%4==0 && uday>59)
< uday += 1;
336,341c338,357
< for (i=0; ; i += 53) {
< sprintf(fname, "%s/%02d.%03d.%04d.%02d", dir, y, d, t,
< (getpid()+i)%100);
< if (access(fname, 0) == -1)
< return;
< }
---
> for(;;){
> for (i = 0; i < MAXJOBS; i++) {
> sprintf(fname, "%s/%02d.%03d.%04d.%02d", dir, y, d, t, i);
> if (access(fname, 0) == -1)
> return;
> }
>
> /* come here if there are > MAXJOBS requests for the same time:
> ** move to the next minute */
>
> if(++t < 2400)
> continue;
> t = 0;
> if(++d <= 365 + (y%4 == 0)) /* or day, if necessary */
> continue;
> d = 0;
> if(++y < 100) /* or year */
> continue;
> y = 0; /* or century */
> }
More information about the Comp.bugs.4bsd.ucb-fixes
mailing list