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 2010/01/18 15:24:47 UTC
svn commit: r900406 - in /commons/sandbox/runtime/trunk/src/main/native:
include/acr_exec.h os/unix/exec.c os/win32/exec.c os/win32/subproc.c
Author: mturk
Date: Mon Jan 18 14:24:46 2010
New Revision: 900406
URL: http://svn.apache.org/viewvc?rev=900406&view=rev
Log:
Add option to redirect stderr to null and just have stdout
Modified:
commons/sandbox/runtime/trunk/src/main/native/include/acr_exec.h
commons/sandbox/runtime/trunk/src/main/native/os/unix/exec.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/exec.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/subproc.c
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_exec.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_exec.h?rev=900406&r1=900405&r2=900406&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_exec.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_exec.h Mon Jan 18 14:24:46 2010
@@ -85,10 +85,10 @@
#define ACR_PROC_HAS_STDIN 0x0001
#define ACR_PROC_HAS_STDOUT 0x0002
#define ACR_PROC_HAS_STDERR 0x0004
-#define ACR_PROC_OUTPUT_COMBINE 0x000A
-#define ACR_PROC_USE_PATH 0x0010
-#define ACR_PROC_DETACHED 0x0100
-#define ACR_PROC_SUBPROC 0x0200
+#define ACR_PROC_NUL_STDERR 0x0010
+#define ACR_PROC_USE_PATH 0x0100
+#define ACR_PROC_DETACHED 0x0200
+#define ACR_PROC_SUBPROC 0x0400
/**
* Create new executable object structure
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=900406&r1=900405&r2=900406&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 Jan 18 14:24:46 2010
@@ -279,20 +279,23 @@
goto child_cleanup;
}
if (pipes[PIPE_STDERR_WRS] == -1) {
- if (!(ep->flags & ACR_PROC_HAS_STDOUT) ||
- ((ep->flags & ACR_PROC_OUTPUT_COMBINE) == ACR_PROC_OUTPUT_COMBINE))
- rc = dup2(pipes[PIPE_STDOUT_WRS], STDERR_FILENO);
+ if (ep->flags & ACR_NUL_STDERR) {
+ pipes[PIPE_STDERR_WRS] = nullpipe(O_WRONLY, -1);
+ if (pipes[PIPE_STDERR_WRS] == -1) {
+ rc = ACR_GET_OS_ERROR();
+ goto child_cleanup;
+ }
+ }
else
- rc = nullpipe(O_WRONLY, STDERR_FILENO);
+ pipes[PIPE_STDERR_WRS] = pipes[PIPE_STDOUT_WRS];
}
- else
- rc = dup2(pipes[PIPE_STDERR_WRS], STDERR_FILENO);
- if (rc == -1) {
+ if (dup2(pipes[PIPE_STDERR_WRS], STDERR_FILENO) == -1) {
rc = ACR_GET_OS_ERROR();
goto child_cleanup;
}
+ if (pipes[PIPE_STDERR_WRS] != pipes[PIPE_STDOUT_WRS]
+ i_close(&pipes[PIPE_STDERR_WRS]);
i_close(&pipes[PIPE_STDOUT_WRS]);
- i_close(&pipes[PIPE_STDERR_WRS]);
/* Close all descriptors except our pipes
* using fdwalk
*/
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=900406&r1=900405&r2=900406&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 Mon Jan 18 14:24:46 2010
@@ -225,7 +225,7 @@
goto cleanup;
}
else {
- /* Use NUL (aka /dev/null) */
+ /* Redirect stdout to NUL */
pipes[PIPE_STDOUT_WRS] = nullpipe(GENERIC_WRITE, NULL);
}
if (ep->flags & ACR_PROC_HAS_STDERR) {
@@ -234,14 +234,15 @@
goto cleanup;
}
else {
- if (!(ep->flags & ACR_PROC_HAS_STDOUT) ||
- ((ep->flags & ACR_PROC_OUTPUT_COMBINE) == ACR_PROC_OUTPUT_COMBINE)) {
+ if (ep->flags & ACR_PROC_NUL_STDERR)) {
+ /* Redirect stderr to NUL */
+ pipes[PIPE_STDERR_WRS] = nullpipe(GENERIC_WRITE, NULL);
+ }
+ else {
/* Use same pipes for stderr and stdout
*/
pipes[PIPE_STDERR_WRS] = pipes[PIPE_STDOUT_WRS];
}
- else
- pipes[PIPE_STDERR_WRS] = nullpipe(GENERIC_WRITE, NULL);
}
/* Always use STDHANDLES
* They are either real handles or handles to NUL device
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/subproc.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/subproc.c?rev=900406&r1=900405&r2=900406&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/subproc.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/subproc.c Mon Jan 18 14:24:46 2010
@@ -210,14 +210,6 @@
child.flags |= ACR_PROC_HAS_STDOUT;
}
break;
- case L'C':
- /* Where the child stdout should be redirected */
- if (opt) {
- wcslcpy(po_name, pfx, sizeof(po_name));
- wcslcat(po_name, opt, sizeof(po_name));
- child.flags |= ACR_PROC_OUTPUT_COMBINE;
- }
- break;
case L'E':
/* Where the child stderr should be redirected */
if (opt) {
@@ -225,6 +217,8 @@
wcslcat(pe_name, opt, sizeof(pe_name));
child.flags |= ACR_PROC_HAS_STDERR;
}
+ else
+ child.flags |= ACR_PROC_NUL_STDERR;
break;
case L'D':
/* Detached process */
@@ -352,14 +346,15 @@
}
}
else {
- if (!(child.flags & ACR_PROC_HAS_STDOUT) ||
- ((child.flags & ACR_PROC_OUTPUT_COMBINE) == ACR_PROC_OUTPUT_COMBINE)) {
+ if (child.flags & ACR_PROC_NUL_STDERR)) {
+ /* Redirect stderr to NUL */
+ pipes[PIPE_STDERR_WRS] = nullpipe(GENERIC_WRITE, NULL);
+ }
+ else {
/* Use same pipes for stderr and stdout
*/
pipes[PIPE_STDERR_WRS] = pipes[PIPE_STDOUT_WRS];
}
- else
- pipes[PIPE_STDERR_WRS] = nullpipe(GENERIC_WRITE, NULL);
}
/* Always use STDHANDLES
@@ -824,6 +819,10 @@
suba[subn] = s_malloc(wchar_t, 64);
_snwprintf(suba[subn++], 64, L"--E:%s", childpname[PIPE_STDERR_RPC] + 9);
}
+ else if (ep->flags & ACR_PROC_NUL_STDERR) {
+ /* --E without pipe name will force NUL for stderr */
+ suba[subn++] = x_wcsdup(L"--E");
+ }
suba[subn++] = ACR_wcsdup(executable);
suba[subn] = NULL;
/* Merge the new array with the provided arguments