Allow redirection from recursive iocsh invocations.

This commit is contained in:
W. Eric Norum
2004-07-09 13:18:40 +00:00
parent 744e836ad8
commit 94e70da4ef

View File

@@ -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;