xref: /freebsd/usr.sbin/cron/cron/job.c (revision 8a7b6120)
184f33deaSJordan K. Hubbard /* Copyright 1988,1990,1993,1994 by Paul Vixie
284f33deaSJordan K. Hubbard  * All rights reserved
3fe590ffeSEric van Gyzen  */
4fe590ffeSEric van Gyzen 
5fe590ffeSEric van Gyzen /*
6fe590ffeSEric van Gyzen  * Copyright (c) 1997 by Internet Software Consortium
784f33deaSJordan K. Hubbard  *
8fe590ffeSEric van Gyzen  * Permission to use, copy, modify, and distribute this software for any
9fe590ffeSEric van Gyzen  * purpose with or without fee is hereby granted, provided that the above
10fe590ffeSEric van Gyzen  * copyright notice and this permission notice appear in all copies.
1184f33deaSJordan K. Hubbard  *
12fe590ffeSEric van Gyzen  * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
13fe590ffeSEric van Gyzen  * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
14fe590ffeSEric van Gyzen  * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
15fe590ffeSEric van Gyzen  * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16fe590ffeSEric van Gyzen  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17fe590ffeSEric van Gyzen  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
18fe590ffeSEric van Gyzen  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
19fe590ffeSEric van Gyzen  * SOFTWARE.
2084f33deaSJordan K. Hubbard  */
2184f33deaSJordan K. Hubbard 
2284f33deaSJordan K. Hubbard 
2384f33deaSJordan K. Hubbard 
2484f33deaSJordan K. Hubbard #include "cron.h"
2584f33deaSJordan K. Hubbard 
2684f33deaSJordan K. Hubbard 
2784f33deaSJordan K. Hubbard typedef	struct _job {
2884f33deaSJordan K. Hubbard 	struct _job	*next;
2984f33deaSJordan K. Hubbard 	entry		*e;
3084f33deaSJordan K. Hubbard 	user		*u;
3184f33deaSJordan K. Hubbard } job;
3284f33deaSJordan K. Hubbard 
3384f33deaSJordan K. Hubbard 
3484f33deaSJordan K. Hubbard static job	*jhead = NULL, *jtail = NULL;
3584f33deaSJordan K. Hubbard 
3684f33deaSJordan K. Hubbard 
3784f33deaSJordan K. Hubbard void
job_add(entry * e,user * u)38e93f27e3SJohn Baldwin job_add(entry *e, user *u)
3984f33deaSJordan K. Hubbard {
40fe590ffeSEric van Gyzen 	job *j;
4184f33deaSJordan K. Hubbard 
4284f33deaSJordan K. Hubbard 	/* if already on queue, keep going */
43fe590ffeSEric van Gyzen 	for (j = jhead; j != NULL; j = j->next)
44fe590ffeSEric van Gyzen 		if (j->e == e && j->u == u)
45fe590ffeSEric van Gyzen 			return;
4684f33deaSJordan K. Hubbard 
4784f33deaSJordan K. Hubbard 	/* build a job queue element */
48bdddbd2fSPaul Traina 	if ((j = (job*)malloc(sizeof(job))) == NULL)
49bdddbd2fSPaul Traina 		return;
5084f33deaSJordan K. Hubbard 	j->next = (job*) NULL;
5184f33deaSJordan K. Hubbard 	j->e = e;
5284f33deaSJordan K. Hubbard 	j->u = u;
5384f33deaSJordan K. Hubbard 
5484f33deaSJordan K. Hubbard 	/* add it to the tail */
55fe590ffeSEric van Gyzen 	if (jhead == NULL)
56fe590ffeSEric van Gyzen 		jhead = j;
57fe590ffeSEric van Gyzen 	else
58fe590ffeSEric van Gyzen 		jtail->next = j;
5984f33deaSJordan K. Hubbard 	jtail = j;
6084f33deaSJordan K. Hubbard }
6184f33deaSJordan K. Hubbard 
6284f33deaSJordan K. Hubbard 
6384f33deaSJordan K. Hubbard int
job_runqueue(void)64e93f27e3SJohn Baldwin job_runqueue(void)
6584f33deaSJordan K. Hubbard {
66fe590ffeSEric van Gyzen 	job	*j, *jn;
67fe590ffeSEric van Gyzen 	int	run = 0;
6884f33deaSJordan K. Hubbard 
6984f33deaSJordan K. Hubbard 	for (j = jhead; j; j = jn) {
7084f33deaSJordan K. Hubbard 		do_command(j->e, j->u);
7184f33deaSJordan K. Hubbard 		jn = j->next;
7284f33deaSJordan K. Hubbard 		free(j);
7384f33deaSJordan K. Hubbard 		run++;
7484f33deaSJordan K. Hubbard 	}
7584f33deaSJordan K. Hubbard 	jhead = jtail = NULL;
76fe590ffeSEric van Gyzen 	return (run);
7784f33deaSJordan K. Hubbard }
78