Annotation of linux/kernel/mktime.c, revision 1.1.1.4

1.1.1.2   root        1: /*
                      2:  *  linux/kernel/mktime.c
                      3:  *
1.1.1.3   root        4:  *  Copyright (C) 1991, 1992  Linus Torvalds
1.1.1.2   root        5:  */
                      6: 
1.1.1.4 ! root        7: #include <linux/mktime.h>
1.1       root        8: 
                      9: /*
                     10:  * This isn't the library routine, it is only used in the kernel.
                     11:  * as such, we don't care about years<1970 etc, but assume everything
                     12:  * is ok. Similarly, TZ etc is happily ignored. We just do everything
                     13:  * as easily as possible. Let's find something public for the library
                     14:  * routines (although I think minix times is public).
                     15:  */
                     16: /*
                     17:  * PS. I hate whoever though up the year 1970 - couldn't they have gotten
                     18:  * a leap-year instead? I also hate Gregorius, pope or no. I'm grumpy.
                     19:  */
                     20: #define MINUTE 60
                     21: #define HOUR (60*MINUTE)
                     22: #define DAY (24*HOUR)
                     23: #define YEAR (365*DAY)
                     24: 
                     25: /* interestingly, we assume leap-years */
                     26: static int month[12] = {
                     27:        0,
                     28:        DAY*(31),
                     29:        DAY*(31+29),
                     30:        DAY*(31+29+31),
                     31:        DAY*(31+29+31+30),
                     32:        DAY*(31+29+31+30+31),
                     33:        DAY*(31+29+31+30+31+30),
                     34:        DAY*(31+29+31+30+31+30+31),
                     35:        DAY*(31+29+31+30+31+30+31+31),
                     36:        DAY*(31+29+31+30+31+30+31+31+30),
                     37:        DAY*(31+29+31+30+31+30+31+31+30+31),
                     38:        DAY*(31+29+31+30+31+30+31+31+30+31+30)
                     39: };
                     40: 
1.1.1.4 ! root       41: long kernel_mktime(struct mktime * time)
1.1       root       42: {
                     43:        long res;
                     44:        int year;
                     45: 
1.1.1.4 ! root       46:        year = time->year - 70;
1.1       root       47: /* magic offsets (y+1) needed to get leapyears right.*/
                     48:        res = YEAR*year + DAY*((year+1)/4);
1.1.1.4 ! root       49:        res += month[time->mon];
1.1       root       50: /* and (y+2) here. If it wasn't a leap-year, we have to adjust */
1.1.1.4 ! root       51:        if (time->mon>1 && ((year+2)%4))
1.1       root       52:                res -= DAY;
1.1.1.4 ! root       53:        res += DAY*(time->day-1);
        !            54:        res += HOUR*time->hour;
        !            55:        res += MINUTE*time->min;
        !            56:        res += time->sec;
1.1       root       57:        return res;
                     58: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.