summaryrefslogtreecommitdiff
path: root/lucene/long_path.patch
blob: d3ab8e3ddb91dd6c15f053676b005d942e6287a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
--- misc/lucene-2.3.2/src/java/org/apache/lucene/store/FSDirectory.java	2008-05-01 22:27:58.000000000 +0200
+++ misc/build/lucene-2.3.2/src/java/org/apache/lucene/store/FSDirectory.java	2011-02-23 16:36:26.249515000 +0100
@@ -165,7 +165,15 @@
   public static FSDirectory getDirectory(File file, LockFactory lockFactory)
     throws IOException
   {
-    file = new File(file.getCanonicalPath());
+      String path = file.getPath();
+      //File.getCanonicalPath fails on Windows with long path names
+      //Tested with Java SE 6u23
+      //Long path names created by osl_getSystemPathFromFileURL are already
+      //unique because its implementation replaces the occurrences of .. and .
+      //That is using the com.sun.star.help.HelpIndexer service from c++ is
+      //relatively safe.
+      if (!path.startsWith("\\\\?\\"))
+          file = new File(file.getCanonicalPath());
 
     if (file.exists() && !file.isDirectory())
       throw new IOException(file + " not a directory");
@@ -455,7 +463,16 @@
   public String getLockID() {
     String dirName;                               // name to be hashed
     try {
-      dirName = directory.getCanonicalPath();
+        //File.getCanonicalPath fails on Windows with long path names
+        //Tested with Java SE 6u23
+        //Long path names created by osl_getSystemPathFromFileURL are already
+        //unique because its implementation replaces the occurrences of .. and .
+        //That is using the com.sun.star.help.HelpIndexer service from c++ is
+        //relatively safe.
+        if (!directory.getPath().startsWith("\\\\?\\"))
+            dirName = directory.getCanonicalPath();
+        else
+            dirName = directory.getPath();
     } catch (IOException e) {
       throw new RuntimeException(e.toString(), e);
     }