diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/misc/time/time.c | 126 | 
1 files changed, 37 insertions, 89 deletions
diff --git a/libc/misc/time/time.c b/libc/misc/time/time.c index 168655b00..05971389f 100644 --- a/libc/misc/time/time.c +++ b/libc/misc/time/time.c @@ -146,7 +146,6 @@  #include <bits/uClibc_uintmaxtostr.h>  #include <bits/uClibc_mutex.h> -  #ifdef __UCLIBC_HAS_WCHAR__  #include <wchar.h>  #endif @@ -154,39 +153,6 @@  #include <xlocale.h>  #endif -/* libc_hidden_proto(asctime) */ -/* libc_hidden_proto(asctime_r) */ -/* libc_hidden_proto(ctime) */ -/* libc_hidden_proto(localtime) */ -/* libc_hidden_proto(localtime_r) */ - -/* Experimentally off - libc_hidden_proto(memset) */ -/* Experimentally off - libc_hidden_proto(memcpy) */ -/* Experimentally off - libc_hidden_proto(strcmp) */ -/* Experimentally off - libc_hidden_proto(strcpy) */ -/* Experimentally off - libc_hidden_proto(strlen) */ -/* Experimentally off - libc_hidden_proto(strncpy) */ -/* libc_hidden_proto(sprintf) */ -/* libc_hidden_proto(open) */ -/* libc_hidden_proto(read) */ -/* libc_hidden_proto(close) */ -/* libc_hidden_proto(getenv) */ -/* libc_hidden_proto(tzset) */ -/* libc_hidden_proto(gettimeofday) */ -/* Experimentally off - libc_hidden_proto(strncasecmp) */ -/* libc_hidden_proto(strtol) */ -/* libc_hidden_proto(strtoul) */ -/* libc_hidden_proto(nl_langinfo) */ - -#ifdef __UCLIBC_HAS_XLOCALE__ -/* Experimentally off - libc_hidden_proto(strncasecmp_l) */ -/* libc_hidden_proto(strtol_l) */ -/* libc_hidden_proto(strtoul_l) */ -/* libc_hidden_proto(nl_langinfo_l) */ -/* libc_hidden_proto(__ctype_b_loc) */ -#elif defined __UCLIBC_HAS_CTYPE_TABLES__ -/* libc_hidden_proto(__ctype_b) */ -#endif  #ifndef __isleap  #define __isleap(y) ( !((y) % 4) && ( ((y) % 100) || !((y) % 400) ) ) @@ -406,16 +372,16 @@ char *asctime_r(register const struct tm *__restrict ptm,  		if (((unsigned int) tmp) >= 100) { /* Just check 2 digit non-neg. */  			buffer[-1] = *buffer = '?';  		} else -#else  /* SAFE_ASCTIME_R */ +#else  		assert(((unsigned int) tmp) < 100); /* Just check 2 digit non-neg. */ -#endif /* SAFE_ASCTIME_R */ +#endif  		{  			*buffer = '0' + (tmp % 10);  #ifdef __BCC__  			buffer[-1] = '0' + (tmp/10); -#else  /* __BCC__ */ +#else  			buffer[-1] += (tmp/10); -#endif /* __BCC__ */ +#endif  		}  	} while ((buffer -= 2)[-2] == '0'); @@ -433,8 +399,6 @@ libc_hidden_def(asctime_r)  #include <sys/times.h> -/* libc_hidden_proto(times) */ -  #ifndef __BCC__  #if CLOCKS_PER_SEC != 1000000L  #error unexpected value for CLOCKS_PER_SEC! @@ -814,10 +778,6 @@ time_t timegm(struct tm *timeptr)  #if defined(__UCLIBC_HAS_XLOCALE__) && !defined(__UCLIBC_DO_XLOCALE) -/* libc_hidden_proto(strftime) */ - -/* libc_hidden_proto(strftime_l) */ -  size_t strftime(char *__restrict s, size_t maxsize,  				const char *__restrict format,  				const struct tm *__restrict timeptr) @@ -1100,18 +1060,18 @@ LOOP:  #ifdef ENABLE_ERA_CODE  			if ((mod & NO_E_MOD) /* Actually, this means E modifier present. */  				&& (*(o = __XL_NPP(nl_langinfo)(_NL_ITEM(LC_TIME, -											 (int)(((unsigned char *)p)[4])) -											__LOCALE_ARG -									  ))) +							(int)(((unsigned char *)p)[4])) +							__LOCALE_ARG +							)))  				) {  				p = o;  				goto LOOP;  			}  #endif  			p = __XL_NPP(nl_langinfo)(_NL_ITEM(LC_TIME, -									 (int)(*((unsigned char *)p))) -								  __LOCALE_ARG -								  ); +							(int)(*((unsigned char *)p))) +							__LOCALE_ARG +							);  			goto LOOP;  		} @@ -1185,7 +1145,7 @@ LOOP:  					 * tm_gmtoff value.  What we'll do instead is treat the  					 * timezone name as unknown/invalid and return "???". */  					if (!o) { -							o = "???"; +						o = "???";  					}  #endif  					assert(o != NULL); @@ -1239,7 +1199,7 @@ LOOP:  						--field_val;  					}  				} else {	/* ((*p == 'g') || (*p == 'G') || (*p == 'V')) */ -				ISO_LOOP: +ISO_LOOP:  					isofm = (((x[1] - x[0]) + 11) % 7) - 3;	/* [-3,3] */  					if (x[1] < isofm) {	/* belongs to previous year */ @@ -1250,7 +1210,7 @@ LOOP:  					field_val = ((x[1] - isofm) / 7) + 1; /* week # */  					days = 365 + __isleap(x[2]); -					isofm = ((isofm + 7*53 + 3 - days)) %7 + days - 3; /* next year */ +					isofm = ((isofm + 7*53 + 3 - days)) % 7 + days - 3; /* next year */  					if (x[1] >= isofm) { /* next year */  						x[1] -= days;  						++x[2]; @@ -1269,7 +1229,7 @@ LOOP:  			}  		} else {  			i = TP_OFFSETS + (code & 0x1f); -			if ((field_val = load_field(spec[i],timeptr)) < 0) { +			if ((field_val = load_field(spec[i], timeptr)) < 0) {  				goto OUTPUT;  			} @@ -1281,7 +1241,7 @@ LOOP:  			}  			if (i & 32) {  				field_val %= j; -				if (((i&128) + field_val) == 0) { /* mod 12? == 0 */ +				if (((i & 128) + field_val) == 0) { /* mod 12? == 0 */  					field_val = j; /* set to 12 */  				}  			} @@ -1294,7 +1254,7 @@ LOOP:  		if ((code & MASK_SPEC) == STRING_SPEC) {  			o_count = SIZE_MAX;  			field_val += spec[STRINGS_NL_ITEM_START + (code & 0xf)]; -			o = __XL_NPP(nl_langinfo)(_NL_ITEM(LC_TIME, field_val)  __LOCALE_ARG ); +			o = __XL_NPP(nl_langinfo)(_NL_ITEM(LC_TIME, field_val)  __LOCALE_ARG);  		} else {  			o_count = ((i >> 1) & 3) + 1;  			o = buf + o_count; @@ -1335,10 +1295,6 @@ libc_hidden_def(__XL_NPP(strftime))  #if defined(__UCLIBC_HAS_XLOCALE__) && !defined(__UCLIBC_DO_XLOCALE) -/* libc_hidden_proto(strptime) */ - -/* libc_hidden_proto(strptime_l) */ -  char *strptime(const char *__restrict buf, const char *__restrict format,  			   struct tm *__restrict tm)  { @@ -1560,17 +1516,18 @@ LOOP:  #ifdef ENABLE_ERA_CODE  			if ((mod & NO_E_MOD) /* Actually, this means E modifier present. */  				&& (*(o = __XL_NPP(nl_langinfo)(_NL_ITEM(LC_TIME, -											  (int)(((unsigned char *)p)[4])) -											__LOCALE_ARG -											))) +							(int)(((unsigned char *)p)[4])) +							__LOCALE_ARG +							)))  				) {  				p = o;  				goto LOOP;  			}  #endif  			p = __XL_NPP(nl_langinfo)(_NL_ITEM(LC_TIME, -										   (int)(*((unsigned char *)p))) -								  __LOCALE_ARG ); +							(int)(*((unsigned char *)p))) +							__LOCALE_ARG +							);  			goto LOOP;  		} @@ -1584,7 +1541,7 @@ LOOP:  			do {  				--j;  				o = __XL_NPP(nl_langinfo)(i+j   __LOCALE_ARG); -				if (!__XL_NPP(strncasecmp)(buf,o,strlen(o)   __LOCALE_ARG) && *o) { +				if (!__XL_NPP(strncasecmp)(buf, o, strlen(o)   __LOCALE_ARG) && *o) {  					do {		/* Found a match. */  						++buf;  					} while (*++o); @@ -1674,7 +1631,7 @@ LOOP:  			fields[(*x) >> 3] = i; -			if (((unsigned char)(*x - (10<< 3) + 0 + 0)) <= 8) { /* %C or %y */ +			if (((unsigned char)(*x - (10 << 3) + 0 + 0)) <= 8) { /* %C or %y */  				if ((j = fields[10]) < 0) {	/* No %C, so i must be %y data. */  					if (i <= 68) { /* Map [0-68] to 2000+i */  						i += 100; @@ -1830,7 +1787,7 @@ static const char *getnumber(register const char *e, int *pn)  #ifndef __UCLIBC_HAS_TZ_FILE_READ_MANY__  static smallint TZ_file_read;		/* Let BSS initialization set this to 0. */ -#endif /* __UCLIBC_HAS_TZ_FILE_READ_MANY__ */ +#endif  static char *read_TZ_file(char *buf)  { @@ -1883,13 +1840,9 @@ ERROR:  #endif /* __UCLIBC_HAS_TZ_FILE__ */ -#ifndef __UCLIBC_HAS_CTYPE_TABLES__ -/* libc_hidden_proto(isascii) */ -#endif -  void tzset(void)  { -    _time_tzset((time(NULL)) < new_rule_starts); +	_time_tzset((time(NULL)) < new_rule_starts);  }  void _time_tzset(int use_old_rules) @@ -1903,10 +1856,10 @@ void _time_tzset(int use_old_rules)  	char c;  #ifdef __UCLIBC_HAS_TZ_FILE__  	char buf[TZ_BUFLEN]; -#endif /* __UCLIBC_HAS_TZ_FILE__ */ +#endif  #ifdef __UCLIBC_HAS_TZ_CACHING__  	static char oldval[TZ_BUFLEN]; /* BSS-zero'd. */ -#endif /* __UCLIBC_HAS_TZ_CACHING__ */ +#endif  	__UCLIBC_MUTEX_LOCK(_time_tzlock); @@ -1931,12 +1884,12 @@ void _time_tzset(int use_old_rules)  	if ((!e						/* TZ env var not set... */  #ifdef __UCLIBC_HAS_TZ_FILE__  		 && !(e = read_TZ_file(buf)) /* and no file or invalid file */ -#endif /* __UCLIBC_HAS_TZ_FILE__ */ +#endif  		 ) || !*e) {			/* or set to empty string. */  ILLEGAL:					/* TODO: Clean up the following... */  #ifdef __UCLIBC_HAS_TZ_CACHING__  		*oldval = 0;			/* Set oldval to an empty string. */ -#endif /* __UCLIBC_HAS_TZ_CACHING__ */ +#endif  		memset(_time_tzinfo, 0, 2*sizeof(rule_struct));  		strcpy(_time_tzinfo[0].tzname, UTC);  		goto DONE; @@ -1954,7 +1907,7 @@ ILLEGAL:					/* TODO: Clean up the following... */  	 * it is too long, but it that case it will be illegal and will be reset  	 * to the empty string anyway. */  	strncpy(oldval, e, TZ_BUFLEN); -#endif /* __UCLIBC_HAS_TZ_CACHING__ */ +#endif  	count = 0;  	new_rules[1].tzname[0] = 0; @@ -2016,15 +1969,15 @@ SKIP_OFFSET:  	} else {					/* OK, we have dst, so get some rules. */  		count = 0;  		if (!*e) {				/* No rules so default to US rules. */ -		        e = use_old_rules ? DEFAULT_RULES : DEFAULT_2007_RULES; +			e = use_old_rules ? DEFAULT_RULES : DEFAULT_2007_RULES;  #ifdef DEBUG_TZSET  			if (e == DEFAULT_RULES) -			    printf("tzset: Using old rules.\n"); +				printf("tzset: Using old rules.\n");  			else if (e == DEFAULT_2007_RULES) -			    printf("tzset: Using new rules\n"); +				printf("tzset: Using new rules\n");  			else -			    printf("tzset: Using undefined rules\n"); -#endif /* DEBUG_TZSET */ +				printf("tzset: Using undefined rules\n"); +#endif  		}  		do { @@ -2228,7 +2181,6 @@ struct tm attribute_hidden *_time_t2tm(const time_t *__restrict timer,  		t = 365;  	} -  	*p += ((int) t);			/* result[7] .. tm_yday */  	p -= 2;						/* at result[5] */ @@ -2404,7 +2356,7 @@ DST_CORRECT:  	__time_localtime_tzi(&t, (struct tm *)p, tzi);  	if (t == ((time_t)(-1))) {	/* Remember, time_t can be unsigned. */ -	    goto DONE; +		goto DONE;  	}  	if ((d < 0) && (((struct tm *)p)->tm_isdst != default_dst)) { @@ -2432,10 +2384,6 @@ DONE:  #if defined(__UCLIBC_HAS_XLOCALE__) && !defined(__UCLIBC_DO_XLOCALE) -/* libc_hidden_proto(wcsftime) */ - -/* libc_hidden_proto(wcsftime_l) */ -  size_t wcsftime(wchar_t *__restrict s, size_t maxsize,  				const wchar_t *__restrict format,  				const struct tm *__restrict timeptr)  | 
