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