]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.sbin/cron/cron/job.c
zfs: merge openzfs/zfs@688514e47
[FreeBSD/FreeBSD.git] / usr.sbin / cron / cron / job.c
1 /* Copyright 1988,1990,1993,1994 by Paul Vixie
2  * All rights reserved
3  */
4
5 /*
6  * Copyright (c) 1997 by Internet Software Consortium
7  *
8  * Permission to use, copy, modify, and distribute this software for any
9  * purpose with or without fee is hereby granted, provided that the above
10  * copyright notice and this permission notice appear in all copies.
11  *
12  * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
13  * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
14  * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
15  * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
18  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
19  * SOFTWARE.
20  */
21
22
23
24 #include "cron.h"
25
26
27 typedef struct _job {
28         struct _job     *next;
29         entry           *e;
30         user            *u;
31 } job;
32
33
34 static job      *jhead = NULL, *jtail = NULL;
35
36
37 void
38 job_add(entry *e, user *u)
39 {
40         job *j;
41
42         /* if already on queue, keep going */
43         for (j = jhead; j != NULL; j = j->next)
44                 if (j->e == e && j->u == u)
45                         return;
46
47         /* build a job queue element */
48         if ((j = (job*)malloc(sizeof(job))) == NULL)
49                 return;
50         j->next = (job*) NULL;
51         j->e = e;
52         j->u = u;
53
54         /* add it to the tail */
55         if (jhead == NULL)
56                 jhead = j;
57         else
58                 jtail->next = j;
59         jtail = j;
60 }
61
62
63 int
64 job_runqueue(void)
65 {
66         job     *j, *jn;
67         int     run = 0;
68
69         for (j = jhead; j; j = jn) {
70                 do_command(j->e, j->u);
71                 jn = j->next;
72                 free(j);
73                 run++;
74         }
75         jhead = jtail = NULL;
76         return (run);
77 }