xref: /freebsd/usr.sbin/cron/cron/job.c (revision bdddbd2f)
184f33deaSJordan K. Hubbard /* Copyright 1988,1990,1993,1994 by Paul Vixie
284f33deaSJordan K. Hubbard  * All rights reserved
384f33deaSJordan K. Hubbard  *
484f33deaSJordan K. Hubbard  * Distribute freely, except: don't remove my name from the source or
584f33deaSJordan K. Hubbard  * documentation (don't take credit for my work), mark your changes (don't
684f33deaSJordan K. Hubbard  * get me blamed for your possible bugs), don't alter or remove this
784f33deaSJordan K. Hubbard  * notice.  May be sold if buildable source is provided to buyer.  No
884f33deaSJordan K. Hubbard  * warrantee of any kind, express or implied, is included with this
984f33deaSJordan K. Hubbard  * software; use at your own risk, responsibility for damages (if any) to
1084f33deaSJordan K. Hubbard  * anyone resulting from the use of this software rests entirely with the
1184f33deaSJordan K. Hubbard  * user.
1284f33deaSJordan K. Hubbard  *
1384f33deaSJordan K. Hubbard  * Send bug reports, bug fixes, enhancements, requests, flames, etc., and
1484f33deaSJordan K. Hubbard  * I'll try to keep a version up to date.  I can be reached as follows:
1584f33deaSJordan K. Hubbard  * Paul Vixie          <paul@vix.com>          uunet!decwrl!vixie!paul
1684f33deaSJordan K. Hubbard  */
1784f33deaSJordan K. Hubbard 
1884f33deaSJordan K. Hubbard #if !defined(lint) && !defined(LINT)
19bdddbd2fSPaul Traina static char rcsid[] = "$Id: job.c,v 1.2 1996/11/01 23:27:36 millert Exp $";
2084f33deaSJordan K. Hubbard #endif
2184f33deaSJordan K. Hubbard 
2284f33deaSJordan K. Hubbard 
2384f33deaSJordan K. Hubbard #include "cron.h"
2484f33deaSJordan K. Hubbard 
2584f33deaSJordan K. Hubbard 
2684f33deaSJordan K. Hubbard typedef	struct _job {
2784f33deaSJordan K. Hubbard 	struct _job	*next;
2884f33deaSJordan K. Hubbard 	entry		*e;
2984f33deaSJordan K. Hubbard 	user		*u;
3084f33deaSJordan K. Hubbard } job;
3184f33deaSJordan K. Hubbard 
3284f33deaSJordan K. Hubbard 
3384f33deaSJordan K. Hubbard static job	*jhead = NULL, *jtail = NULL;
3484f33deaSJordan K. Hubbard 
3584f33deaSJordan K. Hubbard 
3684f33deaSJordan K. Hubbard void
3784f33deaSJordan K. Hubbard job_add(e, u)
3884f33deaSJordan K. Hubbard 	register entry *e;
3984f33deaSJordan K. Hubbard 	register user *u;
4084f33deaSJordan K. Hubbard {
4184f33deaSJordan K. Hubbard 	register job *j;
4284f33deaSJordan K. Hubbard 
4384f33deaSJordan K. Hubbard 	/* if already on queue, keep going */
4484f33deaSJordan K. Hubbard 	for (j=jhead; j; j=j->next)
4584f33deaSJordan K. Hubbard 		if (j->e == e && j->u == u) { 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 */
5584f33deaSJordan K. Hubbard 	if (!jhead) { jhead=j; }
5684f33deaSJordan K. Hubbard 	else { jtail->next=j; }
5784f33deaSJordan K. Hubbard 	jtail = j;
5884f33deaSJordan K. Hubbard }
5984f33deaSJordan K. Hubbard 
6084f33deaSJordan K. Hubbard 
6184f33deaSJordan K. Hubbard int
6284f33deaSJordan K. Hubbard job_runqueue()
6384f33deaSJordan K. Hubbard {
6484f33deaSJordan K. Hubbard 	register job	*j, *jn;
6584f33deaSJordan K. Hubbard 	register int	run = 0;
6684f33deaSJordan K. Hubbard 
6784f33deaSJordan K. Hubbard 	for (j=jhead; j; j=jn) {
6884f33deaSJordan K. Hubbard 		do_command(j->e, j->u);
6984f33deaSJordan K. Hubbard 		jn = j->next;
7084f33deaSJordan K. Hubbard 		free(j);
7184f33deaSJordan K. Hubbard 		run++;
7284f33deaSJordan K. Hubbard 	}
7384f33deaSJordan K. Hubbard 	jhead = jtail = NULL;
7484f33deaSJordan K. Hubbard 	return run;
7584f33deaSJordan K. Hubbard }
76