Project

General

Profile

Bug #13546

Updated by nobu (Nobuyoshi Nakada) almost 7 years ago

We are embedding Ruby VM into a windows app ( msvc2015 CRT ). VM fails to initialize in `Init_IO` Init_IO with 'closed stream', when initing stdin, stdout and stderr. Debugging shows that `fileno()` fileno() call for stdin and stderr returns -2 value and it is not and error according to MSDN: 

 https://msdn.microsoft.com/en-us/en-en/library/zs6wbdhx.aspx 
 "If stdout or stderr is not associated with an output stream (for example, in a Windows application without a console window), the file descriptor returned is -2. In previous versions, the file descriptor returned was -1. This change allows applications to distinguish this condition from an error." 

 Applying following patch to `rb_io_check_closed` rb_io_check_closed seems to resolve the issue: 

 ```c 
 #ifdef _WIN32 
     if ((fptr->fd < 0) && (fptr->fd != -2) ) { 
 #else 
     if (fptr->fd < 0) { 
 #endif 
	 rb_raise(rb_eIOError, closed_stream); 
     } 
 ```

Back