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 2011/10/10 22:14:17 UTC

svn commit: r1181201 - in /commons/sandbox/runtime/trunk: ./ src/main/java/org/apache/commons/runtime/ src/main/java/org/apache/commons/runtime/net/ src/main/java/org/apache/commons/runtime/platform/unix/ src/main/java/org/apache/commons/runtime/platfo...

Author: mturk
Date: Mon Oct 10 20:14:16 2011
New Revision: 1181201

URL: http://svn.apache.org/viewvc?rev=1181201&view=rev
Log:
Add exec with usepath option. Remove File.getPath() usage

Modified:
    commons/sandbox/runtime/trunk/build.xml
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Exec.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/LocalEndpointAddress.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/Sendfile.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExec.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/Service.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/ServiceControlManager.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExec.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLContext.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLRandom.java
    commons/sandbox/runtime/trunk/src/main/native/os/unix/exec.c
    commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestExec.java
    commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestServerEndpoint.java

Modified: commons/sandbox/runtime/trunk/build.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/build.xml?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/build.xml (original)
+++ commons/sandbox/runtime/trunk/build.xml Mon Oct 10 20:14:16 2011
@@ -4,6 +4,7 @@
     <!-- Give user a chance to override without editing this file
         (and without typing -D each time it compiles it
     -->
+    <property environment="env"/>
     <property file="${user.home}/.ant.properties" />
     <property file="${user.home}/build.properties" />
     <property file="build.properties" />
@@ -450,8 +451,7 @@ The Apache Software Foundation (http://w
                 <classfileset dir="${build.dest}/test">
                     <include name="**/*.class"/>
                 </classfileset>
-                <env key="PATH" path="${runtime.library.path}${path.separator}${java.library.path}"/>
-                <env key="Path" path="${runtime.library.path}${path.separator}${java.library.path}"/>
+                <env key="PATH" path="${runtime.library.path}:${java.library.path}:${env.PATH}"/>
                 <jvmarg value="-Djava.library.path=${runtime.library.path}"/>
                 <jvmarg value="-Xmx512m"/>
                 <jvmarg line="${args}"/>
@@ -534,8 +534,7 @@ The Apache Software Foundation (http://w
               fork="yes"
               failonerror="${test.failonerror}">
             <classpath refid="examples.classpath"/>
-            <env key="PATH" path="${runtime.library.path}${path.separator}${java.library.path}"/>
-            <env key="Path" path="${runtime.library.path}${path.separator}${java.library.path}"/>
+            <env key="PATH" path="${runtime.library.path}:${java.library.path}:${env.PATH}"/>
             <jvmarg value="-Djava.library.path=${runtime.library.path}"/>
             <jvmarg value="-Xmx512m"/>
             <jvmarg line="${args}"/>

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Exec.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Exec.java?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Exec.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Exec.java Mon Oct 10 20:14:16 2011
@@ -15,7 +15,6 @@
  */
 package org.apache.commons.runtime;
 
-import java.io.File;
 import java.util.List;
 
 /**
@@ -74,11 +73,27 @@ public abstract class Exec
     public abstract int exec(List<String> argv, int timeout);
     public abstract int exec(List<String> argv);
 
-    public abstract int execShellScript(File script, List<String> args, int timeout);
-    public abstract int execShellScript(File script, List<String> args);
+    public abstract int execShellScript(String script, List<String> args, int timeout);
 
-    public abstract int execCommand(String cmd, int timeout);
-    public abstract int execCommand(String cmd);
+    public final int execShellScript(String script, List<String> args)
+    {
+        return execShellScript(script, args, -1);
+    }
+
+    /**
+     * Execute shell command with timeout.
+     *
+     */
+    public abstract int execCommand(String cmd, int timeout, boolean usepath);
+
+    /**
+     * Execute shell command.
+     *
+     */
+    public final int execCommand(String cmd)
+    {
+        return execCommand(cmd, -1, true);
+    }
 
     /**
      * Return the process exit value.
@@ -106,9 +121,9 @@ public abstract class Exec
         inp = buf;
     }
 
-    public void setWorkingDirectory(File directory)
+    public void setWorkingDirectory(String path)
     {
-        cwd = directory.getPath();
+        cwd = path;
     }
 
     public void setEnvironment(List<String> envp)

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/LocalEndpointAddress.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/LocalEndpointAddress.java?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/LocalEndpointAddress.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/LocalEndpointAddress.java Mon Oct 10 20:14:16 2011
@@ -55,17 +55,4 @@ public final class LocalEndpointAddress 
         super.sa = sockaddr0(name);
     }
 
-    /**
-     * Create a new local socket adrress.
-     */
-    public LocalEndpointAddress(File path)
-        throws NetworkException, InvalidArgumentException
-    {
-        super(AddressFamily.LOCAL);
-        String name = path.getPath();
-        if (name == null || name.length() == 0)
-            throw new InvalidArgumentException();
-        super.sa = sockaddr0(name);
-    }
-
 }

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/Sendfile.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/Sendfile.java?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/Sendfile.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/Sendfile.java Mon Oct 10 20:14:16 2011
@@ -22,7 +22,6 @@ import java.io.Closeable;
 import java.io.Flushable;
 import java.io.IOException;
 import java.io.SyncFailedException;
-import java.io.File;
 import java.net.SocketException;
 import org.apache.commons.runtime.io.ClosedDescriptorException;
 import org.apache.commons.runtime.io.Descriptor;
@@ -73,23 +72,6 @@ public class Sendfile implements Closeab
     }
 
     /**
-     * Creates a new Sendfile object.
-     *
-     * @throws AccessDeniedException if the access to the file is not allowed.
-     * @throws NoSuchObjectException if the file doesn't exsist.
-     * @throws IOException if an I/O error occurs.
-     */
-    public Sendfile(File path)
-        throws AccessDeniedException,
-               NoSuchObjectException,
-               UnsupportedOperationException,
-               IOException
-    {
-        sf = open0(path.getPath());
-        closed = false;
-    }
-
-    /**
      * Free the allocated resource by the Operating system.
      * <p>
      * Note that {@code Object.finalize()} method will call

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExec.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExec.java?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExec.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExec.java Mon Oct 10 20:14:16 2011
@@ -21,7 +21,6 @@ import org.apache.commons.runtime.Errno;
 import org.apache.commons.runtime.Status;
 import org.apache.commons.runtime.InvalidArgumentException;
 import org.apache.commons.runtime.SystemException;
-import java.io.File;
 import java.util.List;
 import java.util.Vector;
 
@@ -49,13 +48,14 @@ final class PosixExec extends Exec
                                      byte[] inp,
                                      byte[][] out,
                                      int redir,
-                                     int timeout);
+                                     int timeout,
+                                     boolean usepath);
     @Override
     public int exec(List<String> argv, int timeout)
     {
         byte[][] isa = new byte[2][0];
         String[] args = argv.toArray(new String[0]);
-        long rv = exec0(args[0], args, env, cwd, inp, isa, redirect, timeout);
+        long rv = exec0(args[0], args, env, cwd, inp, isa, redirect, timeout, false);
         exitval = (int)(rv & 0xffffffffL);
         int res = (int)(rv >>> 32);
         out     = isa[0];
@@ -70,37 +70,30 @@ final class PosixExec extends Exec
     }
 
     @Override
-    public int execShellScript(File script, List<String> args, int timeout)
+    public int execShellScript(String script, List<String> args, int timeout)
     {
         Vector<String> argv = new Vector<String>();
         argv.add(impl.getShell());
-        argv.add(script.getPath());
+        argv.add(script);
         argv.addAll(args);
 
         return exec(argv, timeout);
     }
 
     @Override
-    public int execShellScript(File script, List<String> args)
+    public int execCommand(String cmd, int timeout, boolean usepath)
     {
-        return execShellScript(script, args, -1);
-    }
-
-    @Override
-    public int execCommand(String cmd, int timeout)
-    {
-        Vector<String> argv = new Vector<String>();
-        argv.add(impl.getShell());
-        argv.add("-c");
-        argv.add(cmd);
-
-        return exec(argv, timeout);
-    }
-
-    @Override
-    public int execCommand(String cmd)
-    {
-        return execCommand(cmd, -1);
+        byte[][] isa  = new byte[2][0];
+        String[] args = new String[3];
+        args[0] = impl.getShell();
+        args[1] = "-c";
+        args[2] = cmd;
+        long rv = exec0(args[0], args, env, cwd, inp, isa, redirect, timeout, usepath);
+        exitval = (int)(rv & 0xffffffffL);
+        int res = (int)(rv >>> 32);
+        out     = isa[0];
+        err     = isa[1];
+        return res;        
     }
 
 }

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/Service.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/Service.java?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/Service.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/Service.java Mon Oct 10 20:14:16 2011
@@ -17,7 +17,6 @@
 package org.apache.commons.runtime.platform.windows;
 
 import java.io.Closeable;
-import java.io.File;
 import java.io.IOException;
 import java.util.EnumSet;
 import java.util.List;
@@ -639,12 +638,6 @@ public final class Service implements Cl
         }
     }
 
-    public void setBinaryPathName(File path)
-        throws InvalidHandleException, SystemException
-    {
-        setBinaryPathName(path.getPath());
-    }
-
     public void setLoadOrderGroup(String group)
         throws InvalidHandleException, SystemException
     {

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/ServiceControlManager.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/ServiceControlManager.java?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/ServiceControlManager.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/ServiceControlManager.java Mon Oct 10 20:14:16 2011
@@ -17,7 +17,6 @@
 package org.apache.commons.runtime.platform.windows;
 
 import java.io.Closeable;
-import java.io.File;
 import java.io.IOException;
 import java.util.EnumSet;
 import java.util.ArrayList;
@@ -174,7 +173,7 @@ public class ServiceControlManager imple
     public Service create(String name, String displayName,
                           ServiceType serviceType, ServiceStartType startType,
                           ServiceErrorControl errorControl,
-                          File binaryPath, String loadOrderGroup,
+                          String binaryPath, String loadOrderGroup,
                           String[] dependencies,
                           String username,
                           String password)
@@ -184,13 +183,12 @@ public class ServiceControlManager imple
         if (handle == 0L)
             throw new InvalidHandleException();
         // binaryPath is optional
-        String path = binaryPath == null ? null : binaryPath.getPath();
         long svc = Win32.CreateService(handle, name, displayName,
                                        Service.SERVICE_ALL_ACCESS,
                                        serviceType.valueOf(),
                                        startType.valueOf(),
                                        errorControl.valueOf(),
-                                       path, loadOrderGroup,
+                                       binaryPath, loadOrderGroup,
                                        Utils.stringArrayToCharBlock(dependencies),
                                        username, password);
         if (svc == 0L)

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExec.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExec.java?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExec.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExec.java Mon Oct 10 20:14:16 2011
@@ -22,10 +22,6 @@ import org.apache.commons.runtime.Status
 import org.apache.commons.runtime.InvalidArgumentException;
 import org.apache.commons.runtime.SystemException;
 import org.apache.commons.runtime.util.Utils;
-import java.io.ByteArrayInputStream;
-import java.io.CharArrayWriter;
-import java.io.InputStream;
-import java.io.File;
 import java.util.List;
 import java.util.Vector;
 
@@ -104,27 +100,21 @@ final class WindowsExec extends Exec
     }
 
     @Override
-    public int execShellScript(File script, List<String> args, int timeout)
+    public int execShellScript(String script, List<String> args, int timeout)
     {
         Vector<String> argv = new Vector<String>();
         argv.add(impl.getComspec());
         argv.add("/D");
         argv.add("/C");
         argv.add("CALL");
-        argv.add(script.getPath());
+        argv.add(script);
         argv.addAll(args);
 
         return exec(argv, timeout);
     }
 
     @Override
-    public int execShellScript(File script, List<String> args)
-    {
-        return execShellScript(script, args, -1);
-    }
-
-    @Override
-    public int execCommand(String cmd, int timeout)
+    public int execCommand(String cmd, int timeout, boolean usepath)
     {
         Vector<String> argv = new Vector<String>();
         argv.add(impl.getComspec());
@@ -135,9 +125,4 @@ final class WindowsExec extends Exec
         return exec(argv, timeout);
     }
 
-    @Override
-    public int execCommand(String cmd)
-    {
-        return execCommand(cmd, -1);
-    }
 }

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLContext.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLContext.java?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLContext.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLContext.java Mon Oct 10 20:14:16 2011
@@ -24,8 +24,6 @@ import org.apache.commons.runtime.Operat
 import org.apache.commons.runtime.Status;
 import org.apache.commons.runtime.SystemException;
 
-import java.io.File;
-
 /**
  * Contains the context structure for global default values for
  * multiple SSL connections and certificate verification information.

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLRandom.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLRandom.java?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLRandom.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLRandom.java Mon Oct 10 20:14:16 2011
@@ -20,7 +20,6 @@ import org.apache.commons.runtime.Invali
 import org.apache.commons.runtime.Status;
 import org.apache.commons.runtime.SystemException;
 
-import java.io.File;
 import java.nio.ByteBuffer;
 
 /**
@@ -90,17 +89,16 @@ public final class SSLRandom
         return seed2(b, 0, b.length);
     }
 
-    public static void setSeedFile(File path)
+    public static void setSeedPath(String path)
         throws SystemException
     {
-        setdef0(path.getPath());
+        setdef0(path);
     }
 
-    public static File getSeedFile()
+    public static String getSeedPath()
         throws SystemException
     {
-        String path = getdef0();
-        return new File(path);
+        return getdef0();
     }
 
     public void nextBytes(byte[] bytes, int off, int len)

Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/exec.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/exec.c?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/exec.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/exec.c Mon Oct 10 20:14:16 2011
@@ -88,6 +88,7 @@ static int _run_exec(const char *executa
                      acr_buf_t *err,
                      acr_buf_t *inp,
                      int timeout,
+                     int usepath,
                      int *retval)
 {
     int   i, rc   = 0;
@@ -284,10 +285,20 @@ static int _run_exec(const char *executa
                 exit(0);
             }
         }
-        if (envp != 0)
-            execve(executable, argv, envp);
-        else
-            execv(executable,  argv);
+        if (usepath) {
+            /* XXX: Does this works on all platforms?
+             *      Do we need to duplicate it?
+             */
+            if (envp != 0)
+                environ = (char **)envp;
+            execvp(executable, argv);
+        }
+        else {
+            if (envp != 0)
+                execve(executable, argv, envp);
+            else
+                execv(executable,  argv);
+        }
         rc = ACR_GET_OS_ERROR();
 
 child_cleanup:
