diff --git a/error.c b/error.c index 600be01..0c11be3 100644 --- a/error.c +++ b/error.c @@ -1661,6 +1661,19 @@ Init_Exception(void) } void +rb_enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...) +{ + va_list args; + VALUE mesg; + + va_start(args, fmt); + mesg = rb_enc_vsprintf(enc, fmt, args); + va_end(args); + + rb_exc_raise(rb_exc_new3(exc, mesg)); +} + +void rb_raise(VALUE exc, const char *fmt, ...) { va_list args; diff --git a/include/ruby/encoding.h b/include/ruby/encoding.h index 4a046af..e5f0c2a 100644 --- a/include/ruby/encoding.h +++ b/include/ruby/encoding.h @@ -111,6 +111,8 @@ VALUE rb_str_export_to_enc(VALUE, rb_encoding *); VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to); VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts); +PRINTF_ARGS(NORETURN(void rb_enc_raise(rb_encoding *, VALUE, const char*, ...)), 3, 4); + /* index -> rb_encoding */ rb_encoding* rb_enc_from_index(int idx);