summaryrefslogtreecommitdiffhomepage
path: root/src/encoding.c
diff options
context:
space:
mode:
authormimaki <[email protected]>2012-04-23 11:51:47 +0900
committermimaki <[email protected]>2012-04-23 11:51:47 +0900
commitc80487561f291e8239541687341b4d64a840c108 (patch)
treed4f7777cc91597cf880bed364df26066b9aaee8f /src/encoding.c
parent835443614d21b13b27af3674d7f8cb9bf49c298b (diff)
parent3f0b98762d4a49beb7cc3f9cc8a8dfcee4aa5f6f (diff)
downloadmruby-c80487561f291e8239541687341b4d64a840c108.tar.gz
mruby-c80487561f291e8239541687341b4d64a840c108.zip
Merge branch 'master' of github.com:mruby/mruby
Conflicts: src/variable.c
Diffstat (limited to 'src/encoding.c')
-rw-r--r--src/encoding.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/encoding.c b/src/encoding.c
index 2df294e20..ed30a222a 100644
--- a/src/encoding.c
+++ b/src/encoding.c
@@ -917,6 +917,31 @@ enc_name(mrb_state *mrb, mrb_value self)
return mrb_usascii_str_new2(mrb, mrb_enc_name((mrb_encoding*)DATA_PTR(self)));
}
+struct fn_arg {
+ mrb_state *mrb;
+ int (*func)(ANYARGS);
+ void *a;
+};
+
+static int
+fn_i(st_data_t key, st_data_t val, st_data_t arg) {
+ struct fn_arg *a = (struct fn_arg*)arg;
+
+ return (*a->func)(a->mrb, key, val, a->a);
+}
+
+static int
+st_foreachNew(mrb_state *mrb, st_table *tbl, int (*func)(ANYARGS), void *a)
+{
+ struct fn_arg arg = {
+ mrb,
+ func,
+ a,
+ };
+
+ return st_foreach(tbl, fn_i, (st_data_t)&arg);
+}
+
static int
enc_names_i(mrb_state *mrb, st_data_t name, st_data_t idx, st_data_t args)
{