@@ -592,7 +603,7 @@ ACR_UNX_EXPORT(jlong, PosixExec, exec0)(
                                         jobjectArray args, jobjectArray envp,
                                         jstring cwd, jbyteArray inp,
                                         jobjectArray out, jint redir,
-                                        jint timeout)
+                                        jint timeout, jboolean usepath)
 {
     int rv = 0;
     int rc = 0;
@@ -636,7 +647,7 @@ ACR_UNX_EXPORT(jlong, PosixExec, exec0)(
         /* Call actual execute
          */
         rv = _run_exec(J2S(executable), argp, envs, J2S(cwd),
-                       ob, eb, ib, timeout, &rc);
+                       ob, eb, ib, timeout, usepath, &rc);
         if (inpcopy != 0) {
             (*env)->ReleasePrimitiveArrayCritical(env, inpcopy, ib->buf, 0);
             (*env)->DeleteLocalRef(env, inpcopy);

Modified: commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestExec.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestExec.java?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestExec.java (original)
+++ commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestExec.java Mon Oct 10 20:14:16 2011
@@ -64,6 +64,22 @@ public class TestExec extends Assert
         assertEquals(rs, "hello world");
     }
 
+    @Test(groups = { "posix" })
+    public void execShell()
+        throws Exception
+    {
+        Exec e = Exec.newInstance();
+        assertNotNull(e);
+        e.redirectStdout(true);
+        //e.redirectStderr(true);
+        int r = e.execCommand("echo \"foo bar\" | head -1");
+        assertEquals(r, Status.CHILD_DONE);
+        byte[] stdout = e.getStdout();
+        assertNotNull(stdout);
+        String rs = new String(stdout);
+        System.out.println("Out is " + rs);
+    }
+
     @Test(groups = { "windows" })
     public void execWindows()
         throws Exception

Modified: commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestServerEndpoint.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestServerEndpoint.java?rev=1181201&r1=1181200&r2=1181201&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestServerEndpoint.java (original)
+++ commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestServerEndpoint.java Mon Oct 10 20:14:16 2011
@@ -144,7 +144,7 @@ public class TestServerEndpoint extends 
             fs.write(b);
         fs.close();
         try {
-            Sendfile sf = new Sendfile(sendf);
+            Sendfile sf = new Sendfile(sendf.getPath());
             cs.setTimeout(200);
             assertFalse(cs.isBlocking());
             int send = sf.send(cs);