xref: /netbsd/external/bsd/ntp/dist/libntp/ymd2yd.c (revision 6550d01e)
1 /*	$NetBSD: ymd2yd.c,v 1.1.1.1 2009/12/13 16:55:06 kardel Exp $	*/
2 
3 /*
4  * ymd2yd - compute the date in the year from y/m/d
5  */
6 
7 #include "ntp_fp.h"
8 #include "ntp_unixtime.h"
9 #include "ntp_stdlib.h"
10 
11 /*
12  * Tables to compute the day of year from yyyymmdd timecode.
13  * Viva la leap.
14  */
15 static int day1tab[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
16 static int day2tab[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
17 
18 int
19 ymd2yd(
20 	int y,
21 	int m,
22 	int d
23 	)
24 {
25 	int i, *t;
26 
27 	if (m < 1 || m > 12 || d < 1)
28 		return (-1);
29 
30 	if (((y%4 == 0) && (y%100 != 0)) || (y%400 == 0))
31 		t = day2tab;	/* leap year */
32 	else
33 		t = day1tab;	/* not a leap year */
34 	if (d > t[m - 1])
35 		return (-1);
36 	for (i = 0; i < m - 1; i++)
37 		d += t[i];
38 	return d;
39 }
40