From eaa0015d47d0eba7b91c571ef33ab8fed9bcaccc Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Tue, 24 May 2022 18:55:39 +0300 Subject: [PATCH] mruby: implement dummy KernAux.snprintf1 --- pkgs/mruby/mrblib/kernaux.rb | 4 ---- pkgs/mruby/src/main.c | 1 + pkgs/mruby/src/main.h | 1 + pkgs/mruby/src/printf.c | 25 +++++++++++++++++++++++++ 4 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 pkgs/mruby/src/printf.c diff --git a/pkgs/mruby/mrblib/kernaux.rb b/pkgs/mruby/mrblib/kernaux.rb index 3b057e3..b959ef5 100644 --- a/pkgs/mruby/mrblib/kernaux.rb +++ b/pkgs/mruby/mrblib/kernaux.rb @@ -23,10 +23,6 @@ module KernAux snprintf1(SPRINTF1_BUFFER_SIZE, format, *args).first end - def self.snprintf1(_buffer_size, _format, ...) - ['', 0] - end - class Error < RuntimeError; end class AssertError < Error; end end diff --git a/pkgs/mruby/src/main.c b/pkgs/mruby/src/main.c index 5bfb8e9..9978da9 100644 --- a/pkgs/mruby/src/main.c +++ b/pkgs/mruby/src/main.c @@ -27,6 +27,7 @@ void mrb_mruby_kernaux_gem_init(mrb_state *const mrb) init_assert(mrb); init_ntoa(mrb); init_cmdline(mrb); + init_printf(mrb); } void current_mrb_start(mrb_state *mrb) diff --git a/pkgs/mruby/src/main.h b/pkgs/mruby/src/main.h index 25ee917..0a5720f 100644 --- a/pkgs/mruby/src/main.h +++ b/pkgs/mruby/src/main.h @@ -10,5 +10,6 @@ mrb_state *current_mrb_get(); void init_assert(mrb_state *mrb); void init_ntoa(mrb_state *mrb); void init_cmdline(mrb_state *mrb); +void init_printf(mrb_state *mrb); #endif diff --git a/pkgs/mruby/src/printf.c b/pkgs/mruby/src/printf.c new file mode 100644 index 0000000..0bb4d2c --- /dev/null +++ b/pkgs/mruby/src/printf.c @@ -0,0 +1,25 @@ +#include "main.h" + +#include + +#include +#include +#include + +static mrb_value rb_KernAux_snprintf1(mrb_state *mrb, mrb_value self); + +void init_printf(mrb_state *const mrb) +{ + struct RClass *const rb_KernAux = mrb_module_get_id(mrb, MRB_SYM(KernAux)); + + mrb_define_class_method(mrb, rb_KernAux, "snprintf1", rb_KernAux_snprintf1, + MRB_ARGS_REQ(2) | MRB_ARGS_OPT(2)); +} + +mrb_value rb_KernAux_snprintf1(mrb_state *const mrb, mrb_value self) +{ + mrb_value values[2]; + values[0] = mrb_obj_freeze(mrb, mrb_str_new_lit(mrb, "")); + values[1] = mrb_nil_value(); + return mrb_obj_freeze(mrb, mrb_ary_new_from_values(mrb, 2, values)); +}