home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / KERNEL-S / V1.0 / LINUX-1.0 / LINUX-1 / linux / kernel / mktime.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-01  |  1.4 KB  |  59 lines

  1. /*
  2.  *  linux/kernel/mktime.c
  3.  *
  4.  *  Copyright (C) 1991, 1992  Linus Torvalds
  5.  */
  6.  
  7. #include <linux/mktime.h>
  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.  
  41. long kernel_mktime(struct mktime * time)
  42. {
  43.     long res;
  44.     int year;
  45.  
  46.     year = time->year - 70;
  47. /* magic offsets (y+1) needed to get leapyears right.*/
  48.     res = YEAR*year + DAY*((year+1)/4);
  49.     res += month[time->mon];
  50. /* and (y+2) here. If it wasn't a leap-year, we have to adjust */
  51.     if (time->mon>1 && ((year+2)%4))
  52.         res -= DAY;
  53.     res += DAY*(time->day-1);
  54.     res += HOUR*time->hour;
  55.     res += MINUTE*time->min;
  56.     res += time->sec;
  57.     return res;
  58. }
  59.