* Makefile.in (localtime_CFLAGS): Define as -fwrapv since localtime
code requires int overflows to be fully defined. * localtime.cc: Align a bit more to upstream code.
This commit is contained in:
		
							parent
							
								
									ccd40e46d7
								
							
						
					
					
						commit
						b39bb1802a
					
				|  | @ -1,3 +1,9 @@ | ||||||
|  | 2013-05-14  Corinna Vinschen  <corinna@vinschen.de> | ||||||
|  | 
 | ||||||
|  | 	* Makefile.in (localtime_CFLAGS): Define as -fwrapv since localtime | ||||||
|  | 	code requires int overflows to be fully defined. | ||||||
|  | 	* localtime.cc: Align a bit more to upstream code. | ||||||
|  | 
 | ||||||
| 2013-05-14  Corinna Vinschen  <corinna@vinschen.de> | 2013-05-14  Corinna Vinschen  <corinna@vinschen.de> | ||||||
| 
 | 
 | ||||||
| 	* grp.cc (get_groups): Convert to void function. | 	* grp.cc (get_groups): Convert to void function. | ||||||
|  |  | ||||||
|  | @ -303,6 +303,7 @@ fhandler_zero_CFLAGS:=-fomit-frame-pointer | ||||||
| flock_CFLAGS:=-fomit-frame-pointer | flock_CFLAGS:=-fomit-frame-pointer | ||||||
| grp_CFLAGS:=-fomit-frame-pointer | grp_CFLAGS:=-fomit-frame-pointer | ||||||
| libstdcxx_wrapper_CFLAGS:=-fomit-frame-pointer | libstdcxx_wrapper_CFLAGS:=-fomit-frame-pointer | ||||||
|  | localtime_CFLAGS:=-fwrapv | ||||||
| malloc_CFLAGS:=-fomit-frame-pointer -O3 | malloc_CFLAGS:=-fomit-frame-pointer -O3 | ||||||
| malloc_wrapper_CFLAGS:=-fomit-frame-pointer | malloc_wrapper_CFLAGS:=-fomit-frame-pointer | ||||||
| miscfuncs_CFLAGS:=-fomit-frame-pointer | miscfuncs_CFLAGS:=-fomit-frame-pointer | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
| ** This file is in the public domain, so clarified as of | ** This file is in the public domain, so clarified as of | ||||||
| ** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov). | ** 1996-06-05 by Arthur David Olson. | ||||||
| */ | */ | ||||||
| /* Temporarily merged private.h and tzfile.h for ease of management - DJ */ | /* Temporarily merged private.h and tzfile.h for ease of management - DJ */ | ||||||
| 
 | 
 | ||||||
|  | @ -23,14 +23,13 @@ | ||||||
| 
 | 
 | ||||||
