commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mt...@apache.org
Subject svn commit: r766441 - in /commons/sandbox/runtime/trunk/src/main: java/org/apache/commons/runtime/Pointer.java java/org/apache/commons/runtime/io/File.java native/os/win32/file.c
Date Sun, 19 Apr 2009 09:48:48 GMT
Author: mturk
Date: Sun Apr 19 09:48:47 2009
New Revision: 766441

URL: http://svn.apache.org/viewvc?rev=766441&view=rev
Log:
Fill the missing File constructors

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/File.java
    commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java?rev=766441&r1=766440&r2=766441&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java Sun
Apr 19 09:48:47 2009
@@ -77,13 +77,13 @@
      */
     protected final void finalize()
         throws Throwable
-    {        
+    {
         try {
             cleanup0();
         } catch (InstantiationException ex) {
             // Class is alreay uninitialized.
             // Ignore.
-        }        
+        }
     }
 
     /**

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/File.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/File.java?rev=766441&r1=766440&r2=766441&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/File.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/File.java Sun
Apr 19 09:48:47 2009
@@ -17,25 +17,145 @@
 package org.apache.commons.runtime.io;
 
 import java.io.IOException;
+import java.net.URI;
 
-/** File extends the {@code java.io.File} object.
+/**
+ * An abstract representation of file and directory pathnames that
+ * extends the {@code java.io.File} object.
+ * <p>
+ * Apache Commons Runtime {@code File} extends the standard functionality
+ * of the {@code java.io.File} object, by adding extra features found
+ * in modern Operating systems.
+ * </p>
  */
 public class File extends java.io.File {
 
+    // Native methods from libacr.
     private static native int ftype0(String pathname);
 
+    // Catched FileType Enum integer value.
+    private int fileType = -1;
+
+    /* Private constructor used from native code
+     * that assigns the file type so we don't need
+     * to query it from the OS file system.
+     */
+    private File(String pathname, int fileType)
+    {
+        super(pathname);
+        this.fileType = fileType;
+    }
+
     /**
-     * Create new File.
+     * Creates a new {@code File} instance from a {@code parent} pathname
+     * string and a {@code child} pathname string.
+     * <p>
+     * If {@code parent} is {@code null} then the new {@code File} instance
+     * is created as if by invoking the single-argument {@code File}
+     * constructor on the given {@code child} pathname string.
+     * </p>
+     * <p>
+     * Otherwise the {@code parent} pathname string is taken to denote a
+     * directory, and the {@code child} pathname string is taken to denote
+     * either a directory or a file. If the {@code child} pathname string is
+     * absolute then it is converted into a relative pathname in a
+     * system-dependent way. If {@code parent} is the empty string then the
+     * new {@code File} instance is created by converting child into an
+     * abstract pathname and resolving the result against a system-dependent
+     * default directory. Otherwise each pathname string is converted into an
+     * abstract pathname and the child abstract pathname is resolved
+     * against the parent.
+     *
+     * @param parent The parent pathname string.
+     * @param child The child pathname string.
+     * @throws NullPointerException If the {@code child} is {@code null}.
+     */
+    public File(String parent, String child)
+        throws NullPointerException
+    {
+        super(parent, child);
+    }
+
+    /**
+     * Creates a new {@code File} instance from a {@code parent} abstract
+     * pathname and a {@code child} pathname string.
+     * <p>
+     * If {@code parent} is {@code null} then the new {@code File} instance is
+     * created as if by invoking the single-argument {@code File} constructor
+     * on the given {@code child} pathname string.
+     * </p>
+     * <p>
+     * Otherwise the {@code parent} abstract pathname is taken to denote a
+     * directory, and the {@code child} pathname string is taken to denote
+     * either a directory or a file. If the {@code child} pathname string is
+     * absolute then it is converted into a relative pathname in a
+     * system-dependent way. If {@code parent} is the empty abstract pathname
+     * then the new {@code File} instance is created by converting {@code child}
+     * into an abstract pathname and resolving the result against a
+     * system-dependent default directory. Otherwise each pathname string
+     * is converted into an abstract pathname and the child abstract pathname
+     * is resolved against the parent.
+     *
+     * @param parent The parent abstract pathname.
+     * @param child The child pathname string.
+     * @throws NullPointerException If the {@code child} is {@code null}.
+     */
+    public File(File parent, String child)
+        throws NullPointerException
+    {
+        super(parent, child);
+    }
+
+    /**
+     * Create new {@code File} instance by converting the given pathname
+     * into an abstract pathname. If the given string is the empty path,
+     * then the result is the empty abstract pathname.
+     *
+     * @param pathname A pathname string.
+     * @throws NullPointerException If the {@code pathname} is {@code null}.
      */
     public File(String pathname)
+        throws NullPointerException
     {
         super(pathname);
     }
 
+    /**
+     * Creates a new {@code File} instance by converting the given
+     * {@code file:} URI into an abstract pathname.
+     * <p>
+     * The exact form of a {@code file:} URI is system-dependent,
+     * hence the transformation performed by this constructor is also
+     * system-dependent.
+     *
+     * @param uri An absolute, hierarchical URI with a scheme equal to
+     * &quot;file&quot;, a non-empty path component, and undefined authority,
+     * query, and fragment components.
+     * @throws NullPointerException If the {@code uri} is {@code null}.
+     * @throws IllegalArgumentException If the preconditions on the parameter do not hold.
+     */
+    public File(URI uri)
+        throws NullPointerException, IllegalArgumentException
+    {
+        super(uri);
+    }
+
+    /**
+     * Returns the {@link FileType} of the file denoted by this abstract
+     * pathname.
+     *
+     * @return {@link FileType} representing the type of the file.
+     * @throws IOException If an I/O error occured.
+     * @see FileType
+     */
     public FileType getFileType()
         throws IOException
     {
-        return FileType.valueOf(ftype0(getPath()));
+        // We could catch the IOException here and rethrow again
+        // to hide the 'Native Method' in Stack trace.
+        if (fileType < 0)
+            fileType = ftype0(getPath());
+        return FileType.valueOf(fileType);
     }
 
 }

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c?rev=766441&r1=766440&r2=766441&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c Sun Apr 19 09:48:47 2009
@@ -48,7 +48,10 @@
             if (GetFullPathNameW(fname, ACR_HBUFF_LEN,
                                  tmpname, &tmpoff)) {
                 if (!wcsncmp(tmpname, L"\\\\.\\", 4)) {
-                    if (tmpoff == tmpname + 4) {
+                    if (!wcsnicmp(tmpname + 4, L"pipe\\", 5)) {
+                        type = ACR_FT_PIPE;
+                    }
+                    else if (tmpoff == tmpname + 4) {
                         type = ACR_FT_CHR;
                     }
                     /* For WHATEVER reason, CHR devices such as \\.\con



Mime
View raw message