aboutsummaryrefslogtreecommitdiff
path: root/cron.c
blob: 05a94a855a99d34f8b81030a37775ce30a00b3b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <time.h>
#include "ninitfeatures.h"

void cron(char **argv, unsigned long *ret) /*EXTRACT_INCL*/ {
  unsigned long a,b,n, cron=0, now=time(0);
  unsigned long u[3];
  int dummy;
  char *p;

  for (; *argv; argv++) {
    p = *argv;
    u[2] = 0;
    if (scan_ulongs(p,u,3, scan_sec,':',&dummy) < 2) continue;

    if ((a=u[0])==0 || a > (1<<29)) continue;
    n = now;
    b = u[1];
    
    if ((a % 604800) == 0) { b += 3*86400; n -= 3*86400; }
    b %= a;
    n = n + b - (n % a);
    while (n <= now) n += a;
    
    if (cron==0 || n < cron) { cron = n; ret[1] = u[2]; }
  }
  ret[0] = cron;
}