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 $
32 * last edit-date: [Wed May 2 09:42:56 2001]
36 * day.month.year optional comment (different day every year) or
37 * day.month optional comment (same day every year)
41 * 23.4.2000 Ostersonntag
42 * 3.10 Tag der deutschen Einheit
44 *----------------------------------------------------------------------------*/
55 static struct holiday *firsth = NULL;
59 static void free_holiday(struct holiday *ptr);
61 /*---------------------------------------------------------------------------*
62 * read in and init holidayes
63 *---------------------------------------------------------------------------*/
65 init_holidays(char *filename)
68 unsigned char buffer[MAXBUFSZ + 1];
69 struct holiday *newh = NULL;
70 struct holiday *lasth = NULL;
76 if((fp = fopen(filename, "r")) == NULL)
78 DBGL(DL_VALID, (log(LL_DBG, "init_holiday: error opening holidayfile %s: %s!", filename, strerror(errno))));
82 while((fgets(buffer, MAXBUFSZ, fp)) != NULL)
84 if(buffer[0] == '#' || buffer[0] == ' ' ||
85 buffer[0] == '\t' || buffer[0] == '\n')
90 ret = sscanf(buffer, "%d.%d.%d", &day, &month, &year);
94 ret = sscanf(buffer, "%d.%d", &day, &month);
97 log(LL_ERR, "init_holiday: parse error for string [%s]!", buffer);
103 if((newh = (struct holiday *) malloc(sizeof(struct holiday))) == NULL)
105 log(LL_ERR, "init_holiday: malloc failed for struct holiday!\n");
111 DBGL(DL_VALID, (log(LL_DBG, "init_holidays: add %d.%d.%d", day, month, year)));
115 DBGL(DL_VALID, (log(LL_DBG, "init_holidays: add %d.%d", day, month)));
136 /*---------------------------------------------------------------------------*
138 *---------------------------------------------------------------------------*/
142 free_holiday(firsth);
145 /*---------------------------------------------------------------------------*
147 *---------------------------------------------------------------------------*/
149 free_holiday(struct holiday *ptr)
155 if(ptr->next != NULL)
156 free_holiday(ptr->next);
161 /*---------------------------------------------------------------------------*
162 * check if date/month/year is a holiday
163 *---------------------------------------------------------------------------*/
165 isholiday(int d, int m, int y)
167 struct holiday *ch = NULL;
176 if(ch->day == d && ch->month == m)
180 DBGL(DL_VALID, (log(LL_DBG, "isholiday: %d.%d is a holiday!", d, m)));
183 else if(ch->year == y)
185 DBGL(DL_VALID, (log(LL_DBG, "isholiday: %d.%d.%d is a holiday!", d, m, y)));