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/18 21:43:51 UTC

svn commit: r766378 - in /commons/sandbox/runtime/trunk/src: main/java/org/apache/commons/runtime/ main/java/org/apache/commons/runtime/io/ main/native/ main/native/include/ main/native/os/unix/ test/org/apache/commons/runtime/

Author: mturk
Date: Sat Apr 18 19:43:51 2009
New Revision: 766378

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

Added:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/File.java   (with props)
    commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h   (with props)
    commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c   (with props)
    commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java   (with props)
Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Properties.java
    commons/sandbox/runtime/trunk/src/main/native/Makefile.in
    commons/sandbox/runtime/trunk/src/main/native/include/acr.h
    commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h
    commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Properties.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Properties.java?rev=766378&r1=766377&r2=766378&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Properties.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Properties.java Sat Apr 18 19:43:51 2009
@@ -42,7 +42,7 @@
     static {
         instance = new Properties();
         if (instance != null) {
-            CPU_CACHE_TTL                   = getLong("cpu.cache.ttl");
+            CPU_CACHE_TTL                   = getL("cpu.cache.ttl");
         }
     }
 
@@ -98,7 +98,7 @@
 
     private static int getI(String key)
     {
-        return getInt(key, 0);
+        return getI(key, 0);
     }
 
     private static String getS(String key)

Added: 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=766378&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/File.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/File.java Sat Apr 18 19:43:51 2009
@@ -0,0 +1,38 @@
+/* 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.
+ */
+
+package org.apache.commons.runtime.io;
+
+/** File extends the {@code java.io.File} object.
+ */
+
+public class File extends java.io.File {
+
+    private static native int ftype0(String pathname);
+
+    /**
+     * Create new File.
+     */
+    public File(String pathname)
+    {
+        super(pathname);
+    }
+
+    public FileType getFileType()
+    {
+        return FileType.valueOf(ftype0(getPath()));
+    }
+}

Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/io/File.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.in
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.in?rev=766378&r1=766377&r2=766378&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/Makefile.in (original)
+++ commons/sandbox/runtime/trunk/src/main/native/Makefile.in Sat Apr 18 19:43:51 2009
@@ -76,18 +76,22 @@
 	$(SRCDIR)/shared/version.$(OBJ)
 
 LINUX_OBJS= \
+	$(SRCDIR)/os/unix/file.$(OBJ) \
 	$(SRCDIR)/os/unix/main.$(OBJ) \
 	$(SRCDIR)/os/linux/os.$(OBJ)
 
 SOLARIS_OBJS= \
+	$(SRCDIR)/os/unix/file.$(OBJ) \
 	$(SRCDIR)/os/unix/main.$(OBJ) \
 	$(SRCDIR)/os/solaris/os.$(OBJ)
 
 DARWIN_OBJS= \
+	$(SRCDIR)/os/unix/file.$(OBJ) \
 	$(SRCDIR)/os/unix/main.$(OBJ) \
 	$(SRCDIR)/os/darwin/os.$(OBJ)
 
 HPUX_OBJS= \
+	$(SRCDIR)/os/unix/file.$(OBJ) \
 	$(SRCDIR)/os/unix/main.$(OBJ) \
 	$(SRCDIR)/os/hpux/os.$(OBJ)
 

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr.h?rev=766378&r1=766377&r2=766378&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr.h Sat Apr 18 19:43:51 2009
@@ -211,6 +211,8 @@
 typedef  unsigned __int64   acr_uint64_t;
 typedef  __int64            acr_off_t;
 typedef  int                acr_socklen_t;
+/* API char type on windows is always WCHAR */
+typedef  wchar_t            acr_pchar_t;
 #else
 typedef  ssize_t            acr_ssize_t;
 typedef  long long          acr_int64_t;
@@ -221,6 +223,8 @@
 typedef  int64_t            acr_off_t;
 #endif
 typedef  socklen_t          acr_socklen_t;
+/* API char type on POSIX is always char (UTF-8) */
+typedef  char               acr_pchar_t;
 #endif
 
 #if CC_SIZEOF_VOIDP == 8

Added: commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h?rev=766378&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h (added)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h Sat Apr 18 19:43:51 2009
@@ -0,0 +1,56 @@
+/* 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.
+ */
+
+#ifndef _ACR_FILE_H
+#define _ACR_FILE_H
+
+#include "acr.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file acr_file.h
+ * @brief
+ *
+ * ACR File functions
+ *
+ */
+
+#define ACR_FT_NOFILE     0    /**< no file type determined */
+#define ACR_FT_REG        1    /**< a regular file */
+#define ACR_FT_DIR        2    /**< a directory */
+#define ACR_FT_CHR        3    /**< a character device */
+#define ACR_FT_BLK        4    /**< a block device */
+#define ACR_FT_PIPE       5    /**< a FIFO / pipe */
+#define ACR_FT_LNK        6    /**< a symbolic link */
+#define ACR_FT_SOCK       7    /**< a [unix domain] socket */
+#define ACR_FT_UNKFILE  127    /**< a file of some other unknown type */
+
+/** Get FileType
+ * @param env JNI environment to use. If NULL no exception will be thrown
+ *            if stat fails.
+ * @param fname File name for which to get the type.
+ * @return One of the ACR_FT_* types or -1 of error
+ */
+ACR_DECLARE(int) ACR_FileTypeGet(JNIEnv *_E, const acr_pchar_t *fname);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ACR_FILE_H */

