Skip to content

Commit

Permalink
Fixes #3278: File.open w/ File::RDWR should write \r\n but gets should
Browse files Browse the repository at this point in the history
read as \n after rewind on windows.

We were missing some windows-specific logic in needsWriteConversion.  With
this change I get three more specs passing and no regression on MRI test
suite.  SHIP IT...
enebo committed Mar 17, 2016
1 parent 18121a7 commit 4496cff
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions core/src/main/java/org/jruby/RubyIO.java
Original file line number Diff line number Diff line change
@@ -5198,10 +5198,13 @@ private boolean needsReadConversion() {

// MRI: NEED_WRITECONV (FIXME: Windows has slightly different version)
private boolean needsWriteConversion(ThreadContext context) {
Encoding ascii8bit = context.runtime.getEncodingService().getAscii8bitEncoding();
boolean notAscii8bit = enc != null && enc != context.runtime.getEncodingService().getAscii8bitEncoding();

return (enc != null && enc != ascii8bit) || openFile.isTextMode() ||
(ecflags & ((EncodingUtils.ECONV_DECORATOR_MASK & ~EncodingUtils.ECONV_CRLF_NEWLINE_DECORATOR)|EncodingUtils.ECONV_STATEFUL_DECORATOR_MASK)) != 0;
if (Platform.IS_WINDOWS) {
return notAscii8bit || (ecflags & ((EncodingUtils.ECONV_DECORATOR_MASK & ~EncodingUtils.ECONV_CRLF_NEWLINE_DECORATOR)|EncodingUtils.ECONV_STATEFUL_DECORATOR_MASK)) != 0;
} else {
return notAscii8bit || openFile.isTextMode() || (ecflags & (EncodingUtils.ECONV_DECORATOR_MASK|EncodingUtils.ECONV_STATEFUL_DECORATOR_MASK)) != 0;
}
}

// MRI: make_readconv

0 comments on commit 4496cff

Please sign in to comment.