xref: /freebsd/usr.sbin/cron/cron/job.c (revision 4e8d558c)
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 #if !defined(lint) && !defined(LINT)
23 static const char rcsid[] = "$Id: job.c,v 1.2 1998/08/14 00:32:40 vixie Exp $";
24 #endif
25 
26 
27 #include "cron.h"
28 
29 
30 typedef	struct _job {
31 	struct _job	*next;
32 	entry		*e;
33 	user		*u;
34 } job;
35 
36 
37 static job	*jhead = NULL, *jtail = NULL;
38 
39 
40 void
41 job_add(entry *e, user *u)
42 {
43 	job *j;
44 
45 	/* if already on queue, keep going */
46 	for (j = jhead; j != NULL; j = j->next)
47 		if (j->e == e && j->u == u)
48 			return;
49 
50 	/* build a job queue element */
51 	if ((j = (job*)malloc(sizeof(job))) == NULL)
52 		return;
53 	j->next = (job*) NULL;
54 	j->e = e;
55 	j->u = u;
56 
57 	/* add it to the tail */
58 	if (jhead == NULL)
59 		jhead = j;
60 	else
61 		jtail->next = j;
62 	jtail = j;
63 }
64 
65 
66 int
67 job_runqueue(void)
68 {
69 	job	*j, *jn;
70 	int	run = 0;
71 
72 	for (j = jhead; j; j = jn) {
73 		do_command(j->e, j->u);
74 		jn = j->next;
75 		free(j);
76 		run++;
77 	}
78 	jhead = jtail = NULL;
79 	return (run);
80 }
81