1 /* $OpenBSD: job.c,v 1.3 2001/02/18 19:48:35 millert Exp $ */ 2 /* Copyright 1988,1990,1993,1994 by Paul Vixie 3 * All rights reserved 4 */ 5 6 /* 7 * Copyright (c) 1997,2000 by Internet Software Consortium, Inc. 8 * 9 * Permission to use, copy, modify, and distribute this software for any 10 * purpose with or without fee is hereby granted, provided that the above 11 * copyright notice and this permission notice appear in all copies. 12 * 13 * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS 14 * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES 15 * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE 16 * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 17 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 18 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS 19 * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 20 * SOFTWARE. 21 */ 22 23 #if !defined(lint) && !defined(LINT) 24 static char rcsid[] = "$OpenBSD: job.c,v 1.3 2001/02/18 19:48:35 millert Exp $"; 25 #endif 26 27 28 #include "cron.h" 29 30 31 typedef struct _job { 32 struct _job *next; 33 entry *e; 34 user *u; 35 } job; 36 37 38 static job *jhead = NULL, *jtail = NULL; 39 40 41 void 42 job_add(e, u) 43 entry *e; 44 user *u; 45 { 46 job *j; 47 48 /* if already on queue, keep going */ 49 for (j = jhead; j != NULL; j = j->next) 50 if (j->e == e && j->u == u) 51 return; 52 53 /* build a job queue element */ 54 if ((j = (job*)malloc(sizeof(job))) == NULL) 55 return; 56 j->next = (job*) NULL; 57 j->e = e; 58 j->u = u; 59 60 /* add it to the tail */ 61 if (jhead == NULL) 62 jhead = j; 63 else 64 jtail->next = j; 65 jtail = j; 66 } 67 68 69 int 70 job_runqueue() 71 { 72 job *j, *jn; 73 int run = 0; 74 75 for (j = jhead; j; j = jn) { 76 do_command(j->e, j->u); 77 jn = j->next; 78 free(j); 79 run++; 80 } 81 jhead = jtail = NULL; 82 return (run); 83 } 84