Author: mturk
Date: Mon Sep 7 15:55:01 2009
New Revision: 812211
URL: http://svn.apache.org/viewvc?rev=812211&view=rev
Log:
Implement Java API
Modified:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/SharedMemory.java
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestSharedMemory.java
Modified:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/SharedMemory.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/SharedMemory.java?rev=812211&r1=812210&r2=812211&view=diff
==============================================================================
---
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/SharedMemory.java
(original)
+++
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/SharedMemory.java
Mon Sep 7 15:55:01 2009
@@ -17,8 +17,10 @@
import java.io.IOException;
import java.util.Enumeration;
+import java.util.EnumSet;
import java.util.Vector;
import org.apache.commons.runtime.io.File;
+import org.apache.commons.runtime.io.FileProtection;
import org.apache.commons.runtime.io.Status;
import org.apache.commons.runtime.exception.ClosedDescriptorException;
import org.apache.commons.runtime.exception.OperatingSystemException;
@@ -295,5 +297,20 @@
}
}
+ private static native boolean chown0(Descriptor shm, int prot,
+ Descriptor uid, Descriptor gid)
+ throws IOException, IndexOutOfBoundsException;
+ /**
+ * Set protection for the {...@code this} SharedMemory object.
+ * <p>
+ * </p>
+ * @param prot The {...@code EnumSet} determining the access permissions.
+ */
+ public boolean setProtection(EnumSet<FileProtection> prot)
+ throws IOException, SecurityException
+ {
+ return chown0(shm, FileProtection.bitmapOf(prot), null, null);
+ }
+
}
Modified:
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestSharedMemory.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestSharedMemory.java?rev=812211&r1=812210&r2=812211&view=diff
==============================================================================
---
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestSharedMemory.java
(original)
+++
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestSharedMemory.java
Mon Sep 7 15:55:01 2009
@@ -17,6 +17,7 @@
package org.apache.commons.runtime;
import java.lang.System;
+import java.util.EnumSet;
import junit.framework.*;
import org.apache.commons.runtime.io.*;
import org.apache.commons.runtime.exception.*;
@@ -43,7 +44,7 @@
throws Throwable
{
if (TestParams.getInstance().isChild()) {
- // Ship the test
+ // Skip the test
return;
}
try {
@@ -66,7 +67,7 @@
throws Throwable
{
if (TestParams.getInstance().isChild()) {
- // Ship the test
+ // Skip the test
return;
}
SharedMemory shm;
@@ -84,5 +85,25 @@
assertTrue("Shared memory not removed", rv);
}
+ public void testSharedMemoryPermSet()
+ throws Throwable
+ {
+ if (TestParams.getInstance().isChild()) {
+ // Skip the test
+ return;
+ }
+ SharedMemory shm;
+
+ shm = SharedMemory.create(new File("ACRSharedMemory"), 1024);
+ try {
+ } catch (Throwable t) {
+ assertSame("Wrong Exception class",
+ ClosedDescriptorException.class, t.getClass());
+ }
+ boolean rv = shm.setProtection(EnumSet.of(FileProtection.UREAD,
FileProtection.UWRITE));
+ assertTrue("Shared memory not protected", rv);
+ shm.close();
+ }
+
}