]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugzilla #46686:
authorJeremias Maerki <jeremias@apache.org>
Wed, 11 Feb 2009 08:41:04 +0000 (08:41 +0000)
committerJeremias Maerki <jeremias@apache.org>
Wed, 11 Feb 2009 08:41:04 +0000 (08:41 +0000)
Use temporary directory for the font cache if the user home directory is not write-accessible.
Submitted by: Alok Singh <alok.at.jivesoftware.com>

Modifications to patch by jeremias:
- Bugfix: original code switched to temporary directory if the .fop directory already existed in user home.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@743273 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/fonts/FontCache.java
status.xml

index fceeacb7b28572c0b354b30223cf8f3d36415412..9d5eff01029ffb353526435c40418629124b0ac1 100644 (file)
@@ -81,11 +81,18 @@ public final class FontCache implements Serializable {
     }
 
     private static File getUserHome() {
-        String s = System.getProperty("user.home");
-        if (s != null) {
-            File userDir = new File(s);
-            if (userDir.exists()) {
-                return userDir;
+        return toDirectory(System.getProperty("user.home"));
+    }
+
+    private static File getTempDirectory() {
+        return toDirectory(System.getProperty("java.io.tmpdir"));
+    }
+
+    private static File toDirectory(String path) {
+        if (path != null) {
+            File dir = new File(path);
+            if (dir.exists()) {
+                return dir;
             }
         }
         return null;
@@ -101,7 +108,15 @@ public final class FontCache implements Serializable {
         if (userHome != null) {
             File fopUserDir = new File(userHome, FOP_USER_DIR);
             if (forWriting) {
-                fopUserDir.mkdir();
+                boolean writable = fopUserDir.canWrite();
+                if (!fopUserDir.exists()) {
+                    writable = fopUserDir.mkdir();
+                }
+                if (!writable) {
+                    userHome = getTempDirectory();
+                    fopUserDir = new File(userHome, FOP_USER_DIR);
+                    fopUserDir.mkdir();
+                }
             }
             return new File(fopUserDir, DEFAULT_CACHE_FILENAME);
         }
index 2e6e4eb112a4398d204dfa15852b1bc69d422b88..74393873dc8f2a7439a1adddc14602b0ff051ca6 100644 (file)
       documents. Example: the fix of marks layering will be such a case when it's done.
     -->
     <release version="FOP Trunk" date="TBD">
+      <action context="Fonts" dev="JM" type="fix" fixes-bug="46686" due-to="Alok Singh">
+        Use temporary directory for the font cache if the user home directory is not
+        write-accessible.
+      </action>
       <action context="Renderers" dev="JM" type="fix" fixes-bug="45342" due-to="Emil Maskovsky">
         AFP Fonts: Fixed interpretation of metric for fonts with fixed metrics and made sure
         all repeating groups in FNP (Font Position) are processed.