diff options
author | Steve Bennett <steveb@workware.net.au> | 2010-01-27 14:11:42 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2010-10-15 11:02:46 +1000 |
commit | 88694720353f9c0ad65f8e2ce31d5e1b645474d6 (patch) | |
tree | 7507948ca4cff46dad44d75e8e3ce39b59c7f31f /jim-exec.c | |
parent | 82fcf63727049e8b97238ca8e419d3ea96d304a0 (diff) | |
download | jimtcl-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.c | 26 |
1 files changed, 19 insertions, 7 deletions
@@ -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 { /* |