File alternative-tzdb_dat.patch of Package java-17-openjdk

--- a/src/java.base/share/classes/java/time/zone/TzdbZoneRulesProvider.java	Thu Jun 28 17:49:13 2018 -0700
+++ b/src/java.base/share/classes/java/time/zone/TzdbZoneRulesProvider.java	Fri Jun 29 08:23:40 2018 +0200
@@ -74,6 +74,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.NavigableMap;
+import java.util.Properties;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.concurrent.ConcurrentHashMap;
@@ -106,7 +107,14 @@
      */
     public TzdbZoneRulesProvider() {
         try {
-            String libDir = StaticProperty.javaHome() + File.separator + "lib";
+            final String homeDir = StaticProperty.javaHome();
+            if (homeDir == null) {
+                throw new Error("java.home is not set");
+            }
+            String libDir = homeDir + File.separator + "lib";
+            String otherDir = getZoneInfoDir(homeDir);
+            if (otherDir != null)
+                libDir = otherDir;
             try (DataInputStream dis = new DataInputStream(
                      new BufferedInputStream(new FileInputStream(
                          new File(libDir, "tzdb.dat"))))) {
@@ -117,6 +125,28 @@
         }
     }
 
+    private static String getZoneInfoDir(final String homeDir) {
+        try {
+            File f = new File(homeDir + File.separator + "conf" +
+                              File.separator + "tz.properties");
+            if (!f.exists())
+                return null;
+            BufferedInputStream bin = new BufferedInputStream(new FileInputStream(f));
+            Properties props = new Properties();
+            props.load(bin);
+            bin.close();
+            String dir = props.getProperty("sun.zoneinfo.dir");
+            if (dir == null)
+                return null;
+            File tzdbdat = new File(dir, "tzdb.dat");
+            if (tzdbdat.exists())
+                return dir;
+            return null;
+        } catch (Exception x) {
+            return null;
+        }
+    }
+
     @Override
     protected Set<String> provideZoneIds() {
         return new HashSet<>(regionIds);
--- a/src/java.base/share/classes/sun/util/calendar/ZoneInfoFile.java	Thu Jun 28 17:49:13 2018 -0700
+++ b/src/java.base/share/classes/sun/util/calendar/ZoneInfoFile.java	Fri Jun 29 08:23:40 2018 +0200
@@ -45,6 +45,7 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Properties;
 import java.util.SimpleTimeZone;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.zip.CRC32;
@@ -252,7 +253,15 @@
         AccessController.doPrivileged(new PrivilegedAction<Void>() {
             public Void run() {
                 try {
-                    String libDir = StaticProperty.javaHome() + File.separator + "lib";
+                    final String homeDir = StaticProperty.javaHome();
+                    if (homeDir == null) {
+                        throw new Error("java.home is not set");
+                    }
+                    String libDir = homeDir + File.separator + "lib";
+                    String otherDir = getZoneInfoDir(homeDir);
+                    if (otherDir != null)
+                        libDir = otherDir;
+
                     try (DataInputStream dis = new DataInputStream(
                              new BufferedInputStream(new FileInputStream(
                                  new File(libDir, "tzdb.dat"))))) {
@@ -266,6 +275,28 @@
         });
     }
 
+    private static String getZoneInfoDir(final String homeDir) {
+        try {
+            File f = new File(homeDir + File.separator + "conf" +
+                              File.separator + "tz.properties");
+            if (!f.exists())
+                return null;
+            BufferedInputStream bin = new BufferedInputStream(new FileInputStream(f));
+            Properties props = new Properties();
+            props.load(bin);
+            bin.close();
+            String dir = props.getProperty("sun.zoneinfo.dir");
+            if (dir == null)
+                return null;
+            File tzdbdat = new File(dir, "tzdb.dat");
+            if (tzdbdat.exists())
+                return dir;
+            return null;
+        } catch (Exception x) {
+            return null;
+        }
+    }
+
     private static void addOldMapping() {
         for (String[] alias : oldMappings) {
             aliases.put(alias[0], alias[1]);
openSUSE Build Service is sponsored by