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
)));