2014-09-12 Jeff Johnston <jjohnstn@redhat.com>
* libc/time/month_lengths.c: Actually add file this time.
        * libc/time/tzcalc_limits.c: Ditto.
			
			
This commit is contained in:
		| @@ -1,3 +1,8 @@ | ||||
| 2014-09-12  Jeff Johnston  <jjohnstn@redhat.com> | ||||
|  | ||||
| 	* libc/time/month_lengths.c: Actually add file this time. | ||||
| 	* libc/time/tzcalc_limits.c: Ditto. | ||||
|  | ||||
| 2014-09-11  Freddie Chopin  <freddie_chopin@op.pl> | ||||
|  | ||||
| 	* libc/time/month_lengths.c: New file with __month_lengths array | ||||
|   | ||||
							
								
								
									
										14
									
								
								newlib/libc/time/month_lengths.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								newlib/libc/time/month_lengths.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| /* | ||||
|  * month_lengths.c | ||||
|  * | ||||
|  * Array month_lengths[] is (indirectly) needed by tzset(), mktime(), gmtime() | ||||
|  * and localtime(). To break any dependencies, this array is moved to separate | ||||
|  * source file. | ||||
|  */ | ||||
|  | ||||
| #include "local.h" | ||||
|  | ||||
| _CONST int month_lengths[2][MONSPERYEAR] = { | ||||
|   {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, | ||||
|   {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} | ||||
| } ; | ||||
							
								
								
									
										77
									
								
								newlib/libc/time/tzcalc_limits.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								newlib/libc/time/tzcalc_limits.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| /* | ||||
|  * tzcalc_limits.c | ||||
|  * Original Author: Adapted from tzcode maintained by Arthur David Olson. | ||||
|  * Modifications: | ||||
|  * - Changed to mktm_r and added __tzcalc_limits - 04/10/02, Jeff Johnston | ||||
|  * - Fixed bug in mday computations - 08/12/04, Alex Mogilnikov <alx@intellectronika.ru> | ||||
|  * - Fixed bug in __tzcalc_limits - 08/12/04, Alex Mogilnikov <alx@intellectronika.ru> | ||||
|  * - Moved __tzcalc_limits() to separate file - 05/09/14, Freddie Chopin <freddie_chopin@op.pl> | ||||
|  */ | ||||
|  | ||||
| #include "local.h" | ||||
|  | ||||
| int | ||||
| _DEFUN (__tzcalc_limits, (year), | ||||
| 	int year) | ||||
| { | ||||
|   int days, year_days, years; | ||||
|   int i, j; | ||||
|   __tzinfo_type *_CONST tz = __gettzinfo (); | ||||
|  | ||||
|   if (year < EPOCH_YEAR) | ||||
|     return 0; | ||||
|  | ||||
|   tz->__tzyear = year; | ||||
|  | ||||
|   years = (year - EPOCH_YEAR); | ||||
|  | ||||
|   year_days = years * 365 + | ||||
|     (years - 1 + EPOCH_YEARS_SINCE_LEAP) / 4 - | ||||
|     (years - 1 + EPOCH_YEARS_SINCE_CENTURY) / 100 + | ||||
|     (years - 1 + EPOCH_YEARS_SINCE_LEAP_CENTURY) / 400; | ||||
|  | ||||
|   for (i = 0; i < 2; ++i) | ||||
|     { | ||||
|       if (tz->__tzrule[i].ch == 'J') | ||||
| 	{ | ||||
| 	  /* The Julian day n (1 <= n <= 365). */ | ||||
| 	  days = year_days + tz->__tzrule[i].d + | ||||
| 	    (isleap(year) && tz->__tzrule[i].d >= 60); | ||||
| 	  /* Convert to yday */ | ||||
| 	  --days; | ||||
| 	} | ||||
|       else if (tz->__tzrule[i].ch == 'D') | ||||
| 	days = year_days + tz->__tzrule[i].d; | ||||
|       else | ||||
| 	{ | ||||
| 	  _CONST int yleap = isleap(year); | ||||
| 	  int m_day, m_wday, wday_diff; | ||||
| 	  _CONST int *_CONST ip = month_lengths[yleap]; | ||||
|  | ||||
| 	  days = year_days; | ||||
|  | ||||
| 	  for (j = 1; j < tz->__tzrule[i].m; ++j) | ||||
| 	    days += ip[j-1]; | ||||
|  | ||||
| 	  m_wday = (EPOCH_WDAY + days) % DAYSPERWEEK; | ||||
|  | ||||
| 	  wday_diff = tz->__tzrule[i].d - m_wday; | ||||
| 	  if (wday_diff < 0) | ||||
| 	    wday_diff += DAYSPERWEEK; | ||||
| 	  m_day = (tz->__tzrule[i].n - 1) * DAYSPERWEEK + wday_diff; | ||||
|  | ||||
| 	  while (m_day >= ip[j-1]) | ||||
| 	    m_day -= DAYSPERWEEK; | ||||
|  | ||||
| 	  days += m_day; | ||||
| 	} | ||||
|  | ||||
|       /* store the change-over time in GMT form by adding offset */ | ||||
|       tz->__tzrule[i].change = days * SECSPERDAY + | ||||
|       tz->__tzrule[i].s + tz->__tzrule[i].offset; | ||||
|     } | ||||
|  | ||||
|   tz->__tznorth = (tz->__tzrule[0].change < tz->__tzrule[1].change); | ||||
|  | ||||
|   return 1; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user