[Groonga-commit] groonga/groonga at a15a6cc [master] mrb load: support loading relative path by "./XXX.rb" style load

アーカイブの一覧に戻る

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����������������������������...
ダウンロード 



More information about the Groonga-commit mailing list
アーカイブの一覧に戻る