ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-dev:52058]  [Ruby master Bug#8445] IO.open and IO#set_enconding does not support :fallback option
       [not found] <redmine.issue-8445.20130524220300.7143@ruby-lang.org>
@ 2023-11-13 19:29 ` JesseJohnson (Jesse Johnson) via ruby-dev
  0 siblings, 0 replies; only message in thread
From: JesseJohnson (Jesse Johnson) via ruby-dev @ 2023-11-13 19:29 UTC (permalink / raw)
  To: ruby-dev; +Cc: JesseJohnson (Jesse Johnson)

Issue #8445 has been updated by JesseJohnson (Jesse Johnson).


I can replicate this in 3.2.2.

----------------------------------------
Bug #8445: IO.open and IO#set_enconding does not support :fallback option
https://bugs.ruby-lang.org/issues/8445#change-105299

* Author: pjmtdw (Haruhiro Yoshimoto)
* Status: Assigned
* Priority: Normal
* Assignee: akr (Akira Tanaka)
* ruby -v: trunk(ruby 2.1.0dev)
----------------------------------------
RubyDoc says that `IO.open` and `IO#set_encoding` supports optional argument defined in `String#encode`.
http://ruby-doc.org/core-2.0/IO.html#method-c-new-label-Options
In fact, `:invalid, :undef and :replace` works as expected.

However, `:fallback` option does not work neither for `IO.open` and `IO#set_encoding`.
Following is the example code which does not work.
`f(x)` is never called even if hoge.txt contains non convertible character.

```ruby
File.open("./hoge.txt","r:Shift_JIS:utf-8", :fallback => lambda{|x|f(x)}){|f|
  ...
}
File.open("./hoge.txt"){|f|
  f.set_encoding("Shift_JIS","utf-8",:fallback => lambda{|x|f(x)})
  ...
}
```

I Think this is because `fill_cbuf()` in `io.c` calls `rb_econv_convert()` from `transcode.c` directly.
On the other hand, `fallback_func` is called in `transcode_loop()`, which is called by `str_encode()`. 

Since `transcode_loop()` also calls `rb_econv_convert()`, I wrote a small patch which moves some codes from
`transcode_loop()` to `rb_econv_convert()` to fix the problem.

The attached file is the patch. Hope this helps.


---Files--------------------------------
support-fallback-for-io.patch (3.9 KB)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-11-13 19:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <redmine.issue-8445.20130524220300.7143@ruby-lang.org>
2023-11-13 19:29 ` [ruby-dev:52058] [Ruby master Bug#8445] IO.open and IO#set_enconding does not support :fallback option JesseJohnson (Jesse Johnson) via ruby-dev

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).