aboutsummaryrefslogtreecommitdiff
path: root/jim-exec.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2010-01-27 14:11:42 +1000
committerSteve Bennett <steveb@workware.net.au>2010-10-15 11:02:46 +1000
commit88694720353f9c0ad65f8e2ce31d5e1b645474d6 (patch)
tree7507948ca4cff46dad44d75e8e3ce39b59c7f31f /jim-exec.c
parent82fcf63727049e8b97238ca8e419d3ea96d304a0 (diff)
downloadjimtcl-88694720353f9c0ad65f8e2ce31d5e1b645474d6.zip
jimtcl-88694720353f9c0ad65f8e2ce31d5e1b645474d6.tar.gz
jimtcl-88694720353f9c0ad65f8e2ce31d5e1b645474d6.tar.bz2
Add exec support for 2>@1
See TIP #202: http://www.tcl.tk/cgi-bin/tct/tip/202.html
Diffstat (limited to 'jim-exec.c')
-rw-r--r--jim-exec.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/jim-exec.c b/jim-exec.c
index 4ad9b21..4d3364c 100644
--- a/jim-exec.c
+++ b/jim-exec.c
@@ -693,14 +693,26 @@ Jim_CreatePipeline(Jim_Interp *interp, int argc, Jim_Obj *const *argv, int **pid
/* If we are redirecting stderr with 2>filename or 2>@fileId, then we ignore errFilePtr */
if (error != NULL) {
if (errorFile == FILE_HANDLE) {
- Jim_Obj *fhObj = Jim_NewStringObj(interp, error, -1);
- FILE *fh = Jim_AioFilehandle(interp, fhObj);
- Jim_FreeNewObj(interp, fhObj);
- if (fh == NULL) {
- goto error;
+ if (strcmp(error, "1") == 0) {
+ /* Special 2>@1 */
+ if (lastOutputId >= 0) {
+ errorId = dup(lastOutputId);
+ }
+ else {
+ /* No redirection stdout, so just use 2>@stdout */
+ error = "stdout";
+ }
+ }
+ if (errorId < 0) {
+ Jim_Obj *fhObj = Jim_NewStringObj(interp, error, -1);
+ FILE *fh = Jim_AioFilehandle(interp, fhObj);
+ Jim_FreeNewObj(interp, fhObj);
+ if (fh == NULL) {
+ goto error;
+ }
+ fflush(fh);
+ errorId = dup(fileno(fh));
}
- fflush(fh);
- errorId = dup(fileno(fh));
}
else {
/*