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
job_add(entry * e,user * u)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
job_runqueue(void)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 }
78