From 94e70da4ef21382363d70e9b37a9f4ce6d949f38 Mon Sep 17 00:00:00 2001 From: "W. Eric Norum" Date: Fri, 9 Jul 2004 13:18:40 +0000 Subject: [PATCH] Allow redirection from recursive iocsh invocations. --- src/iocsh/iocsh.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/iocsh/iocsh.cpp b/src/iocsh/iocsh.cpp index 6dfdc69e4..90f17d64b 100644 --- a/src/iocsh/iocsh.cpp +++ b/src/iocsh/iocsh.cpp @@ -60,6 +60,7 @@ struct iocshRedirect { const char *name; const char *mode; FILE *fp; + FILE *oldFp; }; /* @@ -312,9 +313,18 @@ startRedirect(const char *filename, int lineno, struct iocshRedirect *redirect) for (i = 0 ; i < NREDIRECTS ; i++, redirect++) { if (redirect->fp != NULL) { switch(i) { - case 0: epicsSetStdin(redirect->fp); break; - case 1: epicsSetStdout(redirect->fp); break; - case 2: epicsSetStderr(redirect->fp); break; + case 0: + redirect->oldFp = epicsGetStdin(); + epicsSetStdin(redirect->fp); + break; + case 1: + redirect->oldFp = epicsGetStdout(); + epicsSetStdout(redirect->fp); + break; + case 2: + redirect->oldFp = epicsGetStderr(); + epicsSetStderr(redirect->fp); + break; } } } @@ -335,9 +345,9 @@ stopRedirect(const char *filename, int lineno, struct iocshRedirect *redirect) redirect->name, strerror(errno)); redirect->fp = NULL; switch(i) { - case 0: epicsSetStdin(NULL); break; - case 1: epicsSetStdout(NULL); break; - case 2: epicsSetStderr(NULL); break; + case 0: epicsSetStdin(redirect->oldFp); break; + case 1: epicsSetStdout(redirect->oldFp); break; + case 2: epicsSetStderr(redirect->oldFp); break; } } redirect->name = NULL;