If we want to correct Windows' behavior, the following would be potential patches. ```diff --- a/proc.c +++ b/proc.c @@ -4611,10 +4611,11 @@ proc_curry(int argc, const VALUE *argv, VALUE self) arity = INT2FIX(min_arity); ...YO4 (Yoshinao Muramatsu)
In include/ruby/internal/arithmetic/int.h, FIX2INT is resolved to rb_fix2int or RB_FIX2LONG. ``` #define FIX2INT RB_FIX2INT /**< @old{RB_FIX2INT} */ /** * Converts a Fixnum into C's `int`. * * @param[in] x Some F...YO4 (Yoshinao Muramatsu)
The proc_curry function in proc.c is affected by differences in behavior caused by the int size in FIX2INT. As a result, depending on the arguments, curry may not function correctly on Windows. ``` method(:puts).curry(1r).call(42) =>...YO4 (Yoshinao Muramatsu)
Hello, @aidog I think it's very significant that you made it clear this is possible. Thank you. Team members, have there been any updates? We would appreciate any advice on how to move forward. Otherwise, if any new difficulties ...YO4 (Yoshinao Muramatsu)
This issue is caused by a combination of two problems. The first is that universal newline is incorrectly enabled when calling `open(name, encoding: "utf-8")`. The second is that, in `io.c`, `io_strip_bom()` uses `rb_io_getbyte()`, w...YO4 (Yoshinao Muramatsu)
I now consider [GH-PR#15408](https://github.com/ruby/ruby/pull/15408) to be a too invasive change. If we can make the encoding converter for CRLF conversion fast enough for practical use, the code that needs to be changed will be suffic...YO4 (Yoshinao Muramatsu)
When a file is opened with `encoding: "bom|utf-8"`, it appears that the fd holds the FTEXT flag as of the point where io_strip_bom() is called. File.write("a.txt", "a\r\n") writes "a\r\r\n". Then rb_io_getbyte is called from io_strip...YO4 (Yoshinao Muramatsu)
IO#reopen(name) discards the byte buffer but keeps the code converter and the character buffer, so characters left over from the previous stream leak into the reopened one. The code converter itself also has to go, since fptr->encs may h...YO4 (Yoshinao Muramatsu)
IO#reopen(io) relies on flush_before_seek to drop the buffers, but io_unread returns at once when rbuf is empty and therefore never reaches clear_codeconv. With characters pending in cbuf and nothing in rbuf they leak into the reopened s...YO4 (Yoshinao Muramatsu)
Unlike IO#rewind, IO#seek and IO#pos= do not clear the character buffer. As io_unread returns at once when rbuf is empty, an ungotten character survives the repositioning while it does not in binary mode. Clear the read converter after r...YO4 (Yoshinao Muramatsu)