|
|
1.1 ! root 1: #include <time.h> ! 2: ! 3: /* ! 4: * This isn't the library routine, it is only used in the kernel. ! 5: * as such, we don't care about years<1970 etc, but assume everything ! 6: * is ok. Similarly, TZ etc is happily ignored. We just do everything ! 7: * as easily as possible. Let's find something public for the library ! 8: * routines (although I think minix times is public). ! 9: */ ! 10: /* ! 11: * PS. I hate whoever though up the year 1970 - couldn't they have gotten ! 12: * a leap-year instead? I also hate Gregorius, pope or no. I'm grumpy. ! 13: */ ! 14: #define MINUTE 60 ! 15: #define HOUR (60*MINUTE) ! 16: #define DAY (24*HOUR) ! 17: #define YEAR (365*DAY) ! 18: ! 19: /* interestingly, we assume leap-years */ ! 20: static int month[12] = { ! 21: 0, ! 22: DAY*(31), ! 23: DAY*(31+29), ! 24: DAY*(31+29+31), ! 25: DAY*(31+29+31+30), ! 26: DAY*(31+29+31+30+31), ! 27: DAY*(31+29+31+30+31+30), ! 28: DAY*(31+29+31+30+31+30+31), ! 29: 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), ! 32: DAY*(31+29+31+30+31+30+31+31+30+31+30) ! 33: }; ! 34: ! 35: long kernel_mktime(struct tm * tm) ! 36: { ! 37: long res; ! 38: int year; ! 39: ! 40: year = tm->tm_year - 70; ! 41: /* magic offsets (y+1) needed to get leapyears right.*/ ! 42: res = YEAR*year + DAY*((year+1)/4); ! 43: res += month[tm->tm_mon]; ! 44: /* and (y+2) here. If it wasn't a leap-year, we have to adjust */ ! 45: if (tm->tm_mon>1 && ((year+2)%4)) ! 46: res -= DAY; ! 47: res += DAY*(tm->tm_mday-1); ! 48: res += HOUR*tm->tm_hour; ! 49: res += MINUTE*tm->tm_min; ! 50: res += tm->tm_sec; ! 51: return res; ! 52: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.