diff --git a/jdk/src/solaris/classes/java/util/prefs/FileSystemPreferences.java b/jdk/src/solaris/classes/java/util/prefs/FileSystemPreferences.java index 5f922f12..217516cf 100644 --- a/jdk/src/solaris/classes/java/util/prefs/FileSystemPreferences.java +++ b/jdk/src/solaris/classes/java/util/prefs/FileSystemPreferences.java @@ -107,9 +107,29 @@ class FileSystemPreferences extends AbstractPreferences { private static void setupUserRoot() { AccessController.doPrivileged(new PrivilegedAction() { public Void run() { - userRootDir = - new File(System.getProperty("java.util.prefs.userRoot", - System.getProperty("user.home")), ".java/.userPrefs"); + /* On Linux systems, put the userPrefs dir into + * ${XDG_CONFIG_HOME:-$HOME/.config}/java/userPrefs in order to + * follow the XDG Base Directory Specification. + */ + if (System.getProperty("os.name").equals("Linux")) { + /* assume findable homedir, which the jvm already does */ + String xdgDefaultConfigHome = System.getenv("HOME") + "/.config"; + String xdgConfigHomeEnvVar = "XDG_CONFIG_HOME"; + String xdgConfigDir; + + String xdgSetConfigDir = System.getenv(xdgConfigHomeEnvVar); + + if (xdgSetConfigDir == null) { + xdgConfigDir = xdgDefaultConfigHome; + } else { + xdgConfigDir = xdgSetConfigDir; + } + userRootDir = new File(xdgConfigDir, "java/userPrefs"); + } else { + userRootDir = + new File(System.getProperty("java.util.prefs.userRoot", + System.getProperty("user.home")), ".java/.userPrefs"); + } // Attempt to create root dir if it does not yet exist. if (!userRootDir.exists()) { if (userRootDir.mkdirs()) {