f87aaedc9bcdbda819ff0e01e942b5e74c477829
galt
  Thu Feb 3 02:12:18 2022 -0800
Fixing multi-threading issues by removing setenv usage in https.c and common.c. refs #28844

diff --git src/lib/common.c src/lib/common.c
index 367ed60..c5f803f 100644
--- src/lib/common.c
+++ src/lib/common.c
@@ -3728,52 +3728,37 @@
 return cloneString(skipToNumeric(db));
 }
 
 boolean isAllDigits(char *s)
 /* Return TRUE if string is non-empty and contains only digits (i.e. is a nonnegative integer). */
 {
 if (isEmpty(s))
     return FALSE;
 char c;
 while ((c = *s++) != 0)
     if (!isdigit(c))
         return FALSE;
 return TRUE;
 }
 
-time_t mktimeFromUtc (struct tm *t)
-/* Return time_t for tm in UTC (GMT)
- * Useful for stuff like converting to time_t the
- * last-modified HTTP response header
- * which is always GMT. Returns -1 on failure of mktime */
-{
-    time_t time;
-    char *tz;
-    char save_tz[100];
-    tz=getenv("TZ");
-    if (tz)
-        safecpy(save_tz, sizeof(save_tz), tz);
-    setenv("TZ", "GMT0", 1);
-    tzset();
-    t->tm_isdst = 0;
-    time=mktime(t);
-    if (tz)
-        setenv("TZ", save_tz, 1);
-    else
-        unsetenv("TZ");
-    tzset();
-    return (time);
+
+time_t mktimeFromUtc(struct tm *tm)
+{
+time_t ret = tm->tm_sec + tm->tm_min*60 + tm->tm_hour*3600 + tm->tm_yday*86400;
+ret += ((time_t)31536000) * (tm->tm_year-70);
+ret += ((tm->tm_year-69)/4)*86400 - ((tm->tm_year-1)/100)*86400 + ((tm->tm_year+299)/400)*86400;
+return ret;
 }
 
 
 time_t dateToSeconds(const char *date,const char*format)
 // Convert a string date to time_t
 {
 struct tm storage={0,0,0,0,0,0,0,0,0};
 if (strptime(date,format,&storage)==NULL)
     return 0;
 else
     return mktime(&storage);
 }
 
 boolean dateIsOld(const char *date,const char*format)
 // Is this string date older than now?