| #ifndef lint | #ifndef lint | ||||||
| #ifndef NOID | #ifndef NOID | ||||||
| static char	elsieid[] = "@(#)localtime.c	7.66"; | static char	elsieid[] = "@(#)localtime.c	8.17"; | ||||||
| #endif /* !defined NOID */ | #endif /* !defined NOID */ | ||||||
| #endif /* !defined lint */ | #endif /* !defined lint */ | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
| ** Leap second handling from Bradley White (bww@k.gp.cs.cmu.edu). | ** Leap second handling from Bradley White. | ||||||
| ** POSIX-style TZ environment variable handling from Guy Harris | ** POSIX-style TZ environment variable handling from Guy Harris. | ||||||
| ** (guy@auspex.com). |  | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| #define NO_ERROR_IN_DST_GAP | #define NO_ERROR_IN_DST_GAP | ||||||
|  | @ -171,7 +170,7 @@ static char	privatehid[] = "@(#)private.h	7.48"; | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
| ** This file is in the public domain, so clarified as of | ** This file is in the public domain, so clarified as of | ||||||
| ** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov). | ** 1996-06-05 by Arthur David Olson. | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -273,7 +272,7 @@ struct tzhead { | ||||||
| ** 138 years of Pacific Presidential Election time | ** 138 years of Pacific Presidential Election time | ||||||
| ** (where there are three time zone transitions every fourth year). | ** (where there are three time zone transitions every fourth year). | ||||||
| */ | */ | ||||||
| #define TZ_MAX_TIMES	370 | #define TZ_MAX_TIMES	1200 | ||||||
| #endif /* !defined TZ_MAX_TIMES */ | #endif /* !defined TZ_MAX_TIMES */ | ||||||
| 
 | 
 | ||||||
| #ifndef TZ_MAX_TYPES | #ifndef TZ_MAX_TYPES | ||||||
|  | @ -283,7 +282,7 @@ struct tzhead { | ||||||
| #ifdef NOSOLAR | #ifdef NOSOLAR | ||||||
| /*
 | /*
 | ||||||
| ** Must be at least 14 for Europe/Riga as of Jan 12 1995, | ** Must be at least 14 for Europe/Riga as of Jan 12 1995, | ||||||
| ** as noted by Earl Chew <earl@hpato.aus.hp.com>. | ** as noted by Earl Chew. | ||||||
| */ | */ | ||||||
| #define TZ_MAX_TYPES	20	/* Maximum number of local time types */ | #define TZ_MAX_TYPES	20	/* Maximum number of local time types */ | ||||||
| #endif /* !defined NOSOLAR */ | #endif /* !defined NOSOLAR */ | ||||||
|  | @ -341,28 +340,6 @@ struct tzhead { | ||||||
| 
 | 
 | ||||||
| #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0)) | #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0)) | ||||||
| 
 | 
 | ||||||
| #ifndef USG |  | ||||||
| 
 |  | ||||||
| /*
 |  | ||||||
| ** Use of the underscored variants may cause problems if you move your code to |  | ||||||
| ** certain System-V-based systems; for maximum portability, use the |  | ||||||
| ** underscore-free variants.  The underscored variants are provided for |  | ||||||
| ** backward compatibility only; they may disappear from future versions of |  | ||||||
| ** this file. |  | ||||||
| */ |  | ||||||
| 
 |  | ||||||
| #define SECS_PER_MIN	SECSPERMIN |  | ||||||
| #define MINS_PER_HOUR	MINSPERHOUR |  | ||||||
| #define HOURS_PER_DAY	HOURSPERDAY |  | ||||||
| #define DAYS_PER_WEEK	DAYSPERWEEK |  | ||||||
| #define DAYS_PER_NYEAR	DAYSPERNYEAR |  | ||||||
| #define DAYS_PER_LYEAR	DAYSPERLYEAR |  | ||||||
| #define SECS_PER_HOUR	SECSPERHOUR |  | ||||||
| #define SECS_PER_DAY	SECSPERDAY |  | ||||||
| #define MONS_PER_YEAR	MONSPERYEAR |  | ||||||
| 
 |  | ||||||
| #endif /* !defined USG */ |  | ||||||
| 
 |  | ||||||
| #endif /* !defined TZFILE_H */ | #endif /* !defined TZFILE_H */ | ||||||
| 
 | 
 | ||||||
| #include "fcntl.h" | #include "fcntl.h" | ||||||
|  | @ -517,7 +494,7 @@ static int		tzload(timezone_t sp, const char * name, | ||||||
| static int		tzparse(timezone_t sp, const char * name, | static int		tzparse(timezone_t sp, const char * name, | ||||||
| 				int lastditch); | 				int lastditch); | ||||||
| static void		tzset_unlocked(void); | static void		tzset_unlocked(void); | ||||||
| static long		leapcorr(time_t * timep); | static long		leapcorr(const timezone_t sp, time_t * timep); | ||||||
| 
 | 
 | ||||||
| static timezone_t lclptr; | static timezone_t lclptr; | ||||||
| static timezone_t gmtptr; | static timezone_t gmtptr; | ||||||
|  | @ -622,11 +599,11 @@ settzname (void) | ||||||
| #ifdef USG_COMPAT | #ifdef USG_COMPAT | ||||||
| 		if (ttisp->tt_isdst) | 		if (ttisp->tt_isdst) | ||||||
| 			daylight = 1; | 			daylight = 1; | ||||||
| 		if (i == 0 || !ttisp->tt_isdst) | 		if (!ttisp->tt_isdst) | ||||||
| 			timezone = -(ttisp->tt_gmtoff); | 			timezone = -(ttisp->tt_gmtoff); | ||||||
| #endif /* defined USG_COMPAT */ | #endif /* defined USG_COMPAT */ | ||||||
| #ifdef ALTZONE | #ifdef ALTZONE | ||||||
| 		if (i == 0 || ttisp->tt_isdst) | 		if (ttisp->tt_isdst) | ||||||
| 			altzone = -(ttisp->tt_gmtoff); | 			altzone = -(ttisp->tt_gmtoff); | ||||||
| #endif /* defined ALTZONE */ | #endif /* defined ALTZONE */ | ||||||
| 	} | 	} | ||||||
|  | @ -1523,6 +1500,7 @@ tzsetwall (void) | ||||||
| 	lcl_is_set = lcl_setting; | 	lcl_is_set = lcl_setting; | ||||||
| 
 | 
 | ||||||
| 	if (lclptr == NULL) { | 	if (lclptr == NULL) { | ||||||
|  | 		save_errno save; | ||||||
| 		lclptr = (timezone_t) calloc(1, sizeof *lclptr); | 		lclptr = (timezone_t) calloc(1, sizeof *lclptr); | ||||||
| 		if (lclptr == NULL) { | 		if (lclptr == NULL) { | ||||||
| 			settzname();	/* all we can do */ | 			settzname();	/* all we can do */ | ||||||
|  | @ -1632,11 +1610,11 @@ tzset_unlocked(void) | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (lcl_is_set > 0 && strncmp(lcl_TZname, name, sizeof(lcl_TZname) - 1) == 0) | 	if (lcl_is_set > 0 && strcmp(lcl_TZname, name) == 0) | ||||||
| 		return; | 		return; | ||||||
| 	lcl_is_set = (strlen(name) < sizeof (lcl_TZname)) ? lcl_from_environment : lcl_unset; | 	lcl_is_set = (strlen(name) < sizeof (lcl_TZname)) ? lcl_from_environment : lcl_unset; | ||||||
| 	if (lcl_is_set != lcl_unset) | 	if (lcl_is_set != lcl_unset) | ||||||
| 		strlcpy(lcl_TZname, name, sizeof (lcl_TZname)); | 		(void)strlcpy(lcl_TZname, name, sizeof (lcl_TZname)); | ||||||
| 
 | 
 | ||||||
| 	if (lclptr == NULL) { | 	if (lclptr == NULL) { | ||||||
| 		save_errno save; | 		save_errno save; | ||||||
|  | @ -2490,13 +2468,11 @@ gtime(struct tm *const tmp) | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| static long | static long | ||||||
| leapcorr(time_t *timep) | leapcorr(const timezone_t sp, time_t *timep) | ||||||
| { | { | ||||||
| 	timezone_t	sp; |  | ||||||
| 	struct lsinfo * lp; | 	struct lsinfo * lp; | ||||||
| 	int		i; | 	int		i; | ||||||
| 
 | 
 | ||||||
| 	sp = lclptr; |  | ||||||
| 	i = sp->leapcnt; | 	i = sp->leapcnt; | ||||||
| 	while (--i >= 0) { | 	while (--i >= 0) { | ||||||
| 		lp = &sp->lsis[i]; | 		lp = &sp->lsis[i]; | ||||||
|  | @ -2512,7 +2488,7 @@ time2posix(time_t t) | ||||||
| 	time_t result; | 	time_t result; | ||||||
| 	tzset_guard.init ("tzset_guard")->acquire (); | 	tzset_guard.init ("tzset_guard")->acquire (); | ||||||
| 	tzset_unlocked(); | 	tzset_unlocked(); | ||||||
| 	result = t - leapcorr(&t); | 	result = t - leapcorr(lclptr, &t); | ||||||
| 	tzset_guard.release (); | 	tzset_guard.release (); | ||||||
| 	return (result); | 	return (result); | ||||||
| } | } | ||||||
|  | @ -2531,12 +2507,12 @@ posix2time(time_t t) | ||||||
| 	** hit, the corresponding time doesn't exist, | 	** hit, the corresponding time doesn't exist, | ||||||
| 	** so we return an adjacent second. | 	** so we return an adjacent second. | ||||||
| 	*/ | 	*/ | ||||||
| 	x = (time_t)(t + leapcorr(&t)); | 	x = (time_t)(t + leapcorr(lclptr, &t)); | ||||||
| 	y = (time_t)(x - leapcorr(&x)); | 	y = (time_t)(x - leapcorr(lclptr, &x)); | ||||||
| 	if (y < t) { | 	if (y < t) { | ||||||
| 		do { | 		do { | ||||||
| 			x++; | 			x++; | ||||||
| 			y = (time_t)(x - leapcorr(&x)); | 			y = (time_t)(x - leapcorr(lclptr, &x)); | ||||||
| 		} while (y < t); | 		} while (y < t); | ||||||
| 		if (t != y) { | 		if (t != y) { | ||||||
| 			return x - 1; | 			return x - 1; | ||||||
|  | @ -2544,7 +2520,7 @@ posix2time(time_t t) | ||||||
| 	} else if (y > t) { | 	} else if (y > t) { | ||||||
| 		do { | 		do { | ||||||
| 			--x; | 			--x; | ||||||
| 			y = (time_t)(x - leapcorr(&x)); | 			y = (time_t)(x - leapcorr(lclptr, &x)); | ||||||
| 		} while (y > t); | 		} while (y > t); | ||||||
| 		if (t != y) { | 		if (t != y) { | ||||||
| 			return x + 1; | 			return x + 1; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue