From: Yaroslav K. <kav...@je...> - 2006-08-15 07:51:08
|
Teemu Kalvas wrote: > Index: run-program.c > =================================================================== > RCS file: /cvsroot/sbcl/sbcl/src/runtime/run-program.c,v > retrieving revision 1.12 > retrieving revision 1.13 <skip> > + if ( ( out >= 0 ) && ( out != _fileno ( stdout ) ) ) { > + if ( _dup2 ( out, _fileno ( stdout ) ) != 0 ) return > (HANDLE)-1; > + } > + if ( ( in >= 0 ) && ( in != _fileno ( stdout ) ) ) { Ups... ^^ ^^ ^^^^^^ (need stdin) > + if ( _dup2 ( in, _fileno ( stdin ) ) != 0 ) return > (HANDLE)-1; > + } > + if ( ( err >= 0 ) && ( err != _fileno ( stdout ) ) ) { Ups too ^^^ ^^^ ^^^^^^ (need stderr) And, maybe, add processing errors? (closing std*_backup handles if they are initialized and replace the in/out/err handles if they redefined) Thanks! -- WBR, Yaroslav Kavenchuk. |
From: Teemu K. <ch...@s2...> - 2006-08-16 15:40:59
|
Yaroslav Kavenchuk <kav...@je...> writes: > Teemu Kalvas wrote: > > > Index: run-program.c > > =================================================================== > > RCS file: /cvsroot/sbcl/sbcl/src/runtime/run-program.c,v > > retrieving revision 1.12 > > retrieving revision 1.13 > <skip> > > + if ( ( out >= 0 ) && ( out != _fileno ( stdout ) ) ) { > > + if ( _dup2 ( out, _fileno ( stdout ) ) != 0 ) return > > (HANDLE)-1; > > + } > > + if ( ( in >= 0 ) && ( in != _fileno ( stdout ) ) ) { > Ups... ^^ ^^ ^^^^^^ (need stdin) > > + if ( _dup2 ( in, _fileno ( stdin ) ) != 0 ) return > > (HANDLE)-1; > > + } > > + if ( ( err >= 0 ) && ( err != _fileno ( stdout ) ) ) { > Ups too ^^^ ^^^ ^^^^^^ (need stderr) > > And, maybe, add processing errors? (closing std*_backup handles if they > are initialized and replace the in/out/err handles if they redefined) Whoops. I've got a fixed version on my office computer (which is the only win32 I have for use), and I'll commit it tomorrow. I also reordered the cleanup and close approppriate fds on errors. -- Teemu |