29 lines
		
	
	
		
			748 B
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			748 B
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- a/src/time/__tz.c
 | 
						|
+++ b/src/time/__tz.c
 | 
						|
@@ -23,6 +23,9 @@ static int r0[5], r1[5];
 | 
						|
 static const unsigned char *zi, *trans, *index, *types, *abbrevs, *abbrevs_end;
 | 
						|
 static size_t map_size;
 | 
						|
 
 | 
						|
+static const char *tzfile;
 | 
						|
+static size_t tzfile_size;
 | 
						|
+
 | 
						|
 static char old_tz_buf[32];
 | 
						|
 static char *old_tz = old_tz_buf;
 | 
						|
 static size_t old_tz_size = sizeof old_tz_buf;
 | 
						|
@@ -125,6 +128,15 @@ static void do_tzset()
 | 
						|
 		"/usr/share/zoneinfo/\0/share/zoneinfo/\0/etc/zoneinfo/\0";
 | 
						|
 
 | 
						|
 	s = getenv("TZ");
 | 
						|
+
 | 
						|
+	/* if TZ is empty try to read it from /etc/TZ */
 | 
						|
+	if (!s || !*s) {
 | 
						|
+		if (tzfile)
 | 
						|
+			__munmap((void*)tzfile, tzfile_size);
 | 
						|
+
 | 
						|
+		s = tzfile = (void *)__map_file("/etc/TZ", &tzfile_size);
 | 
						|
+	}
 | 
						|
+
 | 
						|
 	if (!s) s = "/etc/localtime";
 | 
						|
 	if (!*s) s = __gmt;
 | 
						|
 
 |