You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/04/19 09:41:43 UTC

svn commit: r766434 - in /commons/sandbox/runtime/trunk/src: main/java/org/apache/commons/runtime/io/File.java main/native/Makefile.msc.in main/native/os/win32/file.c test/org/apache/commons/runtime/TestPrivate.java

Author: mturk
Date: Sun Apr 19 07:41:43 2009
New Revision: 766434

URL: http://svn.apache.org/viewvc?rev=766434&view=rev
Log:
Add win32/File skeleton

Added:
    commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c   (with props)
Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/File.java
    commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in
    commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java

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=766434&r1=766433&r2=766434&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 07:41:43 2009
@@ -16,9 +16,10 @@
 
 package org.apache.commons.runtime.io;
 
+import java.io.IOException;
+
 /** File extends the {@code java.io.File} object.
  */
-
 public class File extends java.io.File {
 
     private static native int ftype0(String pathname);
@@ -32,7 +33,9 @@
     }
 
     public FileType getFileType()
+        throws IOException
     {
         return FileType.valueOf(ftype0(getPath()));
     }
+
 }

Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in?rev=766434&r1=766433&r2=766434&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in (original)
+++ commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in Sun Apr 19 07:41:43 2009
@@ -70,6 +70,7 @@
 	$(SRCDIR)/shared/version.$(OBJ)
 
 WINDOWS_OBJS= \
+	$(SRCDIR)/os/win32/file.$(OBJ) \
 	$(SRCDIR)/os/win32/main.$(OBJ) \
 	$(SRCDIR)/os/win32/os.$(OBJ) \
 	$(SRCDIR)/os/win32/syslog.$(OBJ) \

Added: 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=766434&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c (added)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c Sun Apr 19 07:41:43 2009
@@ -0,0 +1,96 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "acr.h"
+#include "acr_private.h"
+#include "acr_error.h"
+#include "acr_file.h"
+
+/**
+ * Win32 file functions
+ *
+ */
+
+ACR_DECLARE(int) ACR_FileTypeGet(JNIEnv *_E, const wchar_t *fname)
+{
+    WIN32_FILE_ATTRIBUTE_DATA info;
+
+    memset(&info, 0, sizeof(WIN32_FILE_ATTRIBUTE_DATA));
+
+    if (GetFileAttributesExW(fname, GetFileExInfoStandard, &info)) {
+        int type = ACR_FT_REG;
+        if (info.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
+            type = ACR_FT_LNK;
+        else if (info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+            type = ACR_FT_DIR;
+        else if (info.dwFileAttributes & FILE_ATTRIBUTE_DEVICE)
+            type = ACR_FT_CHR;
+        else if (!info.ftLastWriteTime.dwLowDateTime &&
+                 !info.ftLastWriteTime.dwHighDateTime &&
+                 !(info.nFileSizeLow | info.nFileSizeHigh)) {
+            /* XXX: Use malloc and 32K instead APR's 8K limit?
+             */
+            wchar_t tmpname[ACR_HBUFF_SIZ];
+            wchar_t *tmpoff = NULL;
+            if (GetFullPathNameW(fname, ACR_HBUFF_LEN,
+                                 tmpname, &tmpoff)) {
+                if (!wcsncmp(tmpname, L"\\\\.\\", 4)) {
+                    if (tmpoff == tmpname + 4) {
+                        type = ACR_FT_CHR;
+                    }
+                    /* For WHATEVER reason, CHR devices such as \\.\con
+                     * or \\.\lpt1 *may*not* update tmpoff; in fact the
+                     * resulting tmpoff is set to NULL.  Guard against
+                     * either case.
+                     */
+                    else if (!tmpoff) {
+                        tmpoff = tmpname + 4;
+                        while (*tmpoff) {
+                            if (*tmpoff == L'\\' || *tmpoff == L'/') {
+                                break;
+                            }
+                            ++tmpoff;
+                        }
+                        if (!*tmpoff) {
+                            type = ACR_FT_CHR;
+                        }
+                    }
+                }
+            }
+            else
+                type = ACR_FT_UNKFILE;
+        }
+        return type;
+    }
+    else if (_E) {
+        /* Throw exception */
+        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, ACR_GET_OS_ERROR());
+    }
+    return -1;
+}
+
+ACR_JNI_EXPORT_DECLARE(int, io_File, ftype0)(ACR_JNISTDARGS, jstring pathname)
+{
+    int type;
+    WSTR_DECLARE(pathname);
+
+    UNREFERENCED_O;
+    WPTR_DECLARE(pathname);
+    type = ACR_FileTypeGet(_E, J2W(pathname));
+    WSTR_RELEASE(pathname);
+
+    return type;
+}

Propchange: commons/sandbox/runtime/trunk/src/main/native/os/win32/file.c
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java?rev=766434&r1=766433&r2=766434&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java (original)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java Sun Apr 19 07:41:43 2009
@@ -536,7 +536,10 @@
         throws Throwable
     {
         File f = test029(0);
-        assertEquals("Pathname", "/tmp/foo", f.getPath());
+        if (OS.IS_UNIX)
+            assertEquals("Pathname", "/tmp/foo", f.getPath());
+        else
+            assertEquals("Pathname", "\\tmp\\foo", f.getPath());
         assertEquals("Name", "foo", f.getName());
     }