Propchange: commons/sandbox/runtime/trunk/src/main/native/include/acr_file.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h?rev=766378&r1=766377&r2=766378&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h Sat Apr 18 19:43:51 2009
@@ -35,6 +35,7 @@
 #define ACR_JNI_EXPORT_DECLARE(RT, CL, MN)  \
     JNIEXPORT RT JNICALL Java_org_apache_commons_runtime_##CL##_##MN
 
+
 /* ACR_ALIGN() is only to be used to align on a power of 2 boundary */
 #define ACR_ALIGN(size, boundary) \
     (((size) + ((boundary) - 1)) & ~((boundary) - 1))

Added: commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c?rev=766378&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c (added)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/file.c Sat Apr 18 19:43:51 2009
@@ -0,0 +1,117 @@
+/* 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"
+
+/**
+ * Posix file functions
+ *
+ */
+
+#if defined(_LARGEFILE64_SOURCE)
+#define stat(f,b) stat64(f,b)
+#define lstat(f,b) lstat64(f,b)
+#define fstat(f,b) fstat64(f,b)
+#define lseek(f,o,w) lseek64(f,o,w)
+#define ftruncate(f,l) ftruncate64(f,l)
+typedef struct stat64 struct_stat;
+#else
+typedef struct stat struct_stat;
+#endif
+
+ACR_DECLARE(int) ACR_FileTypeGet(JNIEnv *_E, const char *fname)
+{
+    struct_stat info;
+
+    if (stat(fname, &info) == 0) {
+        int type;
+
+        switch (info.st_mode & S_IFMT) {
+            case S_IFREG:
+                type = ACR_FT_REG;  break;
+            case S_IFDIR:
+                type = ACR_FT_DIR;  break;
+            case S_IFLNK:
+                type = ACR_FT_LNK;  break;
+            case S_IFCHR:
+                type = ACR_FT_CHR;  break;
+            case S_IFBLK:
+                type = ACR_FT_BLK;  break;
+#if defined(S_IFFIFO)
+            case S_IFFIFO:
+                type = ACR_FT_PIPE; break;
+#endif
+#if defined(S_IFSOCK)
+            case S_IFSOCK:
+                type = ACR_FT_SOCK; break;
+#endif
+
+            default:
+        	/* Work around missing S_IFxxx values above
+             * for Linux et al.
+             */
+#if !defined(S_IFFIFO) && defined(S_ISFIFO)
+            	if (S_ISFIFO(info.st_mode)) {
+                    type = ACR_FT_PIPE;
+            	} else
+#endif
+#if !defined(S_IFSOCK) && defined(S_ISSOCK)
+            	if (S_ISSOCK(info.st_mode)) {
+                    type = ACR_FT_SOCK;
+        	    } else
+#endif
+                type = ACR_FT_UNKFILE;
+            break;
+        }
+        return type;
+    }
+    else if (_E) {
+#if !defined(ENOENT) || !defined(ENOTDIR)
+#error ENOENT || ENOTDIR not defined; please see the
+#error comments at this line in the source for a workaround.
+        /*
+         * If ENOENT || ENOTDIR is not defined in one of the your OS's
+         * include files, APR cannot report a good reason why the stat()
+         * of the file failed; there are cases where it can fail even though
+         * the file exists.  This opens holes in Apache, for example, because
+         * it becomes possible for someone to get a directory listing of a 
+         * directory even though there is an index (eg. index.html) file in 
+         * it.  If you do not have a problem with this, delete the above 
+         * #error lines and start the compile again.  If you need to do this,
+         * please submit a bug report to http://www.apache.org/bug_report.html
+         * letting us know that you needed to do this.  Please be sure to 
+         * include the operating system you are using.
+         */
+#endif
+        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, errno);
+    }
+    return -1;
+}
+
+ACR_JNI_EXPORT_DECLARE(int, io_File, ftype0)(ACR_JNISTDARGS, jstring pathname)
+{
+    int type;
+    CSTR_DECLARE(pathname);
+
+    UNREFERENCED_O;
+    type = ACR_FileTypeGet(_E, J2S(pathname));
+    CSTR_RELEASE(pathname);
+
+    return type;
+}

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

Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java?rev=766378&r1=766377&r2=766378&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java (original)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestAll.java Sat Apr 18 19:43:51 2009
@@ -35,6 +35,7 @@
         suite.addTest(TestOS.suite());
         suite.addTest(TestDirectByteBuffer.suite());
         suite.addTest(TestPrivate.suite());
+        suite.addTest(TestFile.suite());
         return suite;
     }
 

Added: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java?rev=766378&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java (added)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java Sat Apr 18 19:43:51 2009
@@ -0,0 +1,54 @@
+/* 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.
+ */
+
+package org.apache.commons.runtime;
+
+import org.apache.commons.runtime.io.*;
+import junit.framework.*;
+
+/**
+ * File Test.
+ *
+ */
+public class TestFile extends TestCase
+{
+
+    public static Test suite() {
+        TestSuite suite = new TestSuite(TestFile.class);
+        return suite;
+    }
+
+    protected void setUp()
+        throws Exception
+    {
+        System.loadLibrary("acr");
+    }
+
+    public void testFileType()
+        throws Exception
+    {
+        File f;
+        if (OS.IS_UNIX)
+            f = new File("/tmp");
+        else
+            f = new File("C:\\Program Files");
+
+        FileType t = f.getFileType();
+        assertEquals("Type", FileType.DIR, t);
+    }
+
+
+}

Propchange: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestFile.java
------------------------------------------------------------------------------
    svn:eol-style = native