Master does work on Windows now, so if you can test 184.108.40.206.pre2 and report back that would be fantastic.
The problem here on both 1.7 and 9k is that we can't just rely on system-level O_BINARY and O_TEXT; there's no way to set those in Java NIO channels. MRI's logic does not manually do any crlf conversion; it merely sets the appropriate flag, and Windows POSIX APIs do the translation for it.
In 9k, I think we'll need to figure out a way to set binmode/textmode, or introduce a channel wrapper that can do the same. In 1.7, we need to modify the logic to tell our crlf-converting wrapper not to convert for binary reads.
This is not going to get fixed for 1.7.20, so I'm bumping it to 21.
This is broken on 1.7 and 9k in that we do not return proper crlf or lack thereof. On 1.7, we only fail in the third test (read(amount)) and we return as \n vs \r\n. On 9k, we also fail the third test similarly plus we fail the first test and return \n. I am punting because I do not want to dig into guts of IO in 1.7 this close to release.