[Patch] Fix for PR/9253: File.listFiles( ) Error on Win32

Ranjit Mathew rmathew@hotmail.com
Thu Jan 23 17:50:00 GMT 2003


Hi,

     This patch fixes PR/9253 as reported by Erik on the main list.
In summary, the problem was that File.listFiles( ) was not working
on Win32 if it was created as (say) 'new File("c:")' - drive
letters seemed to be confusing the implementation.

The real problem turns out to be the fact that the performList( )
function in "java/io/natFileWin32.cc" gets the canonical path
to the file path and merely adds "\*.*" to it to create a filter to
search for files using the Win32 FindFirstFile( ) function.

However, "c:" maps to "c:\" in the canonical path and the extra
"\" appended causes FindFirstFile( ) to fail. (Try it out for
yourself by typing "dir c:\\*.*" on a Command Prompt in Windows.)

Note that names like "c:\temp" and "c:\temp\" map to "c:\temp",
but "c:\" as well as "c:" map to "c:\".

The following patch guards against the case where the canonical
path already has a "\" at the end. After this change, listFiles( )
seems to work correctly for a range of inputs I could test with,
which were failing earlier.


ChangeLog:

2003-01-23  Ranjit Mathew  <rmathew@hotmail.com>

         * java/io/natFileWin32.cc (performList): Append only "*.*"
         if the canonical file path already has a "\" at the end.


Patch:
-------------------------------- 8< --------------------------------
--- java/io/natFileWin32.cc	2003-01-23 17:50:26.000000000 +0530
+++ java/io/natFileWin32.cc	2003-01-23 17:52:33.000000000 +0530
@@ -147,5 +147,8 @@
    jsize total = JvGetStringUTFRegion (canon, 0, canon->length(), buf);
    // FIXME?
-  strcpy(&buf[total], "\\*.*");
+  if (buf[total-1] == '\\')
+    strcpy (&buf[total], "*.*");
+  else
+    strcpy (&buf[total], "\\*.*");

    WIN32_FIND_DATA data;
-------------------------------- 8< --------------------------------

Sincerely Yours,
Ranjit.

-- 
Ranjit Mathew        Email: rmathew AT hotmail DOT com
Bangalore,
INDIA.               Web: http://ranjitmathew.tripod.com/




More information about the Java-patches mailing list