2 * Copyright (c) 2000, 2001 Hellmuth Michaelis. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 *---------------------------------------------------------------------------
27 * isdnd - holiday file handling
28 * =============================
30 * $FreeBSD: src/usr.sbin/i4b/isdnd/holiday.c,v 1.3.2.1 2001/08/01 17:45:03 obrien Exp $
31 * $DragonFly: src/usr.sbin/i4b/isdnd/holiday.c,v 1.2 2003/06/17 04:29:54 dillon Exp $
33 * last edit-date: [Wed May 2 09:42:56 2001]
37 * day.month.year optional comment (different day every year) or
38 * day.month optional comment (same day every year)
42 * 23.4.2000 Ostersonntag
43 * 3.10 Tag der deutschen Einheit
45 *----------------------------------------------------------------------------*/
56 static struct holiday *firsth = NULL;
60 static void free_holiday(struct holiday *ptr);
62 /*---------------------------------------------------------------------------*
63 * read in and init holidayes
64 *---------------------------------------------------------------------------*/
66 init_holidays(char *filename)
69 unsigned char buffer[MAXBUFSZ + 1];
70 struct holiday *newh = NULL;
71 struct holiday *lasth = NULL;
77 if((fp = fopen(filename, "r")) == NULL)
79 DBGL(DL_VALID, (dolog(LL_DBG, "init_holiday: error opening holidayfile %s: %s!", filename, strerror(errno))));
83 while((fgets(buffer, MAXBUFSZ, fp)) != NULL)
85 if(buffer[0] == '#' || buffer[0] == ' ' ||
86 buffer[0] == '\t' || buffer[0] == '\n')
91 ret = sscanf(buffer, "%d.%d.%d", &day, &month, &year);
95 ret = sscanf(buffer, "%d.%d", &day, &month);
98 dolog(LL_ERR, "init_holiday: parse error for string [%s]!", buffer);
104 if((newh = (struct holiday *) malloc(sizeof(struct holiday))) == NULL)
106 dolog(LL_ERR, "init_holiday: malloc failed for struct holiday!\n");
112 DBGL(DL_VALID, (dolog(LL_DBG, "init_holidays: add %d.%d.%d", day, month, year)));
116 DBGL(DL_VALID, (dolog(LL_DBG, "init_holidays: add %d.%d", day, month)));
137 /*---------------------------------------------------------------------------*
139 *---------------------------------------------------------------------------*/
143 free_holiday(firsth);
146 /*---------------------------------------------------------------------------*
148 *---------------------------------------------------------------------------*/
150 free_holiday(struct holiday *ptr)
156 if(ptr->next != NULL)
157 free_holiday(ptr->next);
162 /*---------------------------------------------------------------------------*
163 * check if date/month/year is a holiday
164 *---------------------------------------------------------------------------*/
166 isholiday(int d, int m, int y)
168 struct holiday *ch = NULL;
177 if(ch->day == d && ch->month == m)
181 DBGL(DL_VALID, (dolog(LL_DBG, "isholiday: %d.%d is a holiday!", d, m)));
184 else if(ch->year == y)
186 DBGL(DL_VALID, (dolog(LL_DBG, "isholiday: %d.%d.%d is a holiday!", d, m, y)));