1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
Patch from Marius Vollmer <marius.vollmer@nokia.com> to fix
assumption that some file descriptors are unused. (Closes: #593358)
Index: eperl/eperl_sys.c
===================================================================
--- eperl.orig/eperl_sys.c 2011-12-08 09:56:37.000000000 +0100
+++ eperl/eperl_sys.c 2011-12-08 09:57:14.000000000 +0100
@@ -105,21 +105,22 @@
#define HANDLE_STDIN 0
#define HANDLE_STDOUT 1
#define HANDLE_STDERR 2
-#define HANDLE_STORE_STDIN 10
-#define HANDLE_STORE_STDOUT 11
-#define HANDLE_STORE_STDERR 12
static int IO_redirected_stdin = FALSE;
static int IO_redirected_stdout = FALSE;
static int IO_redirected_stderr = FALSE;
+static int IO_handle_store_stdin;
+static int IO_handle_store_stdout;
+static int IO_handle_store_stderr;
+
void IO_redirect_stdin(FILE *fp)
{
if (IO_redirected_stdin)
IO_restore_stdin();
/* first copy the current stdin to the store handle */
- (void)dup2(HANDLE_STDIN, HANDLE_STORE_STDIN);
+ IO_handle_store_stdin = dup(HANDLE_STDIN);
/* then copy the new handle to stdin */
(void)dup2(fileno(fp), HANDLE_STDIN);
@@ -134,7 +135,7 @@
IO_restore_stdout();
/* first copy the current stdout to the store handle */
- (void)dup2(HANDLE_STDOUT, HANDLE_STORE_STDOUT);
+ IO_handle_store_stdout = dup(HANDLE_STDOUT);
/* then copy the new handle to stdout */
(void)dup2(fileno(fp), HANDLE_STDOUT);
@@ -149,7 +150,7 @@
IO_restore_stderr();
/* first copy the current stderr to the store handle */
- (void)dup2(HANDLE_STDERR, HANDLE_STORE_STDERR);
+ IO_handle_store_stderr = dup(HANDLE_STDERR);
/* then copy the new handle to stderr */
(void)dup2(fileno(fp), HANDLE_STDERR);
@@ -176,7 +177,7 @@
void IO_restore_stdin(void)
{
if (IO_redirected_stdin) {
- dup2(HANDLE_STORE_STDIN, HANDLE_STDIN);
+ dup2(IO_handle_store_stdin, HANDLE_STDIN);
IO_redirected_stdin = FALSE;
}
}
@@ -184,7 +185,7 @@
void IO_restore_stdout(void)
{
if (IO_redirected_stdout) {
- dup2(HANDLE_STORE_STDOUT, HANDLE_STDOUT);
+ dup2(IO_handle_store_stdout, HANDLE_STDOUT);
IO_redirected_stdout = FALSE;
}
}
@@ -192,7 +193,7 @@
void IO_restore_stderr(void)
{
if (IO_redirected_stderr) {
- dup2(HANDLE_STORE_STDERR, HANDLE_STDERR);
+ dup2(IO_handle_store_stderr, HANDLE_STDERR);
IO_redirected_stderr = FALSE;
}
}
|