[Groonga-commit] groonga/groonga at 72a2fd2 [master] mrb: use UTF-8 for the default system Ruby scripts directory

Back to archive index

Kouhei Sutou null+****@clear*****
Mon Jun 18 16:54:34 JST 2018


Kouhei Sutou	2018-06-18 16:54:34 +0900 (Mon, 18 Jun 2018)

  New Revision: 72a2fd2f0b73a48d1f29601e3d0bdc6737bccc49
  https://github.com/groonga/groonga/commit/72a2fd2f0b73a48d1f29601e3d0bdc6737bccc49

  Message:
    mrb: use UTF-8 for the default system Ruby scripts directory

  Modified files:
    lib/mrb.c

  Modified: lib/mrb.c (+41 -6)
===================================================================
--- lib/mrb.c    2018-06-12 17:13:18 +0900 (16bf6206b)
+++ lib/mrb.c    2018-06-18 16:54:34 +0900 (fbcfcaf96)
@@ -68,19 +68,54 @@ grn_mrb_is_order_by_estimated_size_enabled(void)
 
 #ifdef GRN_WITH_MRUBY
 # ifdef WIN32
+static char *
+grn_mrb_string_locale_to_utf8(grn_ctx *ctx, const char *locale_string)
+{
+  wchar_t *wide_string;
+  int n_wide_chars;
+  char *utf8_string;
+  int utf8_string_bytes;
+
+  n_wide_chars = MultiByteToWideChar(CP_ACP, 0,
+                                     locale_string, -1,
+                                     NULL, 0);
+  wide_string = GRN_MALLOCN(wchar_t, n_wide_chars);
+  if (!wide_string) {
+    return NULL;
+  }
+  n_wide_chars = MultiByteToWideChar(CP_ACP, 0,
+                                     locale_string, locale_string_length,
+                                     wide_string, n_wide_chars);
+  utf8_string_bytes = WideCharToMultiByte(CP_UTF8, 0,
+                                          wide_string, n_wide_chars,
+                                          NULL, 0,
+                                          NULL,NULL);
+  utf8_string = GRN_MALLOCN(char, utf8_string_bytes + 1);
+  if (!utf8_string) {
+    GRN_FREE(wide_string);
+    return NULL;
+  }
+  utf8_string_bytes = WideCharToMultiByte(CP_UTF8, 0,
+                                          wide_string, n_wide_chars,
+                                          utf8_string, utf8_string_bytes,
+                                          NULL, NULL);
+  utf8_string[utf8_string_bytes] = '\0';
+  return utf8_string;
+}
+
 static char *windows_ruby_scripts_dir = NULL;
 static char windows_ruby_scripts_dir_buffer[PATH_MAX];
 static const char *
-grn_mrb_get_default_system_ruby_scripts_dir(void)
+grn_mrb_get_default_system_ruby_scripts_dir(grn_ctx *ctx)
 {
   if (!windows_ruby_scripts_dir) {
     const char *base_dir;
     const char *relative_path = GRN_RELATIVE_RUBY_SCRIPTS_DIR;
-    size_t base_dir_length;
+    const char *utf8_base_dir;
 
     base_dir = grn_windows_base_dir();
-    base_dir_length = strlen(base_dir);
-    grn_strcpy(windows_ruby_scripts_dir_buffer, PATH_MAX, base_dir);
+    utf8_base_dir = grn_mrb_string_locale_to_utf8(ctx, base_dir);
+    grn_strcpy(windows_ruby_scripts_dir_buffer, PATH_MAX, utf8_base_dir);
     grn_strcat(windows_ruby_scripts_dir_buffer, PATH_MAX, "/");
     grn_strcat(windows_ruby_scripts_dir_buffer, PATH_MAX, relative_path);
     windows_ruby_scripts_dir = windows_ruby_scripts_dir_buffer;
@@ -90,7 +125,7 @@ grn_mrb_get_default_system_ruby_scripts_dir(void)
 
 # else /* WIN32 */
 static const char *
-grn_mrb_get_default_system_ruby_scripts_dir(void)
+grn_mrb_get_default_system_ruby_scripts_dir(grn_ctx *ctx)
 {
   return GRN_RUBY_SCRIPTS_DIR;
 }
@@ -102,7 +137,7 @@ grn_mrb_get_system_ruby_scripts_dir(grn_ctx *ctx)
   if (grn_mrb_ruby_scripts_dir[0]) {
     return grn_mrb_ruby_scripts_dir;
   } else {
-    return grn_mrb_get_default_system_ruby_scripts_dir();
+    return grn_mrb_get_default_system_ruby_scripts_dir(ctx);
   }
 }
 
-------------- next part --------------
HTML����������������������������...
URL: https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20180618/a83464b1/attachment-0001.htm 



More information about the Groonga-commit mailing list
Back to archive index