home *** CD-ROM | disk | FTP | other *** search
- /*
- * linux/kernel/mktime.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- */
-
- #include <linux/mktime.h>
-
- /*
- * This isn't the library routine, it is only used in the kernel.
- * as such, we don't care about years<1970 etc, but assume everything
- * is ok. Similarly, TZ etc is happily ignored. We just do everything
- * as easily as possible. Let's find something public for the library
- * routines (although I think minix times is public).
- */
- /*
- * PS. I hate whoever though up the year 1970 - couldn't they have gotten
- * a leap-year instead? I also hate Gregorius, pope or no. I'm grumpy.
- */
- #define MINUTE 60
- #define HOUR (60*MINUTE)
- #define DAY (24*HOUR)
- #define YEAR (365*DAY)
-
- /* interestingly, we assume leap-years */
- static int month[12] = {
- 0,
- DAY*(31),
- DAY*(31+29),
- DAY*(31+29+31),
- DAY*(31+29+31+30),
- DAY*(31+29+31+30+31),
- DAY*(31+29+31+30+31+30),
- DAY*(31+29+31+30+31+30+31),
- DAY*(31+29+31+30+31+30+31+31),
- DAY*(31+29+31+30+31+30+31+31+30),
- DAY*(31+29+31+30+31+30+31+31+30+31),
- DAY*(31+29+31+30+31+30+31+31+30+31+30)
- };
-
- long kernel_mktime(struct mktime * time)
- {
- long res;
- int year;
-
- year = time->year - 70;
- /* magic offsets (y+1) needed to get leapyears right.*/
- res = YEAR*year + DAY*((year+1)/4);
- res += month[time->mon];
- /* and (y+2) here. If it wasn't a leap-year, we have to adjust */
- if (time->mon>1 && ((year+2)%4))
- res -= DAY;
- res += DAY*(time->day-1);
- res += HOUR*time->hour;
- res += MINUTE*time->min;
- res += time->sec;
- return res;
- }
-