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