Kouhei Sutou
null+****@clear*****
Mon Nov 3 13:53:52 JST 2014
Kouhei Sutou 2014-11-03 13:53:52 +0900 (Mon, 03 Nov 2014) New Revision: a15a6cce09f528bd534ec4b1ea589c5ececd9621 https://github.com/groonga/groonga/commit/a15a6cce09f528bd534ec4b1ea589c5ececd9621 Message: mrb load: support loading relative path by "./XXX.rb" style load Modified files: lib/ctx_impl_mrb.c lib/mrb.c Modified: lib/ctx_impl_mrb.c (+3 -0) =================================================================== --- lib/ctx_impl_mrb.c 2014-11-02 21:22:10 +0900 (777040d) +++ lib/ctx_impl_mrb.c 2014-11-03 13:53:52 +0900 (1d1b7f4) @@ -79,9 +79,12 @@ grn_ctx_impl_mrb_init(grn_ctx *ctx) grn_mruby_enabled = getenv("GRN_MRUBY_ENABLED"); if (grn_mruby_enabled && strcmp(grn_mruby_enabled, "no") == 0) { ctx->impl->mrb.state = NULL; + ctx->impl->mrb.base_directory[0] = '\0'; ctx->impl->mrb.module = NULL; + ctx->impl->mrb.object_class = NULL; } else { ctx->impl->mrb.state = mrb_open(); + ctx->impl->mrb.base_directory[0] = '\0'; grn_ctx_impl_mrb_init_bindings(ctx); grn_ctx_impl_mrb_init_eval(ctx); } Modified: lib/mrb.c (+17 -0) =================================================================== --- lib/mrb.c 2014-11-02 21:22:10 +0900 (3ec1565) +++ lib/mrb.c 2014-11-03 13:53:52 +0900 (7f3d94e) @@ -67,6 +67,9 @@ grn_mrb_expand_script_path(grn_ctx *ctx, const char *path, char *expanded_path) if (path[0] == '/') { expanded_path[0] = '\0'; + } else if (path[0] == '.' && path[1] == '/') { + strcpy(expanded_path, ctx->impl->mrb.base_directory); + strcat(expanded_path, "/"); } else { ruby_scripts_dir = getenv("GRN_RUBY_SCRIPTS_DIR"); if (!ruby_scripts_dir) { @@ -126,6 +129,17 @@ grn_mrb_load(grn_ctx *ctx, const char *path) return mrb_nil_value(); } + { + char current_base_directory[PATH_MAX]; + char *last_directory; + + strcpy(current_base_directory, data->base_directory); + strcpy(data->base_directory, expanded_path); + last_directory = strrchr(data->base_directory, '/'); + if (last_directory) { + last_directory[0] = '\0'; + } + parser = mrb_parser_new(mrb); mrb_parser_set_filename(parser, expanded_path); parser->s = parser->send = NULL; @@ -140,6 +154,9 @@ grn_mrb_load(grn_ctx *ctx, const char *path) } mrb_parser_free(parser); + strcpy(data->base_directory, current_base_directory); + } + return result; } -------------- next part -------------- HTML����������������������������...Download