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/25 20:11:33 UTC

svn commit: r768570 - in /commons/sandbox/runtime/trunk/src: main/java/org/apache/commons/runtime/Descriptor.java main/native/include/acr_descriptor.h main/native/shared/descriptor.c test/org/apache/commons/runtime/TestPrivate.java

Author: mturk
Date: Sat Apr 25 18:11:33 2009
New Revision: 768570

URL: http://svn.apache.org/viewvc?rev=768570&view=rev
Log:
Add errno method to the Descriptor

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java
    commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h
    commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c
    commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java?rev=768570&r1=768569&r2=768570&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java Sat Apr 25 18:11:33 2009
@@ -34,6 +34,8 @@
  */
 public abstract class Descriptor implements Closeable {
 
+    private int   IERRNUM;
+
     /*
      * Descriptor can be only created from native code.
      * Suppress any instantiation except form internal classes.
@@ -110,6 +112,17 @@
     }
 
     /**
+     * Error number of the last operation performed on this descriptor.
+     *
+     * @return {@code int} representation of error number.
+     * @see org.apache.commons.runtime.io.Status
+     */
+    public final int errno()
+    {
+        return IERRNUM;
+    }
+
+    /**
      * Check if the underlying Operating system descriptor is closed.
      * @return {@code true} if descriptor is closed {@code false} otherwise.
      */

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h?rev=768570&r1=768569&r2=768570&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_descriptor.h Sat Apr 25 18:11:33 2009
@@ -103,6 +103,15 @@
  */
 ACR_DECLARE(int) ACR_DescriptorSetInt(JNIEnv *env, jobject obj, int val);
 
+/**
+ * Set the error number to the Descriptor object.
+ * @param env Current JNI environment
+ * @param obj Java Descriptor object use.
+ * @param err Error value to set.
+ * @return ACR error code on failure.
+ */
+ACR_DECLARE(int) ACR_DescriptorSetErr(JNIEnv *env, jobject obj, int err);
+
 #ifdef __cplusplus
 }
 #endif

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c?rev=768570&r1=768569&r2=768570&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c Sat Apr 25 18:11:33 2009
@@ -76,6 +76,12 @@
     IFIELD_PTR
 };
 
+J_DECLARE_F_ID(0003) = {
+    NULL,
+    "IERRNUM",
+    "I"
+};
+
 ACR_CLASS_LDEF(Descriptor)
 {
     int rv;
@@ -85,6 +91,7 @@
     J_LOAD_IFIELD(0000);
     J_LOAD_IFIELD(0001);
     J_LOAD_IFIELD(0002);
+    J_LOAD_IFIELD(0003);
     J_LOAD_METHOD(0000);
 
     return ACR_SUCCESS;
@@ -111,11 +118,15 @@
 
 ACR_JNI_EXPORT_DECLARE(jobject, Descriptor, nulld0)(ACR_JNISTDARGS)
 {
+    jobject nd;
     UNREFERENCED_O;
     if (!_clazzn.i) {
         initd0(_E);
     }
-    return ACR_DescriptorCreate(_E, -1, NULL, NULL);
+    nd = ACR_DescriptorCreate(_E, -1, NULL, NULL);
+    SET_IFIELD_I(0003, nd, ACR_EBADF);
+
+    return nd;
 }
 
 ACR_JNI_EXPORT_DECLARE(void, Descriptor, close0)(ACR_JNISTDARGS)
@@ -307,3 +318,19 @@
         return ACR_ECLASSNOTFOUND;
     }
 }
+
+ACR_DECLARE(int) ACR_DescriptorSetErr(ACR_JNISTDARGS, int e)
+{
+    if (_clazzn.i && J4MID(0000)) {
+        SET_IFIELD_I(0003, _O, e);
+#ifdef _JNI_CHECK_EXCEPTIONS
+        if ((*_E)->ExceptionCheck(_E)) {
+            return ACR_EGENERAL;
+        }
+#endif
+        return ACR_SUCCESS;
+    }
+    else {
+        return ACR_ECLASSNOTFOUND;
+    }
+}

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=768570&r1=768569&r2=768570&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 Sat Apr 25 18:11:33 2009
@@ -22,6 +22,7 @@
 import java.io.File;
 import junit.framework.*;
 
+import org.apache.commons.runtime.io.Status;
 /**
  * Native Test.
  * The native methods are compiled only when
@@ -327,6 +328,15 @@
         assertTrue("Closed", d.isClosed());
     }
 
+    public void testDescriptorNullErrno()
+        throws Throwable
+    {
+        Descriptor d = Descriptor.NULL;
+        assertNotNull("Descriptor", d);
+        assertTrue("Closed", d.isClosed());
+        assertEquals("Errno", Status.EBADF, d.errno());
+    }
+
     public void testDescriptorCb()
         throws Throwable
     {