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/04/28 18:56:09 UTC
svn commit: r1097546 - in /commons/sandbox/runtime/trunk/src/main:
java/org/apache/commons/runtime/
java/org/apache/commons/runtime/platform/unix/
java/org/apache/commons/runtime/platform/windows/ native/os/unix/
native/os/win32/
Author: mturk
Date: Thu Apr 28 16:56:09 2011
New Revision: 1097546
URL: http://svn.apache.org/viewvc?rev=1097546&view=rev
Log:
Init system shell with exec implementation
Modified:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ExecImpl.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/unix/PosixExecImpl.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/platform/windows/WindowsExecImpl.java
commons/sandbox/runtime/trunk/src/main/native/os/unix/exec.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/exec.c
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ExecImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ExecImpl.java?rev=1097546&r1=1097545&r2=1097546&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ExecImpl.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ExecImpl.java Thu Apr 28 16:56:09 2011
@@ -32,6 +32,7 @@ public abstract class ExecImpl
impl = init0();
}
+ protected String shell;
protected ExecImpl()
{
// No Instance
@@ -47,5 +48,9 @@ public abstract class ExecImpl
public abstract Exec newInstance();
+ public final String getShell()
+ {
+ return shell;
+ }
}
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=1097546&r1=1097545&r2=1097546&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 Thu Apr 28 16:56:09 2011
@@ -47,6 +47,7 @@ final class PosixExec extends Exec
ByteArrayOutputStream out,
ByteArrayOutputStream err,
int timeout);
+ @Override
public int run(List<String> args)
{
String[] argv = args.toArray(new String[0]);
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExecImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExecImpl.java?rev=1097546&r1=1097545&r2=1097546&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExecImpl.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExecImpl.java Thu Apr 28 16:56:09 2011
@@ -28,11 +28,16 @@ import org.apache.commons.runtime.ExecIm
final class PosixExecImpl extends ExecImpl
{
- public PosixExecImpl()
+ private PosixExecImpl()
{
// No Instance
}
+ public PosixExecImpl(String shell)
+ {
+ this.shell = shell;
+ }
+
@Override
public Exec newInstance()
{
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=1097546&r1=1097545&r2=1097546&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 Thu Apr 28 16:56:09 2011
@@ -47,6 +47,7 @@ final class WindowsExec extends Exec
ByteArrayOutputStream out,
ByteArrayOutputStream err,
int timeout);
+ @Override
public int run(List<String> argv)
{
String executable = null;
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExecImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExecImpl.java?rev=1097546&r1=1097545&r2=1097546&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExecImpl.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExecImpl.java Thu Apr 28 16:56:09 2011
@@ -28,11 +28,16 @@ import org.apache.commons.runtime.ExecIm
final class WindowsExecImpl extends ExecImpl
{
- public WindowsExecImpl()
+ private WindowsExecImpl()
{
// No Instance
}
+ public WindowsExecImpl(String shell)
+ {
+ this.shell = shell;
+ }
+
public Exec newInstance()
{
return new WindowsExec();
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=1097546&r1=1097545&r2=1097546&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 Thu Apr 28 16:56:09 2011
@@ -56,7 +56,7 @@ J_DECLARE_CLAZZ = {
J_DECLARE_M_ID(0000) = {
0,
"<init>",
- "()V"
+ "(Ljava/lang/String;)V"
};
static int _fdwalker(void *data , int fd)
@@ -584,7 +584,7 @@ ACR_JNI_EXPORT(jobject, ExecImpl, init0)
return 0;
R_LOAD_METHOD(0000, 0);
_clazzn.u = 1;
- return (*env)->NewObject(env, _clazzn.i, J4MID(0000));
+ return (*env)->NewObject(env, _clazzn.i, J4MID(0000), AcrNewJavaStringW(env, SHELL_PATH));
}
ACR_UNX_EXPORT(jlong, PosixExec, run0)(JNI_STDARGS, jstring executable,
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/exec.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/exec.c?rev=1097546&r1=1097545&r2=1097546&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/exec.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/exec.c Thu Apr 28 16:56:09 2011
@@ -37,7 +37,6 @@
#define SIGKILL 9
static CRITICAL_SECTION _procmgr_lock;
-static wchar_t *SHELL_PATH;
J_DECLARE_CLAZZ = {
INVALID_FIELD_OFFSET,
@@ -50,25 +49,26 @@ J_DECLARE_CLAZZ = {
J_DECLARE_M_ID(0000) = {
0,
"<init>",
- "()V"
+ "(Ljava/lang/String;)V"
};
-static int _procmgr_init(void)
+static jstring _procmgr_init(JNI_STDENV)
{
+ wchar_t b[PATH_MAX];
+ wchar_t *shell;
InitializeCriticalSection(&_procmgr_lock);
- SHELL_PATH = _wgetenv(L"COMSPEC");
- if (SHELL_PATH == 0) {
- wchar_t b[PATH_MAX];
+ shell = _wgetenv(L"COMSPEC");
+ if (shell == 0) {
UINT r;
r = GetSystemDirectoryW(b, PATH_MAX - 10);
if (r == 0 || r > (PATH_MAX - 10))
wcscpy(b, L"C:\\Windows\\System32\\cmd.exe");
else
wcscat(b, L"\\cmd.exe");
- SHELL_PATH = wcsdup(b);
+ shell = b;
}
- return 0;
+ return AcrNewJavaStringW(env, shell);
}
static int _run_exec(const wchar_t *executable,
@@ -85,7 +85,7 @@ static int _run_exec(const wchar_t *exec
STARTUPINFOW si;
BOOL rs;
int i, rc = 0;
- int exitwhy = 0;
+ int exitwhy = ACR_PARENT_ERROR;
int exitval = 0;
HANDLE pipes[PIPE_COUNT] = { 0, 0, 0, 0, 0, 0 };
HANDLE waithandle[3] = { 0, 0, 0 };
@@ -511,19 +511,22 @@ cleanup:
SAFE_CLOSE_HANDLE(overlap[i].o.hEvent);
}
*retval = rc;
- return ACR_PARENT_ERROR;
+ if (ACR_STATUS_IS_ENOENT(rc))
+ exitwhy = ACR_CHILD_ERROR;
+ return exitwhy;
}
ACR_JNI_EXPORT(jobject, ExecImpl, init0)(JNI_STDARGS)
{
+ jstring shell;
if (_clazzn.u == 1)
return (*env)->NewObject(env, _clazzn.i, J4MID(0000));
if (AcrLoadClass(env, &_clazzn, 0) != 0)
return 0;
R_LOAD_METHOD(0000, 0);
_clazzn.u = 1;
- _procmgr_init();
- return (*env)->NewObject(env, _clazzn.i, J4MID(0000));
+ shell = _procmgr_init(env);
+ return (*env)->NewObject(env, _clazzn.i, J4MID(0000), shell);
}
ACR_WIN_EXPORT(jlong, WindowsExec, run0)(JNI_STDARGS, jstring executable,