OSDN Git Service

* java/lang/natSystem.cc (getSystemTimeZone): Only use tm_gmtoff
authorwarrenl <warrenl@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Jan 2001 21:57:08 +0000 (21:57 +0000)
committerwarrenl <warrenl@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 Jan 2001 21:57:08 +0000 (21:57 +0000)
and timezone if they are available on the system.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39283 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/java/lang/natSystem.cc

index 3f244b7..7169f86 100644 (file)
@@ -1,3 +1,8 @@
+2001-01-26  Warren Levy  <warrenl@redhat.com>
+
+       * java/lang/natSystem.cc (getSystemTimeZone): Only use tm_gmtoff
+       and timezone if they are available on the system.
+
 2001-01-24  Tom Tromey  <tromey@redhat.com>
 
        * java/lang/sf_fabs.c: Use uint32_t, not __uint32_t.
index c94ad75..3e96559 100644 (file)
@@ -240,15 +240,28 @@ getpwuid_adaptor(T_passwd * (*getpwuid_r)(T_uid user_id, T_passwd *pwd_r,
 jstring
 java::lang::System::getSystemTimeZone (void)
 {
+  struct tm *tim;
   time_t current_time;
   char **tzinfo, *tzid;
   long tzoffset;
 
   current_time = time(0);
 
-  mktime(localtime(&current_time));
+  mktime(tim = localtime(&current_time));
+#ifdef STRUCT_TM_HAS_GMTOFF
+  tzoffset = -(tim->tm_gmtoff);        // tm_gmtoff is secs EAST of UTC.
+#elif HAVE_TIMEZONE
+  tzoffset = timezone;         // timezone is secs WEST of UTC.
+#else
+  // FIXME: there must be another global if neither tm_gmtoff nor timezone
+  // is available, esp. if tzname is valid.
+  // Richard Earnshaw <rearnsha@arm.com> has suggested using difftime to
+  // calculate between gmtime and localtime (and accounting for possible
+  // daylight savings time) as an alternative.  Also note that this same
+  // issue exists in java/util/natGregorianCalendar.cc.
+  tzoffset = 0L;
+#endif
   tzinfo = tzname;
-  tzoffset = timezone;
 
   if ((tzoffset % 3600) == 0)
     tzoffset = tzoffset / 3600;